如何使用webpack优化首屏渲染时间

其实说到性能优化,他的范围太广了,今天我们就只聊一聊通过webpack配置减少http请求数量这个点吧。

简单说下工作中遇到的问题吧,我们做的一个项目中首页用了十多张图片,每张图片都是一个静态资源,所以都会有http请求,为了减少请求,我们可以通过base64编码的方法来展示图片。webpack中有一个包叫做url-loader,他可以将html以及css中的图片打包成base64,但是js中如果有图片url并不能编译成功(后面我会说明),现附上两张图看下普通图片以及base64编码后的图片有啥不同吧。

简单点说,base64就是一串加密的字符串。而且base64编码过的图片是没有http请求的(注意看此图,为什么有的图使用的base64有的却没有,这是有原因的,这个我们稍后解释)。

好吧,现在先回到我们的主角——url-loader,简单看下他的配置参数吧。

{
                test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
                loader: ‘url-loader‘,
                include: [resolve(‘static‘),resolve(‘src‘)],
                options: {
                    limit: 100000,
                    name: utils.assetsPath(‘img/[name].[hash:7].[ext]‘)
                }
}

我用的是vue-cli脚手架工具,所以这个实在webpack.base.config,js中配置的,test就是正则匹配图片格式,loader是使用url-loader,options是配置选项,比如我们一般会把小于8kb的图片才做base64转换,这个东西通过limit来控制(当然我们是小于100kb),name就是自定义image的路径以及name,include就是你想让哪个文件夹里面的图片进行url-loader转换,建议写上include,如果不写就会全局搜索,效率低下,而且文件夹不写全也会报错。当然还有一种格式是可以直接写到loader中的,就是以query的形式去拼装options。

{
    test: /\.(gif|jpg)$/,
    loader: ‘url-loader?limit=30000‘,
    options: {
        name: ‘[name].[ext]?[hash]‘
    }
}

在这里具体看下咱们配置的name属性吧,他是配合config文件中的那一堆assetsPath来用的,

index: path.resolve(__dirname, ‘../dist/index.html‘),
assetsRoot: path.resolve(__dirname, ‘../dist‘),
assetsSubDirectory: ‘static‘,
assetsPublicPath: ‘/‘

index必须是本地文件系统上的绝对路径。

assetsRoot是所有静态资源的根路径(必须是绝对路径)
assetsSubDirectory是被webpack编译处理过的文件,比如我们要使用url-loader处理image
assetsPublicPath这个是http服务器运行的根路径(比如我们线上是www.baidu.com/indexbeta这个作为根路径,就需要将它改为‘/indexbeta/‘)。

最终线上就会呈现这种path

现在我们知道打包后的image-url是根据这些配置参数以及url-loader的name来生成的。然后问题又来了,既然有这个好东西,是不是可以让所有的图片都展示base64,这肯定不行,因为上面那张编码过的png只有不到5kb,图片太大的话base64字符串会更长,所以还不如用http请求,这也就是为什么默认limit是10000了,就是让8kb之内的图片才编码。

但我们的项目中有的图片列表是用v-for遍历出来的,也就是url放到了js中(vue文件的data里),这样就不能被base64编码了,url-loader只会去编译html以及css中的image。所以可以使用import图片的方式通过一个变量去接受,然后将这些变量放到v-for中去渲染。

当我们使用base64转码后,首页的渲染时间缩短了2秒,是不是很给力呢。

时间: 2024-08-29 15:31:58

如何使用webpack优化首屏渲染时间的相关文章

腾讯优测优分享 | 探索react native首屏渲染最佳实践

腾讯优测是专业的移动云测试平台,旗下的优分享不定时提供大量移动研发及测试相关的干货~此文主要与以下内容相关,希望对大家有帮助. react native给了我们使用javascript开发原生app的能力,在使用react native完成兴趣部落安卓端发现tab改造后,我们开始对由react native实现的界面进行持续优化.目标只有一个,在享受react native带来的新特性的同时,在体验上无限逼近原生实现.作为一名前端开发,本文会从前端角度,探索react native首屏渲染最佳实

探索react native首屏渲染最佳实践

1.前言 react native给了我们使用javascript开发原生app的能力,在使用react native完成兴趣部落安卓端发现tab改造后,我们开始对由react native实现的界面进行持续优化.目标只有一个,在享受react native带来的新特性的同时,在体验上无限逼近原生实现.作为一名前端开发,本文会从前端角度,探索react native首屏渲染最佳实践. 2.首屏耗时计算方法 2.1我们关注的耗时 优化首屏渲染耗时,需要先定义首屏耗时的衡量方法.将react nat

