本文档解释了 React Router 的“战争迷雾”路由发现机制和延迟加载功能。这些功能通过按需渐进式加载路由及其关联代码,而不是一次性加载,来优化应用程序性能。有关数据加载策略的更多信息,请参阅 数据 API,有关服务器端渲染的详细信息,请参阅 服务器端渲染。
战争迷雾(也称为“延迟路由发现”)是一种源自游戏的概念,即未探索的区域在访问前保持隐藏状态。在 React Router 中,这个概念适用于那些最初未加载,但在导航过程中动态发现的路由。
来源
/__manifest 端点从服务器请求路由信息此过程由在路由初始化期间配置的 patchRoutesOnNavigation 函数处理。
来源
React Router 通过链接控制路由的发现时机
发现行为选项有
来源
延迟加载通过允许按需加载路由组件和数据处理程序来补充战争迷雾。这实现了路由级别的代码分割。
React Router 支持两种延迟加载路由模块的语法方法
基于对象的方法提供了对代码分割的更细粒度控制,对性能敏感的应用程序特别有用。
来源
v7.5.0 中引入的对象 API 提供了多项优势
HydrateFallback 等属性来源
当战争迷雾激活时,React Router 会向 /__manifest 端点发起请求以发现路由
GET /__manifest?p=/parent/child&version=abc123
服务器会响应请求路径以及可能包含索引路由的任何父路径的路由定义。
来源
React Router 包含检测和处理“Manifest 偏差”的机制,即客户端和服务器路由 Manifest 不一致的情况(通常在新部署后)
这有助于防止用户在部署后使用过时的路由定义进行导航时出现问题。
来源
React Router 包含一项优化,可自动发现视口内的路由
MutationObserver 监视带有 data-discover 属性的新链接这种渐进式发现方法通过在路由即将需要时加载它们,确保了最佳性能。
来源
战争迷雾旨在与服务器端渲染协同工作
当 ssr: false(SPA 模式)时,战争迷雾仍然有效,但工作方式不同
来源
战争迷雾可与预渲染结合使用,以优化静态站点生成
.data 文件加载来源
战争迷雾与 React Router 的 Single Fetch 数据加载策略集成
此集成确保了动态发现路由的高效数据加载。
来源
来源
“战争迷雾”和懒加载最适用于
对于路由很少的小型应用程序,“战争迷雾”的开销可能不值得。
来源