美文网首页
webpack优化之preload和prefetch

webpack优化之preload和prefetch

作者: VivaLaVida_692c | 来源:发表于2020-02-28 22:33 被阅读0次

prefetch

<link rel="prefetch"></link>

这段代码告诉浏览器,这段资源将会在未来某个导航或者功能要用到,但是本资源的下载顺序权重比较低。也就是说prefetch通常用于加速下一次导航,而不是本次的。

被标记为prefetch的资源,将会被浏览器在空闲时间加载。

preload

<link rel="preload"></link>

preload通常用于本页面要用到的关键资源,包括关键js、字体、css文件。preload将会把资源得下载顺序权重提高,使得关键数据提前下载好,优化页面打开速度。

webpack 搭配prefetch优化单页面应用code-splitting

单页面应用由于页面过多,可能会导致代码体积过大,从而使得首页打开速度过慢。所以切分代码,优化首屏打开速度尤为重要。

但是所有的技术手段都不是完美的。当我们切割代码后,首屏的js文件体积减少了好多。但是也有一个突出的问题:

那就是当跳转其他页面的时候,需要下载相应页面的js文件,这就导致体验极其不好,每一次点击访问新页面都要等待js文件下载,然后再去请求接口获取数据。频繁出现loading动画的体验真的不好

所以如果我们在进入首页后,在浏览器的空闲时间提前下好用户可能会点击页面的js文件,这样首屏的js文件大小得到了控制,而且再点击新页面的时候,相关的js文件已经下载好了,就不再会出现loading动画。

动态引入js文件,实现code-splitting,减少首屏打开时间

// 代码分割后的react组件

const Brand=async Component(()=>import(

/*webpackChunkName: 'mp-supports'*/'./views/Brand'

))

// 路由引入

<Route path="/" component={App}>   

     <Route path="/brand" component={Brand}/>

 </Route>

首页组件的生命周期:

// 在接口取的数据后,进行prefetch

componentDidUpdate({topics}){

            if(topics.length===0&&this.props.topics.length>0){

                    // 实行prefetch,注意只有webpack 4版本才支持prefetch功能。

                    import(/* webpackPrefetch: true *//*webpackChunkName: 'topic'*/"../topic")

}}

关键点:

/webpackChunkName: 'chunk-name'/

componentDidUpdate

这里有两个关键点:

webpack的动态import()需要指定包命,如果不在注释中说明包名,那么用了几次import() , webpack就会给同一个文件打包多少次。使得我们prefetch的文件和路由中要用到的文件并不是同一个文件。

2.prefetch会在浏览器空闲时,下载相应文件。这是一个很笼统的定义,在我的使用中,我发现在接口没有返回数据,以及图片等还没有请求成功时,prefetch就会请求数据了。这一点是很不好的,最起码prefetch不能影响首页接口的获取速度。所以我把prefetch的执行事件放在了componentDidUpdate生命周期内。保障了prefetch的执行,不会影响到关键的首页数据获取。

当然prefetch在服务端渲染的页面并不会有影响接口的问题,是一个比较好的技术选择。

相关文章

  • prefetch新能优化及quicklink应用

    prefetch 与 preload webpack优化之preload和prefetch里面介绍了preload...

  • webpack优化之preload和prefetch

    prefetch 这段代码告诉浏览器,这段资源将会在未来某个导航或者功能要用到,但是本资源的下载顺序权重比较低。也...

  • webpack优化之preload和prefetch

    prefetch 这段代码告诉浏览器,这段资源将会在未来某个导航或者功能要用到,但是本资源的下载顺序权重比较低。也...

  • webpack 懒加载篇

    prefetch 和 preload 1,prefetch 是父 chunk 加载完成后,再加载。preload ...

  • webpack基础使用(五)

    十六、加载构建优化 懒加载 预获取 & 预读取 与 prefetch 指令相比,preload 指令有许多不同之...

  • webpack中的preload和prefetch

    官方解释: prefetch(预获取):将来某些导航下可能需要的资源preload(预加载):当前导航下可能需要资...

  • preload和prefetch

    参考资料: MDN preload preload 有什么好处 Preload, Prefetch And Pri...

  • web性能优化

    Preload,Prefetch的使用

  • 使用 Preload/Prefetch 优化页面

    preload 提前加载 preload 顾名思义就是一种预加载的方式,它通过声明向浏览器声明一个需要提前加载的资...

  • Prefetch,Preload

    默认设置是async 1 .一般我们都是将splitChunks.chunks字段打包成all,可以同时对同步和异...

网友评论

      本文标题:webpack优化之preload和prefetch

      本文链接:https://www.haomeiwen.com/subject/aukdhhtx.html