Local-First 搜索优化
问题
Local-First 搜索引擎完全运行在浏览器中。它们无需服务器往返就能即时返回结果。然而,它们受限于浏览器内存与处理能力。未优化的搜索索引会消耗过多 RAM,导致浏览器标签页卡顿甚至崩溃,尤其在移动设备上更明显。
为什么重要
流畅的搜索体验对生产力至关重要。如果搜索工具引发性能问题或内存膨胀,用户就会放弃它。为 Local-First 搜索优化内容,可确保文档在所有设备与所有网络条件下都保持快速、响应灵敏且稳定。
方法
docmd 的 Search 插件 使用构建时抽取管线来生成一个经过优化的索引。通过裁剪不必要的数据,并聚焦于高价值的语义字段,最终生成的索引既全面又轻量。
实现
1. 构建时抽取
在构建过程中,docmd 会解析 Markdown 文件,抽取相关文本用于建立索引。它会自动剔除:
- HTML 标签和结构性样板代码。
- 缺乏语义价值的 Markdown 语法字符。
- 仅起排版作用、令索引臃肿的元素。
这能确保索引器只接收到干净且有意义的文本,从而显著缩小最终索引体积。
2. 使用 Frontmatter 进行策略性索引
使用 Frontmatter 显式控制页面的索引方式。如果某页面包含重复性数据(例如原始 JSON 日志),对搜索无益,那么仅索引其标题与元数据即可。
---
title: "API 日志参考"
search:
indexBody: false # 仅索引标题与标题层级
---
3. 客户端内存管理
docmd 在浏览器中小心管理搜索索引的生命周期。它采用按需加载策略 —— 仅在用户首次与搜索交互时才初始化搜索引擎。这能保持较小的初次页面加载开销,并节约系统资源。
取舍
从搜索索引中过度裁剪内容(例如排除大型代码块)会导致一些细分场景下的命中缺失。您必须在"轻量索引"与"全面覆盖"之间取得平衡。我们建议优先索引标题和概念性描述,因为它们是最常见的搜索目标。