范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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

  很多兄弟都在使用 Vite 了,但如果你是前端 leader 或者是团队核心的话,不得不可考虑的一个问题就是性能优化。Vite 在开发环境性能已经非常不错了,今天我们主要聊聊生产环境的优化,其实方式和 Webpack 大同小异,只不过 Vite 构建时使用的是 Rollup 而已。
  学习 Vite 最好是抛开脚手架工具,单独使用它。方法我在入门篇已经讲过 ,这里就不再赘述了。那么还等什么,开整! 分包策略
  默认情况下,浏览器重复请求相同名称的静态资源时,会直接使用缓存的资源。利用这个机制我们可以将不会经常更新的代码单独打包成一个 JS 文件,这样就可以减少 HTTP 请求,同时降低服务器压力。以  lodash  为例: npm i lodash
  安装  lodash  ,然后在 main.js  中写入以下代码: // src/main.js import { cloneDeep } from "lodash"  const obj = cloneDeep({})
  打包结果:
  项目代码和依赖模块打包成了一个 JS 文件。接着我们来配置分包,修改底层的 Rollup 配置:  // vite.config.js import { defineConfig } from "vite"  export default defineConfig({   build: {     rollupOptions: {       output: {         manualChunks: id => {           // 将 node_modules 中的代码单独打包成一个 JS 文件           if(id.includes("node_modules")) {             return "vendor"           }         }       }     }   } })
  打包结果如下:
  可以看到依赖模块已经单独生成一个 JS 文件了。这样我们即使修改了  main.js  中的代码重新打包,依赖文件 vendor.528a7280.js  也不会发生变化的,对于这个文件,浏览器也不会再次发起请求。如果依赖模块很多的话,性能是不是有很大的提升呢? treeshaking
  treeshaking  也被称为 "摇树优化"。简单来讲,就是在保证代码运行结果不变的前提下,去除无用的代码。Vue3中,许多 ApI  的引入都支持 treeshaking  优化。也就是说只打包你用到的 API ,忽略那些没有用到的。
  Vue3 会默认使用 Rollup 进行  treeshaking  ,不需要额外进行配置。但有一个条件,必须是 ES6 module  模块才行。还是上面那个例子: // src/main.js import { cloneDeep } from "lodash"  const obj = cloneDeep({})
  由于 lodash 是使用  CommonJS  规范的模块,所以无法进行 treeshaking  ,Vue 会把整个 lodash  依赖打包进来。整个依赖文件的大小是 78.64 KB  。
  然后我们使用  ESM  版的 loadsh  对比一下: npm i lodash-es// src/main.js import { cloneDeep } from "lodash-es"  const obj = cloneDeep({})
  打包结果如下:
  可以看到依赖体积瞬间变成了  13.23 KB  ,是不是一下小了很多。所以我们在选择第三方库时,要尽可能使用 ESM  版本,可以提升不少性能! gzip 压缩
  gzip  是一种使用非常普遍的压缩格式。使用 gzip  压缩可以大幅减小代码体积,提升网络性能。开启 gzip  也比较简单,使用一个插件就可以了: npm i vite-plugin-compression// vite.config.js import { defineConfig } from "vite" import viteCompression from "vite-plugin-compression"  export default defineConfig({   plugins: [viteCompression()] })
  打包结果如下:
  可以看到经过  gzip  压缩后,vendor.6fd516d3.js  文件从 13.23 KB  降到了 4.62KB ,文件体积缩小了近 2/3 ,是不是很 nice。接下来就是后端同学的工作了:当请求静态资源时,如果发现有对应的 gzip 的文件,直接把 gzip 内容返给前端,并且设置一个响应头 content-encoding: gzip  。
  完整逻辑是,我们需要把浏览器支持的压缩类型传给服务端,在请求头中设置  accept-encoding: gzip, deflate, br ,只不过这一步浏览器通常帮我们都做了。然后服务端根据浏览器支持的类型,设置响应头 content-encoding: gzip  ,告诉浏览器以何种方式进行解压。
  注意:因为浏览器解压也需要时间,所以代码体积不是很大的话不建议使用  gzip  压缩。 cdn 加速
  内容分发网络(Content Delivery Network,简称 CDN)就是让用户从最近的服务器请求资源,提升网络请求的响应速度。通常我们请求依赖模块使用 CDN ,而请求项目代码依然使用自己的服务器。还是以  lodash  为例: // src/main.js import _ from "lodash"  const obj = _.cloneDeep({})
  使用 CDN 也比较简单,一个插件就可以搞定:  npm i vite-plugin-cdn-import -D// vite.config.js import { defineConfig } from "vite" import viteCDNPlugin from "vite-plugin-cdn-import"  export default defineConfig({   plugins: [     viteCDNPlugin({       // 需要 CDN 加速的模块       modules: [         {           name: "lodash",           var: "_",           path: `https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js`         }       ]     })   ] })
  构建成功后,Vite 会自动帮我们将 cdn 资源通过  script  标签插入到 html  中:
  这样请求  lodash  资源就会产生加速 buff  ,而且项目体积也会大大减小! 图片压缩
  根据项目对清晰度的要求,我们可以使用  vite-plugin-imagemin  插件,对图片进行适当压缩: npm i vite-plugin-imagemin -D// vite.config.js import { defineConfig } from "vite" import viteImagemin from "vite-plugin-imagemin"  export default defineConfig({   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 :vite-plugin-imagemin 。  构建分析
  分析依赖模块的大小占比,可以让我们更有针对性的进行体积优化。我们通常使用  rollup-plugin-visualizer  插件进行构建分析,方法也比较简单: npm install rollup-plugin-visualizer -D// vite.config.js import { defineConfig } from "vite" import { visualizer } from "rollup-plugin-visualizer";  export default defineConfig({   plugins: [     // 将 visualizer 插件放到最后     visualizer()   ] })
  npm run build  ,构建成功之后会在根目录下生成一个 stats.html  ,打开页面即可以看到分析结果。我们还可以通过左上角的 排除 、包含  输入框对依赖模块进行筛选。同时鼠标移入各模块,可以看到详细的分析数据:
  小结
  ok,今天的分享就是这些。如果你的项目已经在用 Vite ,不妨试验一下以上方案,看看项目会不会变得更加丝滑。又到年底了,今年能挺过来的都不容易。最后祝大家都能拿到满意的年终奖~

