“可见即加载”的路由包策略指当路由对应视图区域首次进入用户可视范围时才加载渲染,需结合intersection observer监听路由容器而非url变化,支持锚点跳转、滚动定位等场景,并通过动态导入与状态标记避免重复加载。

“可见即加载”的路由包策略,不是指页面滚动时加载路由组件,而是把“可见性”概念迁移到路由层面——即当某个路由对应的视图区域首次进入用户可视范围(比如通过锚点跳转、滚动定位、或动态插入的子路由容器)时,才触发该路由模块的加载与渲染。这需要结合 Intersection Observer 与前端路由机制协同实现,核心在于将路由出口(如
把路由容器设为观察目标
不直接监听 URL 变化,而是监听承载某段路由内容的 DOM 容器是否进入视口。适用于以下场景:
- 长页面中多个功能区块按需加载(如“关于我们”“服务列表”“客户案例”等独立路由级区块)
- 嵌套路由中,子视图以滚动锚点形式呈现,仅当用户滚动到该区域才加载对应逻辑
- 微前端或插件式路由,主应用不预加载所有子模块,而是按需感知并激活
做法是:为每个路由区块容器添加唯一标识(如 data-route="about"),再用 Intersection Observer 监听这些容器。
配合动态导入与状态标记
当容器进入视口后,执行动态 import 并挂载组件,同时记录已加载状态避免重复触发:
- 使用
import('./views/About.vue')或React.lazy(() => import('./pages/About'))获取模块 - 加载成功后,将该路由路径或容器 ID 存入 Map 或 Set(如
loadedRoutes.add('about')) - 在 observer 回调中先检查是否已加载,未加载再执行导入逻辑
这样既保证“首次可见才加载”,又防止快速滚动反复触发。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
处理滚动定位与路由同步
单纯监听进入视口还不够,需确保用户通过 URL 锚点(如 #about)跳转时也能触发加载:
- 监听
hashchange或popstate,解析当前 hash 对应的容器 ID - 若该容器尚未加载,手动调用
observer.observe(container)强制触发一次检测 - 或直接用
container.getBoundingClientRect().top 快速判断是否在视口内
这能覆盖用户点击导航链接、浏览器前进/后退、以及直接输入带 hash 的 URL 等多种入口。
Vue/React 中的轻量封装建议
可封装成指令或 Hook,降低使用成本:
- Vue:写一个
v-route-lazy指令,绑定在容器上,自动注册 observer 并管理加载逻辑 - React:提供
useRouteOnView({ route: 'about', component: About })Hook,在组件挂载时启动观察 - 统一 fallback 行为:加载中显示骨架屏,失败时展示重试按钮
注意避免对同一容器多次创建 observer 实例,推荐复用单个实例并传入不同回调,或用 WeakMap 缓存容器与加载状态的映射。
这种策略不是替代 router.lazy,而是补充——它把加载时机从“访问路径”扩展到“视觉可达”,更适合内容驱动型长页,兼顾性能与体验。










