refactor(download-count): 下载量改为读取 app.json/applist.json 的 DownloadTimes

下载量不再逐个应用请求 download-times.txt(数千个应用 = 数千次额外请求),
改为直接读取服务器注入到目录/详情 JSON 的 DownloadTimes 字段。

- AppJson 新增 DownloadTimes,normalizeAppJson 映射为 app.downloadCount
- useRanking 移除逐应用请求、并发批处理与 localStorage 缓存,
  直接按已加载 apps 的 downloadCount 排序发布(零额外请求)
- 详情页优先用目录数据的 downloadCount;缺失时(如已安装页兜底 App)
  回退读取 app.json 的 DownloadTimes,并加请求序号防止旧响应覆盖
- modules/ranking 新增 parseDownloadTimes,统一处理数字/字符串/非法值
- 新增回归测试 ranking-download-count.test.ts
- 更新《下载量统计接口规范》与 ranking 计划文档

验证:vue-tsc 0 error;新增 6 项测试通过;全套单测失败项与改动前
完全一致(35 项均为既有失败,无新增);eslint 改动文件无新增问题。

Signed-off-by: shenmo <jifengshenmo@outlook.com>
This commit is contained in:
2026-11-11 20:03:34 +08:00
parent 56a7e11622
commit e22f71d255
9 changed files with 219 additions and 122 deletions
+1 -1
View File
@@ -23,7 +23,7 @@
| 字段 | 来源 | 结论 |
|------|------|------|
| `app.downloadCount` | 现有 `apmRanking` / `sparkRanking`(`App.vue` 1164–1250,异步逐应用拉 `download-times.txt`) | ✅ 直接复用,无需新增请求 |
| `app.downloadCount` | 现有 `apmRanking` / `sparkRanking`(由 `applist.json` 的 `DownloadTimes` 直接映射,无额外请求) | ✅ 直接复用,无需新增请求 |
| `app.update` | `App.vue:886` 由 `appJson.Update` 映射,格式 `"2026-01-26 17:34:15"`,同格式可直接 `localeCompare` 倒序 | ✅ 列表已含,可直接排序 |
| `app.contributor` | `App.vue:884` 由 `appJson.Contributor` 映射 | ✅ 列表已含,无需详情请求 |