关系经济人类预测化学自然
中准网
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

Vite性能篇掌握这些优化策略,一起纵享丝滑!

5月5日 呛人心投稿
  很多兄弟都在使用Vite了,但如果你是前端leader或者是团队核心的话,不得不可考虑的一个问题就是性能优化。Vite在开发环境性能已经非常不错了,今天我们主要聊聊生产环境的优化,其实方式和Webpack大同小异,只不过Vite构建时使用的是Rollup而已。
  学习Vite最好是抛开脚手架工具,单独使用它。方法我在入门篇已经讲过,这里就不再赘述了。那么还等什么,开整!分包策略
  默认情况下,浏览器重复请求相同名称的静态资源时,会直接使用缓存的资源。利用这个机制我们可以将不会经常更新的代码单独打包成一个JS文件,这样就可以减少HTTP请求,同时降低服务器压力。以lodash为例:npmilodash
  安装lodash,然后在main。js中写入以下代码:srcmain。jsimport{cloneDeep}fromlodashconstobjcloneDeep({})
  打包结果:
  项目代码和依赖模块打包成了一个JS文件。接着我们来配置分包,修改底层的Rollup配置:vite。config。jsimport{defineConfig}fromviteexportdefaultdefineConfig({build:{rollupOptions:{output:{manualChunks:id{将nodemodules中的代码单独打包成一个JS文件if(id。includes(nodemodules)){returnvendor}}}}}})
  打包结果如下:
  可以看到依赖模块已经单独生成一个JS文件了。这样我们即使修改了main。js中的代码重新打包,依赖文件vendor。528a7280。js也不会发生变化的,对于这个文件,浏览器也不会再次发起请求。如果依赖模块很多的话,性能是不是有很大的提升呢?treeshaking
  treeshaking也被称为摇树优化。简单来讲,就是在保证代码运行结果不变的前提下,去除无用的代码。Vue3中,许多ApI的引入都支持treeshaking优化。也就是说只打包你用到的API,忽略那些没有用到的。
  Vue3会默认使用Rollup进行treeshaking,不需要额外进行配置。但有一个条件,必须是ES6module模块才行。还是上面那个例子:srcmain。jsimport{cloneDeep}fromlodashconstobjcloneDeep({})
  由于lodash是使用CommonJS规范的模块,所以无法进行treeshaking,Vue会把整个lodash依赖打包进来。整个依赖文件的大小是78。64KB。
  然后我们使用ESM版的loadsh对比一下:npmilodashessrcmain。jsimport{cloneDeep}fromlodashesconstobjcloneDeep({})
  打包结果如下:
  可以看到依赖体积瞬间变成了13。23KB,是不是一下小了很多。所以我们在选择第三方库时,要尽可能使用ESM版本,可以提升不少性能!gzip压缩
  gzip是一种使用非常普遍的压缩格式。使用gzip压缩可以大幅减小代码体积,提升网络性能。开启gzip也比较简单,使用一个插件就可以了:npmiviteplugincompressionvite。config。jsimport{defineConfig}fromviteimportviteCompressionfromviteplugincompressionexportdefaultdefineConfig({plugins:〔viteCompression()〕})
  打包结果如下:
  可以看到经过gzip压缩后,vendor。6fd516d3。js文件从13。23KB降到了4。62KB,文件体积缩小了近23,是不是很nice。接下来就是后端同学的工作了:当请求静态资源时,如果发现有对应的gzip的文件,直接把gzip内容返给前端,并且设置一个响应头contentencoding:gzip。
  完整逻辑是,我们需要把浏览器支持的压缩类型传给服务端,在请求头中设置acceptencoding:gzip,deflate,br,只不过这一步浏览器通常帮我们都做了。然后服务端根据浏览器支持的类型,设置响应头contentencoding:gzip,告诉浏览器以何种方式进行解压。
  注意:因为浏览器解压也需要时间,所以代码体积不是很大的话不建议使用gzip压缩。cdn加速
  内容分发网络(ContentDeliveryNetwork,简称CDN)就是让用户从最近的服务器请求资源,提升网络请求的响应速度。通常我们请求依赖模块使用CDN,而请求项目代码依然使用自己的服务器。还是以lodash为例:srcmain。jsimportfromlodashconstobj。cloneDeep({})
  使用CDN也比较简单,一个插件就可以搞定:npmiviteplugincdnimportDvite。config。jsimport{defineConfig}fromviteimportviteCDNPluginfromviteplugincdnimportexportdefaultdefineConfig({plugins:〔viteCDNPlugin({需要CDN加速的模块modules:〔{name:lodash,var:,path:https:cdn。jsdelivr。netnpmlodash4。17。21lodash。min。js}〕})〕})
  构建成功后,Vite会自动帮我们将cdn资源通过script标签插入到html中:
  这样请求lodash资源就会产生加速buff,而且项目体积也会大大减小!图片压缩
  根据项目对清晰度的要求,我们可以使用vitepluginimagemin插件,对图片进行适当压缩:npmivitepluginimageminDvite。config。jsimport{defineConfig}fromviteimportviteImageminfromvitepluginimageminexportdefaultdefineConfig({plugins:〔viteImagemin({gifsicle:{optimizationLevel:7,interlaced:false},optipng:{optimizationLevel:7},mozjpeg:{quality:20},pngquant:{quality:〔0。8,0。9〕,speed:4},svgo:{plugins:〔{name:removeViewBox},{name:removeEmptyAttrs,active:false}〕}})〕})
  不同格式的文件配置也不一样,具体可以参考github:vitepluginimagemin。构建分析
  分析依赖模块的大小占比,可以让我们更有针对性的进行体积优化。我们通常使用rolluppluginvisualizer插件进行构建分析,方法也比较简单:npminstallrolluppluginvisualizerDvite。config。jsimport{defineConfig}fromviteimport{visualizer}exportdefaultdefineConfig({plugins:〔将visualizer插件放到最后visualizer()〕})
  npmrunbuild,构建成功之后会在根目录下生成一个stats。html,打开页面即可以看到分析结果。我们还可以通过左上角的排除、包含输入框对依赖模块进行筛选。同时鼠标移入各模块,可以看到详细的分析数据:
  小结
  ok,今天的分享就是这些。如果你的项目已经在用Vite,不妨试验一下以上方案,看看项目会不会变得更加丝滑。又到年底了,今年能挺过来的都不容易。最后祝大家都能拿到满意的年终奖
