问题
随着文档规模增长,编译后的搜索索引可能变得很大。一个单一的索引文件会在下载与解析期间阻塞浏览器的主线程。这会延迟"可交互时间 (Time to Interactive)",并让搜索界面感觉迟钝。
为什么重要
文档搜索的首要目标是"得到答案的时间 (Time to Answer)"。如果用户需要数秒等待索引加载,工具的价值便会丧失。提供快速、准确的搜索结果,是打造专业开发者体验的关键。
方法
docmd 采用了一种由高性能搜索库驱动的优化索引策略。它使用作用域 (Scoping)、按需加载 (Incremental Loading) 与字段优化 (Field Optimisation),确保无论站点规模如何,都能瞬时返回搜索结果。
实现
1. 限定范围的搜索索引
docmd 会自动为每一个 Locale 与 版本 生成独立的搜索索引。用户仅下载与当前语境相关的索引。例如,正在浏览中文版的用户只会下载中文搜索索引,从而显著减小载荷。
2. 智能字段裁剪
Search 插件 允许您精确控制被索引的内容。默认情况下,它会优先索引标题与 Frontmatter 元数据,并剔除常见的"停用词"。您可以通过 Frontmatter 中的 search 属性将特定页面排除在索引之外。
---
title: "内部开发者指南"
search: false # 此页面不会出现在搜索结果中
---
3. 懒加载与预取
为了让初次页面加载保持快速,docmd 在后台懒加载搜索索引。当用户与搜索 UI 交互(例如点击搜索栏或使用 Cmd+K / Ctrl+K 快捷键)时,则会立刻触发加载。
4. 结果排序
结果按加权评分系统排序。出现在页面 title 或 h1 标题中的关键词,比正文中的关键词权重显著更高。这能确保最相关的页面排在最前面。
取舍
将工具型或内部页面排除在搜索索引之外,会让它们更难被发现。请克制地使用 search: false,确保有价值的信息仍然可被找到。懒加载虽能提升初次访问性能,但身处慢速网络的用户在首次触发搜索时可能会经历短暂延迟。