移动体验 / 方法解读

移动端 JS 模块预加载如何避免重复请求?

检查 link 标签的 as 属性是否设置,确认浏览器是否正确识别资源类型以避免重复下载。

手机屏幕显示的链接标签 ulink 示意图
主题资料配图,非新闻现场照片 · 配图:ulink

检查 as 属性是否设置

link rel=modulepreload 提示浏览器提前下载 JavaScript 模块。浏览器需要知道资源类型才能正确处理,as 属性用于告诉浏览器资源的类型。如果未设置 as 属性,浏览器可能无法正确识别资源,导致下载行为异常。例如,对于脚本模块,浏览器默认可能将其视为普通脚本处理,从而影响预加载效果。检查代码中是否为每个 modulepreload 链接添加了 as 属性,确保浏览器能识别资源类型。

浏览器支持 modulepreload 是为了优化当前页面的 JavaScript 模块加载。as 属性是关键,它帮助浏览器区分不同类型的资源。如果未设置,浏览器可能无法利用预加载机制的优势,甚至可能触发额外的请求。确保在 head 部分正确使用 as 属性,例如 as=script,以避免重复下载或加载错误。

验证浏览器是否正确识别

在浏览器开发者工具的 Network 面板中,查看模块预加载请求的状态。如果请求状态显示为 200 或 304,且没有重复的请求,说明浏览器正确识别了资源类型。如果看到多个相同的请求或请求状态异常,可能是 as 属性未正确设置。检查请求头中是否包含正确的资源类型信息,确认浏览器是否按照预期处理了预加载请求。

浏览器识别资源类型后,会将其下载并解析到内存模块映射中。如果识别错误,浏览器可能无法将资源正确加载到模块映射中,导致页面运行时错误。通过开发者工具验证请求是否成功,并检查是否有重复请求,可以确认浏览器是否正确识别了资源类型。

确认凭证模式避免双重获取

modulepreload 是预加载的专用版本,浏览器知道资源是 JavaScript 模块,因此不需要 as 属性。浏览器可以使用正确的凭证模式来避免双重获取。如果凭证模式设置错误,浏览器可能会在当前页面和预加载请求中重复获取资源。检查是否设置了正确的凭证模式,确保浏览器不会重复获取资源。

浏览器在处理模块预加载时,会自动使用正确的凭证模式。如果凭证模式不正确,可能会导致双重获取。例如,对于跨域资源,浏览器可能需要发送凭证信息。确保浏览器正确处理凭证模式,避免重复获取资源。通过检查请求头和响应头,确认浏览器是否正确使用了凭证模式。

检查依赖项自动加载情况

浏览器可以自动加载模块的依赖项。检查是否所有依赖项都正确加载,且没有重复请求。如果依赖项未正确加载,可能是预加载机制未生效。检查模块的依赖关系,确保所有依赖项都被正确预加载。通过开发者工具查看依赖项的加载情况,确认浏览器是否自动加载了所有依赖项。

浏览器在预加载模块时,会自动加载其依赖项。如果依赖项未正确加载,可能会导致页面运行时错误。检查依赖项的加载情况,确保所有依赖项都被正确预加载。通过开发者工具查看请求列表,确认浏览器是否自动加载了所有依赖项,且没有重复请求。

资料与延伸阅读

你可以通过以下原始资料核对文中概念,并继续深入阅读。

  1. Speculative loading - Performance | MDN ↗
  2. 配图:ulink ↗
← 更多移动体验文章返回顶部 ↑