Skip to content

Commit ba264b5

Browse files
committed
refactor(service): paginate blacklist checks to reduce server load
- Replace bulk blacklist check with paginated requests of 100 documents each - Implement private method checkBlacklistPaged to handle pagination logic - Add debug logs to indicate blacklist checking progress - Update usage in multiple places to call paginated blacklist check method - Extend testing checklist with scenarios for server protection via pagination - Verify request batching and progress logging in challenge scenarios
1 parent ba4380e commit ba264b5

File tree

2 files changed

+96
-3
lines changed

2 files changed

+96
-3
lines changed

TESTING_CHECKLIST.md

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,75 @@
346346

347347
---
348348

349-
## 8. 综合压力测试
349+
## 9. 服务端分页保护测试
350+
351+
### 目标
352+
验证大量文档操作时,客户端会自动分页请求,避免给服务端造成压力
353+
354+
### 9.1 黑名单检查分页
355+
356+
#### 测试步骤
357+
1. **准备数据**
358+
- [ ] 准备 300 个测试文档
359+
- [ ] 设置部分文档在黑名单中
360+
361+
2. **执行检测**
362+
- [ ] 打开增量分享界面
363+
- [ ] 观察浏览器 Network 面板
364+
365+
3. **验证点**
366+
- [ ] 黑名单检查请求分批发送(每批最多 100 个文档 ID)
367+
- [ ] 控制台显示检查进度日志
368+
- [ ] 所有文档最终都被正确检查
369+
370+
4. **预期输出**
371+
```
372+
[incremental-share-service] 黑名单检查进度: 100/300
373+
[incremental-share-service] 黑名单检查进度: 200/300
374+
[incremental-share-service] 黑名单检查进度: 300/300
375+
```
376+
377+
### 9.2 分享历史获取分页
378+
379+
#### 测试步骤
380+
1. **准备数据**
381+
- [ ] 服务端已有 500+ 条分享历史记录
382+
383+
2. **执行检测**
384+
- [ ] 打开增量分享界面
385+
- [ ] 观察 Network 面板的 listDoc 请求
386+
387+
3. **验证点**
388+
- [ ] listDoc 请求自动分页(每页 100 条)
389+
- [ ] 自动获取所有分页直到 hasMore 为 false
390+
- [ ] 控制台显示"获取分享历史完成,共 XXX 条记录"
391+
- [ ] 有安全检查,最多查询 100 页(防止无限循环)
392+
393+
4. **查看请求**
394+
- Network 面板应该看到多个 listDoc 请求:
395+
```
396+
POST /api/share/listDoc {pageNum: 0, pageSize: 100}
397+
POST /api/share/listDoc {pageNum: 1, pageSize: 100}
398+
POST /api/share/listDoc {pageNum: 2, pageSize: 100}
399+
...
400+
```
401+
402+
### 9.3 服务端压力测试
403+
404+
#### 测试步骤
405+
1. **极限场景**
406+
- [ ] 1000 个文档同时进行变更检测
407+
- [ ] 观察服务端负载
408+
409+
2. **验证点**
410+
- [ ] 黑名单检查分 10 次请求(每次 100 个)
411+
- [ ] 分享历史自动分页获取
412+
- [ ] 服务端不会因为单次请求过大而报错或超时
413+
- [ ] 整体检测时间在可接受范围内(< 10秒)
414+
415+
---
416+
417+
## 10. 综合压力测试
350418

351419
### 测试场景
352420
模拟真实使用场景,测试所有功能的协同工作

src/service/IncrementalShareService.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,9 @@ export class IncrementalShareService {
249249

250250
try {
251251
const docIds = allDocuments.map((doc) => doc.docId)
252-
const blacklistStatus = await this.blacklistService.areInBlacklist(docIds)
252+
253+
// 分页检查黑名单,避免一次性查询过多文档给服务端造成压力
254+
const blacklistStatus = await this.checkBlacklistPaged(docIds)
253255

254256
const allHistory = await this.getAllShareHistory()
255257

@@ -314,7 +316,9 @@ export class IncrementalShareService {
314316

315317
try {
316318
const docIds = documents.map((doc) => doc.docId)
317-
const blacklistStatus = await this.blacklistService.areInBlacklist(docIds)
319+
320+
// 分页检查黑名单,避免一次性查询过多文档给服务端造成压力
321+
const blacklistStatus = await this.checkBlacklistPaged(docIds)
318322
const validDocs: Array<{ docId: string; docTitle: string }> = []
319323

320324
for (const doc of documents) {
@@ -379,6 +383,27 @@ export class IncrementalShareService {
379383
return result
380384
}
381385

386+
/**
387+
* 分页检查黑名单(避免一次性查询过多文档)
388+
* @param docIds 文档ID列表
389+
* @returns 黑名单状态映射
390+
*/
391+
private async checkBlacklistPaged(docIds: string[]): Promise<Record<string, boolean>> {
392+
const PAGE_SIZE = 100 // 每页检查 100 个文档
393+
const result: Record<string, boolean> = {}
394+
395+
// 分页处理
396+
for (let i = 0; i < docIds.length; i += PAGE_SIZE) {
397+
const pageDocIds = docIds.slice(i, i + PAGE_SIZE)
398+
const pageResult = await this.blacklistService.areInBlacklist(pageDocIds)
399+
Object.assign(result, pageResult)
400+
401+
this.logger.debug(`黑名单检查进度: ${Math.min(i + PAGE_SIZE, docIds.length)}/${docIds.length}`)
402+
}
403+
404+
return result
405+
}
406+
382407
/**
383408
* 更新最后分享时间
384409
*/

0 commit comments

Comments
 (0)