webpack prefetch preload 插件

413 阅读3分钟

prefetchpreload 是 Webpack 中用于优化资源加载的两种方式,它们有着不同的作用和使用场景:

1. Prefetch(预加载)

  • 作用prefetch 用于在浏览器空闲时提前加载某些资源,以提高后续页面导航时的加载速度。它适用于当前页面未来可能会用到的资源,但并不是当前页面必需的资源。
  • 使用场景:适合于那些可能会在未来某个页面中用到的资源,例如某个路由下的组件、异步加载的模块等。这些资源不是当前页面必需加载的,但可能在用户下一步操作中需要。

2. Preload(预加载)

  • 作用preload 用于告知浏览器某些资源是当前页面加载所必需的重要资源,需要在页面加载时优先加载和预取。它适用于当前页面所需的关键资源,如字体、重要的 JavaScript 文件等。
  • 使用场景:适合那些对当前页面加载十分重要的资源,能够提高当前页面的加载性能。这些资源对于当前页面的加载和渲染非常重要,不仅是为了提高性能,还可能是为了避免出现加载完成后再请求这些关键资源。

差异与为何同时使用

  • 差异prefetch 用于预加载未来可能需要的资源,而 preload 则是为了提前加载当前页面必需的关键资源。
  • 为何同时使用:使用两者的目的在于优化页面加载性能。预加载能够提高下一页面的加载速度,而预取能够在未来某些情况下提升用户体验。同时使用两者可以根据不同的资源需求,提高整体页面加载性能。

总的来说,preloadprefetch 都是 Webpack 提供的优化手段,用于在不同情况下提高页面加载性能。合理使用两者可以根据不同资源的需求,优化整体页面加载效率。需要根据实际情况来决定在哪里使用哪种方式,以达到最佳的性能优化效果。

在vue 中的配置

1.去掉webpack插件 默认使用了此两个插件 以下是将项目中的全部的预先加载去掉(所有的页面都会生效,不推荐),如何的关闭如下:

chainWebpack: (config) => {
    // // 移除 preload 插件
    config.plugins.delete("preload");
    // 移除 prefetch 插件
    config.plugins.delete("prefetch");
},

2.单独页面的配置Prefetch

const PageA = () => import(/* webpackPrefetch: false */ '@/views/PageA');
const PageB = () => import('@/views/PageB');
export default new Router({ 
    routes: [ 
        { path: '/pageA', name: 'PageA', component: PageA, }, 
        { path: '/pageB', name: 'PageB', component: PageB, }, 
    ], 
});

在这个例子中,PageA 组件的注释中设置了 webpackPrefetch: false,这意味着在访问其他页面时不会预加载 PageA 相关的资源。而对于 PageB 没有设置该注释,则默认使用了预加载机制。

通过这种方式,你可以针对不同的页面组件,控制是否开启预加载或预取。这样可以更精细地控制资源的加载

在打包后的index.html中的表现为以link的形式加载相应的js资源文件

image.png