已开启
perf(cloud): getDailyWords 分页拉取,避免 limit 截断 (#4) #4
雅皮士创建于 9 天前
perf(cloud): getDailyWords 分页拉取,避免 limit 截断 (#4) #4
已开启
合并受阻
9 天前 关联了issue:[Bug][P1] 登录态不持久化 + UTC 时区导致连续打卡数据错乱,[Enhancement][P2] 可维护性与性能优化:dailyGoal 硬编码、查询效率、MVVM 分层、测试缺失
9 天前 关联了issue:[Bug][P1] 登录态不持久化 + UTC 时区导致连续打卡数据错乱,[Enhancement][P2] 可维护性与性能优化:dailyGoal 硬编码、查询效率、MVVM 分层、测试缺失
变更说明
针对 Issue #4 的「
getDailyWords查询效率/正确性」问题。原实现用硬编码
limit(500)/limit(200)拉取后在内存用includes()过滤:const { documents: learnedDocs } = await databases.listDocuments( DB_ID, COL.records, [Query.equal('userId', userId), Query.limit(500)]); // ... const { documents: allWords } = await databases.listDocuments( DB_ID, COL.words, [Query.limit(200)]); wordsDocs = allWords.filter(w => !learnedWordIds.includes(w.$id)).slice(0, 10);当用户已学记录超过 500 条、或词库超过 200 词时,结果会被静默截断,出现漏词/总数不准。
变更内容
listAllDocuments(每页 100,Query.offset游标,1 万条安全上限);Set替代includes(),差集从 O(n*m) 降为 O(n);totalWords由分页得到的全量词数得出,避免额外一次 count 查询;验证
说明
NOT IN类查询,这是在不改数据模型前提下的稳妥改进。getDailyWords,但改动区域不同(本 PR 改取词段,PR #3 改日期/配置段),可自动合并。learnedBy字段 +Query.notContains)需评估 Appwrite v11 API 支持度,暂不纳入。Refs #4