前端优化-如何计算白屏和首屏时间

白屏时间 白屏时间指的是浏览器开始显示内容的时间.因此我们只需要知道是浏览器开始显示内容的时间点,即页面白屏结束时间点即可获取到页面的白屏时间. 计算白屏时间 因此,我们通常认为浏览器开始渲染 <body> 标签或者解析完 <head> 标签的时刻就是页面白屏结束的时间点. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

首屏,白屏时间如何计算??

做移动web页面,受移动网络网速和终端性能影响,我们经常要关注首屏内容展示时间(以下简称首屏时间)这个指标,它衡量着我们的页面是否能在用户耐心消磨完之前展示出来,很大程度影响着用户的使用满意度. 怎么获取首屏时间呢? 我们经常要先问自己:页面是怎么加载数据? A:加载完静态资源后通过ajax请求去后台获取数据,数据回来后渲染内容 在每个点打上一个时间戳,首屏时间 = 点8 – 点1: B:使用后台直出,返回的html已经带上内容了 此时首屏时间 = 点4 – 点1. 注:1. 打了这么多个点,是

研究首屏时间?

做移动web页面,受移动网络网速和终端性能影响,我们经常要关注首屏内容展示时间(以下简称首屏时间)这个指标,它衡量着我们的页面是否能在用户耐心消磨完之前展示出来,很大程度影响着用户的使用满意度. 怎么获取首屏时间呢? 我们经常要先问自己:页面是怎么加载数据? A:加载完静态资源后通过ajax请求去后台获取数据,数据回来后渲染内容 在每个点打上一个时间戳,首屏时间 = 点8 – 点1: B:使用后台直出,返回的html已经带上内容了 此时首屏时间 = 点4 – 点1. 注:1. 打了这么多个点,是

研究首屏时间?你先要知道这几点细节

做移动web页面,受移动网络网速和终端性能影响,我们经常要关注首屏内容展示时间(以下简称首屏时间)这个指标,它衡量着我们的页面是否能在用户耐心消磨完之前展示出来,很大程度影响着用户的使用满意度. 怎么获取首屏时间呢? 我们经常要先问自己:页面是怎么加载数据? A:加载完静态资源后通过ajax请求去后台获取数据,数据回来后渲染内容 在每个点打上一个时间戳,首屏时间 = 点8 – 点1: B:使用后台直出,返回的html已经带上内容了 此时首屏时间 = 点4 – 点1. 注:1. 打了这么多个点,是

关于首屏时间采集自动化的解决方案

关于首屏 首屏时间是指从转向该页面到屏幕中该页面所有内容都可见时的时间.已经有太多的关于首屏时间的计算,在本文中并不重复阐述这些已经被提出或者实现的方案,而旨在探索与讨论更多的首屏自动化采集方案,扩大思考范围,你我思想之间互相碰撞往往可以激起更多的稀奇古怪的解决方案,这也正是我写这篇文章的目的. 通过浏览器调试工具,我们可以清晰的看出页面资源加载时序图: 先是html页面加载,token进行词法.语法解析后开始加载静态资源并执行相关脚本,开始构建DOM树.render树和CSSOM数,最后加载图

技术干货:实时视频直播首屏耗时400ms内的优化实践

本文由"逆流的鱼yuiop"原创分享于"何俊林"公众号,感谢作者的无私分享. 1.引言 直播行业的竞争越来越激烈,进过2018年这波洗牌后,已经度过了蛮荒暴力期,剩下的都是在不断追求体验.最近正好在做直播首开优化工作,实践中通过多种方案并行,已经能把首开降到500ms以下,借此机会分享出来,希望能对大家有所启发. 本文内容的技术前提: 1)基于FFmpeg的ijkplayer,最新版本0.88版本: 2)拉流协议基于http-flv. http-flv更稳定些,国内

时间都去哪了-移动Web首屏优化实践

时间都去哪了-移动Web首屏优化实践 首屏时间 可用性的前提,后面用户是否使用你app很重要的因素之一: 我们PC上访问其实现在的带宽已经很好了,百兆光宽带,但是在移动端就不一样了,很多用户还是使用的流量,GPRS.所以,对于首屏时间的加载,压力还是蛮大的: 我们手机在出发一个操作之后,发生了什么? 下面是在返回数据前发生的动作,但是作为前端,我们好像动不了这些东西,不可能叫运营商去帮你定制一套系统: 这个才是我们真正要去做的东西-渲染(webkit) 给你两个优化的方面,优化网路与优化渲染(高