国乒4胜1负!马龙31淘汰日本主力,晋级16强再战欧洲名将北京时间2022年10月19日,WTT澳门冠军赛继续进行,国乒5人先后登场,取得4胜1负,王艺迪梁靖崑陈梦马龙顺利晋级下一轮,林高远在德比战中输给了梁靖崑,遭遇一轮游。接下来,马龙2名铁打主力累积4张黄牌,战热刺需谨慎,再拿牌要缺战切尔西本赛季曼联只有4名球员在全部9场比赛中首发,其中B费没有缺席任何一分钟的英超比赛,而达洛特也仅仅在联赛中替补下场5分钟而已,他们两人在本赛季曼联出场时间中排名前四,这足以见得他们211比3!11比2!马龙无惧搏杀战术,击败日乒主力,队友心态被打崩11比3!11比2!马龙无惧搏杀战术,击败日乒主力,队友心态被打崩WTT澳门站继续展开争夺,晚间一场男单迎来中日之间的直接对话,马龙迎战宇田幸矢。马龙在之前的世乒赛成功帮助中国队拿10月20日A股猛料人民币汇率重挫600点再创新低!主力提前出逃聚焦A股市场每日重磅消息,为2亿散户点明投资方向!在阅读正文前,你必须知道一点没有几个主力资金会笨到在利好一出炉就将股价直线拉升到涨停,所以请股民朋友们耐心一点,让利好飞一会,也许为什么古代官府劳神费力,也要将犯人发配千里之外,而不是关押?现如今,在许多以封建王朝为背景的影视文学作品当中经常会听到一个罪名,那就是发配充军。然而,当犯人听到这个罪名的时候,不仅没有太大的失落,反而还有些庆幸,那么发配充军究竟是一种什么样唐朝名将薛仁贵三箭定天山,脱帽退万敌,骁勇善战无出其右序言薛仁贵(公元614年683年),河东龙门县修村(今山西河津市修村)人,唐初名将。贞观末年投身军队,随从唐太宗李世民征伐高句丽,薛仁贵凭借在战场上的骁勇表现,受到李世民的赏识提拔民国浙江省主席辞官回家,被强盗打劫,翻开包袱后,土匪跪送30里民国浙江省主席辞官回家,被强盗打劫,翻开包袱后,土匪跪送30里张难先是一位爱国民主人士,历经清末民国中华人民共和国成立后的20年,他反过清廷反过袁世凯反过蒋介石,拥护共产党。20世Mysql扩展表分区由于表分区用完了,程序开始报错解决方法增加表分区ALTERTABLEcustomeventlabelsumADDPARTITION(PARTITIONkvss20241209VAL电芯ARC试验绝热加速量热仪AcceleratingRateCalorimeter,ARCARC是由美国陶氏化学公司(DowChemical)在20世纪70年代设计开发,80年代经美国哥伦比亚科物联网监控箱在甘肃省高速公路车流主动管控工程项目上成功应用为加快推进可视可测可控可服务的高速公路运行监测体系建设,不断提升服务能力和监管水平,更好地满足人民群众高品质出行需求,甘肃省交通规划勘察设计院股份有限公司智慧交通技术研究团队潜心科2022年9月轿车SUV新能源销量排行榜9月轿车销量排行榜(前130名)9月份轿车销量98。1万辆,同比增长28。2今年累计销量742。3万辆,同比增长5。1。总体看有31款车型销量破万,其中五菱宏光MINIEV以1辆的
早安图片早安,祝你千福万福,晚年大福,大富大贵,健康到位每天的早安问候语能给人带来极大的信心和能量,赶快分享给自己的好友吧,以后小编会不定时的给大家呢,发送一些早安问候图片。同时也祝愿大家健健康康,鸿运当头,全家发大财!多和善良的人为伴爱吃肉的人和爱吃素的人,谁会更健康?科学研究发现了答案你认为,吃素和吃肉,哪种饮食模式更健康呢?不同站队各有各的道理素食者那个年代经济条件不好,从小吃素,油水也少,大家身体素质都不错,也没有听说什么三高。现在大家生活条件好了,有钱了,树洞讨论别卷了,听我的,躺平嗨这里是微梦小院,会分享关于个人成长情感心事等温暖治愈内容,累了乏了可以来这瞧瞧。希望与你,在这里,彼此成全,相伴成长。文北望图网络匿名北望你好,有件事想请教你一下就是我有考研的想天亡我?巴西1天遭受两次重大打击,球王生命垂危,2大将重伤退出2022世界杯在之前结束的一场世界杯小组赛上,巴西与喀麦隆相遇。这一场比赛,可以看作是桑巴军团的练兵之战,因为对手的实力与自己相差很远,而且只要自己不败就能拿到小组第一了。可以说,元宇宙赛道西北首个吃螃蟹者入场咸阳高新区拟打造大秦元宇宙产业先行区21世纪经济报道记者毕华章西安报道元宇宙发展势头一浪高过一浪之际,地处西北的咸阳高新区也下决心加入这场竞赛。近日,咸阳高新区管委会发布咸阳高新区元宇宙产业先行区行动方案,对即将打出跨过山和大海也穿过人山人海如果你的人生注定了平凡,你接受吗?很喜欢平凡之路的歌词跨过山和大海也穿过人山人海。或许你的人生再也不平凡。当你穿过了暴风雨,你就不是原来的那个人了。很多人说和自己握手言和,我不要做微评特辑远赴人间惊鸿宴,一睹人间盛世颜无数微尘汇集一片光阴是生命在燃烧心里的乌托邦在时代迸发出璀璨的光风过林稍吹出少年灿烂可人间绝不只有少年孤影疏疏照月明,北风烈烈难掩情八年沧桑,化作一场奉献的大眠花容冷冬寒,纷飞落星教练父母阅读分享第五天今天是2022年12月5日,宜成长。新的一天,为自己加油!如果世上真的有什么奇迹,那么一定是去理解他人和与人分享。日出之前今天是阅读教练父母分享第五天,今天把教育的真相第一节教什么夜读终使他阅人何其多再无一人恰似你我觉得,不管是男人还是女人,可能只有在喝多的时候,才会吐露自己的心声和思绪吧路过的你也说说你的心里话吧,你和你曾经心里的那个他断了联系后,你对任何人和事还会有兴趣吗?那份热情是不是50岁狠狠心把第3次拉皮手术做了,术后1个月,效果反馈来了这位求美者的变美之路非常坎坷。之前在不正规的地方做了一次大拉皮,结果手术失败了,为了补救第一次手术造成的伤害,她又接二连三的做了一些不适合自己的项目。磨过骨注射过玻尿酸打过生长因子我要响誉世界之幸哉幸哉我愿将践矣无意中又注册了一个账号,也许是与头条有缘的缘故吧,爱的深沉,总是要落到它的陷阱中。当然,也是心甘情愿的,谁不愿意为自己的所爱付出呢?希望我这个新的头条账号能为我