搜索、筛选、排序与分页
StarHub 的搜索和排序基于本地 IndexedDB 已加载的仓库快照,不会为每次输入调用 GitHub API。
处理顺序
text
完整仓库快照
→ 特殊筛选(全部 / 未分类 / 重点)
→ 分类筛选
→ 语言筛选
→ 搜索文本
→ 完整结果排序
→ 分页切片因此,页面上的排序针对全部筛选结果,而不是只针对当前页。
文本搜索
顶部搜索框匹配:
- 仓库短名称;
owner/repository完整名称;- 仓库描述;
- 主语言。
当前搜索为不区分大小写的包含匹配,不支持正则、布尔表达式或 GitHub Search qualifiers。
示例:
| 输入 | 可能匹配 |
|---|---|
django | 名称或描述包含 Django 的仓库 |
typescript | 主语言或描述含 TypeScript |
map | 名称/描述中包含 map 的仓库 |
owner/repo | 指定完整仓库名称 |
左侧筛选
全部仓库
清除未分类与重点限制,保留当前搜索、语言或分类条件的行为以界面当前状态为准。
重点项目
只显示存在于 repositoryHighlights 的仓库。重点标记独立于分类。
未分类
只显示没有任何 repoTags 关系的仓库。普通分类和正式分类都会使仓库离开此列表。
分类
单击某个分类,只显示属于该分类的仓库。当前界面是单分类筛选,不是 AND/OR 多分类查询。
语言
按 GitHub 返回的主语言精确筛选。语言列表及计数来自当前本地仓库快照。
排序
支持以下字段:
- 重点项目;
- 更新时间;
- Star 数;
- 创建时间;
- 项目名称。
每个字段都支持升序和降序。数值或时间相同的仓库保持稳定顺序,避免翻页时无原因跳动。
重点排序规则:先比较是否重点,再比较标记时间,最后使用仓库更新时间作为稳定回退。
分页
可选每页数量:50 / 100 / 200 / 500 / 1000。
注意:
- 改变搜索、筛选、排序或页大小后,会自动校正当前页;
- 选择模式只作用于当前可见页;
- “全选”不会跨越未显示页面;
- 1000 条/页会显著增加 DOM 节点,较弱设备应使用 100 或 200 条。
大数据量建议
对于 10,000–20,000 个仓库:
- 先按分类或语言缩小范围;
- 使用 100–200 条分页进行批量整理;
- 只在需要大范围快速浏览时使用 500/1000;
- README 详情按需打开,避免同时生成大量渲染任务;
- AI 分类使用分段任务,不把全部审核草稿一次性加载到表格。
截图待补:组合筛选与排序 展示“重点项目 + Python + 名称搜索 + Star 数降序”的组合结果,并标注总结果数与当前页。
当前限制
- 没有高级查询语法;
- 没有多个分类的 AND/OR 组合筛选;
- 没有保存筛选视图;
- 仓库列表仍以分页为主,完整虚拟滚动和万级基准属于后续 D3。