投诉 评论 转载

Vite性能篇掌握这些优化策略,一起纵享丝滑!很多兄弟都在使用Vite了,但如果你是前端leader或者是团队核心的话,不得不可考虑的一个问题就是性能优化。Vite在开发环境性能已经非常不错了,今天我们主要聊聊生产环境的优……青未了郭晓帆专栏人在旅途文郭晓帆编辑燕子图片网络人生就是一场旅行,穿越四季,风景尽收眼底,经过冬的洗礼,万事万物变得生动明朗。时间如水般,在指尖一点一滴滑落,在匆忙的日子里,来来去去,一年一年,……GalaxyA34A545G手机在欧洲市场售价再曝光起售价3IT之家3月9日消息,德国科技媒体WinFuture。de资深编辑RolandQuandt在最新推文中,再次分享了GalaxyA345G和GalaxyA545G两款手机在欧洲市……2023她力量丨商汤绝影智能汽车事业群商务副总裁杨琳人和人的每经记者:可杨每经编辑:陈俊杰力量曾与传统意义中的柔美相冲撞,但社会意识的进步正消弭刻板印象,当越来越多人谈论起女性主义,期望在对话之中若隐若现或有一天,性别不再是桎梏。……不如一边铭记,一边遗忘来往于,停停走走的人世间,有人说:活着,谁又不是一边铭记,一边遗忘!一下、两下、时钟摇摆,随着时间的流逝,不知不觉中已来到了最为寒冷的冬季。窗外,有纷纷飘落的树叶,呼啸而……如果你必须阳,你愿意选择哪个时间?如果可以选择,我愿意九月份的时候,作为密接被拉去方舱医院,因为那时候,每人一个华为平板可以带回家。可惜没有如果,那会儿要是混个密接就好了。〔捂脸〕……合创Z03凭什么霸屏15万级纯电SUV市场据乘联会消息,我国3月新能源乘用车零售销量同比增长137。6,众多新能源车企迎来今年第一季度的高光时刻。其中,新势力新锐品牌合创汽车,在3月收获3016张订单,旗下Z03单车型……全球经济面临危机!形势远比想象的更严峻?形势远比想象的更严峻,最长放假到2023年当前市场形势异常严峻,整个行业进入了一个普遍亏损的周期,形势远比想象的要恶劣。为什么?核心问题其实就是八个字:需求减少,产……21,又赢了!金球巨星爆发,2场造2球,姆巴佩获利好,剑指欧新赛季第二场比赛,巴黎对阵川崎前锋,法甲豪门以21的比分击败对手,拿下2连胜。此役,巴黎占据场面优势,控球率达到62,并且狂轰18脚,梅西和穆因加破门,帮助球队赢得胜利。近2场……河南安阳航空文旅产业让飞翔之城插上腾飞的翅膀‘安阳一座会飞的城市’已经成为这座古都走向全国、融通世界的一张亮丽名片。11月16日,中国民用航空局机场司副司长马志刚线上出席第十四届安阳航空运动文化旅游节开幕式时说。中……动力电池回收行业专题报告动力电池退役潮起,回收赛道风口将至(报告出品方作者:中泰证券,冯胜)1。动力电池退役潮开启,拆解回收或成主流动力电池将在十四五期间迎来退役潮,2230年市场规模CAGR达24我国首批新能源车动力电池……Elgato在中国发布StreamDeck,让内容创作更轻松2023年2月16日,为内容创作者提供硬件和软件的行业先锋Elgato,今日在中国发布了其备受欢迎的StreamDeck直播控台系列新品:StreamDeck。StreamDe……
大基金又减持了!半导体芯片基金还能买吗?2022年8月各价位段路由器选购指南,评论区含保姆级设置教程如果你喜欢他们,你就来看CBA百炼成钢党史上的今天第三百二十四集今年好声音的冠军导师不难猜,我分析是李荣浩,原因靠谱周三赛事解析德岛漩涡阵容错过磨合机会,秋田5战连胜士气高涨纳帅回应愚人节玩笑我现在的确有时间执教女足率先晋级决赛!王艺迪41早田希娜阻日乒大计伊藤美诚压力来了2022年10月14日国六929598号汽油,0号柴油最新零高通骁龙X75X72X355G调制解调器与射频模块发布人生的第一次欧洲行该如何安排最好?真正懂你的冰箱TCL格物冰箱Q10
盆栽桂花不开花怎么办?向税务机关举报企业偷税漏税方式是什么?大地色是冷色还是暖色秋冬一定要有它钱的忠告!(朋友圈已火)热博聚热点网 心理发展对教育的影响手机微信如何退出群聊?为什么在银行柜台工作的人,都是小年轻?年纪大的人都去哪了?仙之传说12魔灵十二都上单369正面回应拉扯,韩服更改ID不玩酒桶,秒选后27坑卡事隔造句用事隔造句大全密歇根大学李侃如罗睿弛中国研究中心:中国梦与中国噩梦克罗地亚vs巴西比分预测2022

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州