资源提示:modulepreload
预加载 ES 模块,加快 JavaScript 启动速度
资源提示:modulepreload 是 CoddyKit 上的免费 HTML Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 HTML Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 HTML Academy 课程共包含 4 节课。
modulepreload 的存在意义
ES 模块构成依赖图:入口模块会导入其他模块,而这些模块又会继续导入更多模块。如果没有辅助机制,只有在上一层完成解析后才能发现树的下一层,从而形成连续的瀑布式加载,严重拖累加载性能。
modulepreload 的作用
<link rel="modulepreload" href="/app.js">会告诉浏览器立即并行获取该模块及其传递导入的模块。等到 <script type="module"> 执行时,整个依赖图都已在缓存中。
与 preload 的比较
preload 也会并行获取文件,但它不了解导入语句——预加载一个模块文件并不会预加载其依赖项。modulepreload 会自动跟踪导入关系,这正是它的价值所在。
<link rel="modulepreload" href="/app.js">
<script type="module" src="/app.js"></script>放置位置
请将它放在 <head> 中,并尽可能靠前。浏览器会立即发起预加载请求,同时继续解析 HTML。等到文档后面遇到匹配的 <script type="module"> 时,文件已经在内存中。
发现模块与遍历依赖图
浏览器会解析预加载的模块,查找导入语句,然后递归地并行获取每个导入 URL。用户仍需为每一层承担一次往返的代价,但每层内部可以并行,从而大幅缩短关键路径。
与打包工具配合使用
现代打包工具(Vite、Rollup、Webpack 5+)会自动为代码拆分块生成 modulepreload 标签。在手工构建的应用中,请在构建时根据导入图生成这些标签,以便模块增删后列表仍保持准确。
CrossOrigin 注意事项
对于跨源模块预加载,请包含 crossorigin="anonymous"。这与 <script type="module"> 的默认获取模式一致,可确保复用预加载副本,而不是在没有 CORS 标头的情况下再次获取。
浏览器支持
Chrome、Edge、Safari 和较新版本的 Firefox 都支持 modulepreload。在较旧版本的 Firefox 中,它会被静默忽略——模块仍可正常工作,只是没有预加载收益。无需填充程序;最坏的情况只是过时浏览器的加载速度略慢。
限制依赖图规模
预加载数百个模块会浪费带宽,因为用户可能永远不会执行这些代码。请只预加载路由级入口代码块,不要预加载深层延迟加载的代码块。很少使用的代码路径应交给 prefetch(或按需导入)。
与其他提示结合使用
对于同一页面头部中的图片和字体,可以自由组合:为第三方 CDN 使用 preconnect,为关键字体使用 preload,为入口模块使用 modulepreload,为下一页面资源使用 prefetch。这些提示彼此不会干扰。
验证
请检查网络面板:使用 modulepreload 时,第二层导入会以并行请求的形式出现,开始时间几乎与入口模块同时。没有它时,这些请求会分阶段出现,每个请求都要等父模块完成解析后才开始。
知识检查
与对同一个模块文件使用常规 preload 相比,modulepreload 额外做了什么?
总结
modulepreload 会在执行前并行获取入口模块及其导入内容,从而消除 ES 模块的瀑布式加载。请将它放在 <head> 的靠前位置,根据构建依赖图生成,为跨源模块设置 crossorigin,并将范围限制在路由入口点,以避免浪费带宽。
常见问题解答
「资源提示:modulepreload」课时是免费的吗?
是的 — 「资源提示:modulepreload」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 HTML Academy 课程的其余内容,请升级到 CoddyKit PRO。 HTML Academy 课程共包含 4 节课。
「资源提示:modulepreload」这节课中我会学到什么?
预加载 ES 模块,加快 JavaScript 启动速度 你通过在浏览器中直接运行的动手代码来练习 HTML Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 HTML Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 HTML Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「资源提示:modulepreload」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 HTML Academy 课中编写并运行代码吗?
能。每节 HTML Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- async 和 defer 属性
- 预加载、预获取与预连接
- 图像延迟加载:loading=lazy
- 资源提示:modulepreload