问题
随着文档增长到数百或数千个页面,编译后的搜索索引可能会变得相当大。一个庞大的索引文件在下载和解析过程中会阻塞浏览器的主要线程,延迟“可交互时间 (Time to Interactive)”,并导致搜索界面感觉迟钝或无响应。
为什么重要
文档搜索的首要目标是“答疑时间 (Time to Answer)”。如果用户触发了搜索弹窗,却必须等待几秒钟让索引加载,那么搜索工具的效用就丧失了。快速、准确的搜索结果对于提供专业的开发者体验以及帮助用户无障碍地找到信息至关重要。
Approach
docmd 利用由高性能搜索库支持的优化索引策略。它采用 分级范围 (Scoping)、增量加载 (Incremental Loading) 和 字段优化 (Field Optimization),确保无论文档网站规模多大,搜索结果都能几乎瞬时交付。
实施
1. 限定范围的搜索索引
docmd 会为每个 语言区域 和 版本 自动生成独立的搜索索引。这确保了用户仅下载与其当前上下文相关的索引。例如,浏览中文版文档的用户仅下载中文搜索索引,从而显著减小了有效载荷大小。
2. 智能字段剥离
搜索插件 允许您精确控制索引哪些内容。默认情况下,它会优先处理标题和 Frontmatter 元数据,同时剥离常见的“停用词”和不必要的代码符号,这些内容会增加索引体积而不增加搜索价值。您还可以使用 Frontmatter 中的 search 属性从索引中排除特定页面。
---
title: "内部开发者指南"
search: false # 此页面将不会出现在搜索结果中
---
3. 延迟加载与预取
为了保持初始页面加载速度,docmd 不会立即加载搜索索引。相反,它会在后台延迟获取,或者在用户与搜索 UI 交互时(例如点击搜索栏或使用 Cmd+K / Ctrl+K 快捷键)立即触发。
4. 结果排序
结果基于加权评分系统进行排序。在页面 title 或 h1 标题中找到的关键词权重显著高于正文中的关键词。这确保了最相关的页面出现在结果列表的顶部。
权衡
从搜索索引中排除工具页面或内部页面会使它们难以被发现。您应谨慎使用 search: false 属性,以确保有价值的信息仍可被找到。虽然延迟加载提高了初始性能,但在连接极慢的情况下,用户在第一次触发搜索时可能会感受到短暂的延迟。