混合路由发现策略
我们如何解决沙箱环境下的 URL 悖论。
PRID: 1002
VERIFIED
1 min read
🏛️ 混合内容发现策略
核心理念: 在不确定的运行环境中,通过确定的“注册字典”来定位内容。
1. 背景:时空错乱 (The Time-Travel Bug)
在单页应用 (SPA) 中,点击链接的瞬间,路由器的 Loader 会立即执行,但浏览器的地址栏 (window.location) 更新是滞后的。
如果 Loader 读取 window.location,它读到的是上一页的 URL。这就是为什么你在文档页面点击,却报错说“找不到博客页面”。
2. 解决方案:信任未来 (Trust the Future)
我们必须读取 Loader 上下文中的 location 参数。它代表了即将前往的目标状态。
逻辑流程图
mermaidgraph TD A[Loader 启动] --> B{是否处于沙箱环境?} B -- 否 --> C[直接使用 Router Params 匹配] B -- 是 --> D[启动字典扫描仪] D --> E[读取 Router Context 中的 location (Future State)] E --> F[在注册表中贪婪匹配最长 Slug] F --> G[加载对应 Markdown 数据]
3. 贪婪匹配算法 (Greedy Dictionary Matching Protocol)
为了防止路径歧义(例如 core 和 core/plan),我们采用了贪婪匹配逻辑:
- 获取字典:从生成的 manifest 中提取所有 slug。
- 倒序排列:按 slug 长度降序排列(长的在前)。
- 前缀/包含检测:
typescript
// 使用 router 传递的 location,这是唯一的真理 const targetPath = location.pathname.toLowerCase(); const matched = allSlugs.sort((a,b) => b.length - a.length) .find(slug => targetPath.includes(slug));
4. 生产与开发的平衡
| 维度 | 生产模式 (PROD) | 沙箱补救 (SANDBOX) |
|---|---|---|
| 触发条件 | 标准域名 / 正常参数 | Blob 协议 / 参数解析为 * |
| 数据源 | params | context.location |
| 匹配效率 | 高 (直接 Key 查询) | 中 (字符串遍历) |
| SEO 友好度 | 极高 (符合标准) | 低 (仅供预览) |
| 抗竞态能力 | N/A | 极强 (无视浏览器异步更新) |
此策略是 Instant Ship™ 能够在 AI Studio 中保持“即插即用”体验的核心基石。