当前位置: 首页 > web >正文

Speculation Rules API

Speculation Rules API 提供了一种标准化、声明式的方法,让开发者能指导浏览器利用空闲时间或根据用户行为(如悬停),智能地预加载或预渲染下一个页面,从而将传统的“点击-等待-加载”体验升级为“点击-瞬间展现”的极致流畅体验。

为什么需要它?解决了什么问题?

在它出现之前,我们优化下一页加载的方式主要有:

  1. <link rel="preload">:预加载关键资源(如脚本、字体),但仅限于当前页面。

  2. <link rel="prefetch">:低优先级地获取未来可能需要的资源(如下一个页面的 JS 文件),但不执行或渲染它们。

  3. 用 JavaScript 和 Mouseover/Mousedown 事件来模拟预加载,但这很复杂且容易出错。

这些方法不够强大,无法实现真正的预渲染——即在用户点击之前,在后台完全加载、解析甚至渲染整个页面。

Speculation Rules API 的目标就是填补这个空白,让原生、高效的预渲染成为可能。

工作原理与语法

你需要在 HTML 中通过一个 <script type="speculationrules"> 标签来定义规则。规则目前主要支持两种模式:

1. 预获取 (prefetch)

这类似于 rel="prefetch",但更强大。它会提前获取页面所需的资源(HTML、JS、CSS等),并将其放入 HTTP 缓存中。当用户真正导航时,大部分资源已经从磁盘加载,速度极快。

<script type="speculationrules">
{"prefetch": [{"source": "list","urls": ["/product/123", "/about.html"],// 可选:需要时再触发预取的条件"requires": ["anonymous-client-ip-when-cross-origin"] }]
}
</script>
2. 预渲染 (prerender)

这是“大招”。它不仅仅下载资源,还会在后台完整地渲染整个页面,包括执行 JavaScript、发起 API 调用、渲染布局等。当用户点击链接时,浏览器几乎可以立即切换到一个已经准备好的、活生生的页面,实现“瞬时导航”。

<script type="speculationrules">
{"prerender": [{"source": "list","urls": ["/next-article.html"]}]
}
</script>

更常见和强大的用法是基于文档的规则,根据当前页面的链接动态推测:

<script type="speculationrules">
{"prerender": [{"source": "document",// 预渲染与当前页面同源的用户可能点击的链接"where": { "href_matches": "/products/*" // 可以是CSS选择器,如 "a[rel='prerender']"},// 只有在认为有足够理由时(如鼠标悬停)才启动预渲染"eagerness": "moderate" }]
}
</script>
关键配置:eagerness (急切程度)

这个参数控制浏览器何时执行推测操作,对于性能优化至关重要:

  • "immediate":立即执行。适用于你非常确定用户会访问的页面(如“下一步”按钮)。

  • "eager":在空闲时很快执行。

  • "moderate" (默认):在强烈的用户信号(如 mousedown 或 hover 一段时间)后执行。这是平衡资源和收益的最佳选择。

  • "conservative":只在非常强烈的信号(如点击开始但尚未释放的 mousedown 事件)后执行。

好处与优势

  1. 极致的用户体验:实现真正的“瞬时加载”,感觉就像在使用一个单页面应用 (SPA),而无需其复杂性。

  2. 更高的 Core Web Vitals 分数:大幅改善 LCP (最大内容绘制) 和 INP (交互下次延迟) 指标。

  3. 开发者友好:只需几行 JSON 配置,无需复杂的 JavaScript 逻辑。

  4. 资源智能管理:浏览器会自动管理预渲染的页面,如果内存不足或用户从未访问,会优雅地丢弃它们,避免浪费资源。

  5. 更好的隐私保护:与第三方 cookie 无关,规则遵循同源策略和用户设置(如省流模式)。

注意事项与最佳实践

  1. 资源消耗:预渲染,尤其是 prerender,会消耗额外的 CPU、网络和内存。必须谨慎使用 eagerness 并只用于高概率的导航。不要预渲染太多页面!

  2. 状态管理:预渲染的页面可能会发起 API 调用。确保这些调用是幂等的,或者使用虚拟数据,以免在用户真正访问前就改变了服务器状态(例如,不小心创建了订单)。

  3. 浏览器支持:这是一个渐进增强的功能。首先在 Chromium 内核的浏览器(Chrome, Edge, Opera等)中实现和支持。始终要检查支持情况。

  4. 测试工具

    • Chrome DevTools > Application > Speculation Rules 面板可以查看规则状态和预渲染的页面。

    • chrome://predictors 可以查看 Chrome 自身的预测逻辑。

  5. 用例

    • 高概率单步导航:如“下一步”、“继续购物”按钮。

    • 无限滚动列表中的下一页

    • 搜索引擎结果页 (SERP) 的第一个结果

    • 用户悬停停留超过 200ms 的链接。

总结

Speculation Rules API 是将 Web 性能推向新高度的关键技术。 它通过将传统的“点击-加载-等待”模式转变为“预测-准备-瞬时切换”模式,为多页面应用 (MPA) 提供了媲美单页面应用 (SPA) 的导航体验。

http://www.xdnf.cn/news/19146.html

相关文章:

  • 华为HCIP数通学习与认证解析!
  • 从零开始的云计算生活——第五十四天,悬梁刺股,kubernetes模块之组件与网络
  • rapid_table v3.0.0发布了
  • MySQL数据库精研之旅第十四期:索引的 “潜规则”(上)
  • 新手向:Python实现数据可视化图表生成
  • 《R for Data Science (2e)》免费中文翻译 (第6章) --- scripts and projects
  • MySQL-内置函数
  • 【C++详解】C++11(一) 列表初始化、右值引⽤和移动语义
  • 2025五天申请邓白氏编码成功
  • 第八篇 永磁同步电机控制-MTPA、MTPV
  • 计算机网络:数据库(sqlite3)
  • 4.x版本的ant-table+sortablejs实现拖拽排序
  • 快速入门Vue3——语法初识
  • 如何给我们直接创建的类加上索引?和len方法?
  • 数字化生产管理系统 (MES)
  • WINTRUST!_ExplodeMessage的作用是赋值psIndirectData
  • Docker 是什么?
  • python自动化测试工具selenium使用指南
  • 在 Ubuntu 24.04 上安装二进制文件(逐步指南)
  • 模型汇总-数学建模
  • claude code helper for vscode
  • 用户模式与内核模式:操作系统的“权限双轨制”
  • 【C++游记】物种多样——谓之多态
  • 软考-系统架构设计师 决策支持系统(DSS)详细讲解
  • 序列化,应用层自定义协议
  • C#和Lua相互访问
  • 数据结构:冒泡排序 (Bubble Sort)
  • 配送算法17 AFramework for Multi-stage Bonus Allocation in meal delivery Platform
  • 嵌入式研发工程师成长路线图,基础入门 → 中级提升 → 高级进阶 → 专家方向
  • 【笔记ing】大模型算法架构