网站首页 > 教程文章 正文
1. 构建速度优化
- 使用 webpack5 持久化缓存,能明显提高构建速度,webpack4可以使用cache-loader
- 使用 lazyCompilation 可以懒编译,能明显提高开发构建速度
- 约束loader的include和exclude,可以跳过某些编译。
- 使用module.noParse 可以跳过对某些文件的编译,因为有些三方库是已经编译过的,并且没有导出,如jquery
- 优化source-map的配置,使用eval-cheap-source-map可以提高构建速度, eval可缓存。
- 借助swc, esbuild等高性能编译器,优化构建速度, 例如terser插件可以指定使用swc或esbuild对代码进行压缩。使用esbuild-loader或swc-loader加快对代码的编译和降级处理。
- 采用并行压缩,例如:thread-loader、terser插件自带的parallel参数。
- 使用vite-plugin-warmup 可以对Vite代码预热,能有效加快构建速度。
2. 构建体积优化
- 尽量使用 export {} 导出代码, 若export default {}, 会被全部导出, 失去tree-shaking效果
- 不要使用babel将esm转为cjs, 若代码是commonjs代码,将失去tree-shaking优化,需要设置baberc配置中的modules: false
- babel搭配transform-runtime插件,可以将babel runtime的代码模块化引入,减少了代码冗余, 同时设置preset-env的useBuiltIns: 'usage'
- babel 通过targets配置可以有效减少core-js的体积
- lib库 酌情使用 sideEffects,通过设置package.json中的sideEffects字段,可以告诉webpack哪些是纯的(无副作用),进而对lib库 tree-shaking
- 使用 unplugin-vue-components 或 babel-plugin-import 按需引入组件
- 可以使用 /*#__PURE__ */ 标记哪些函数没有副作用,进而tree-shaking
- 合理配置split-chunk-plugin,例如其中的maxInitialRequests和maxAsyncRequests属性,用于控制异步模块和入口模块的拆分粒度。能有效减少重复打包的模块。如果是Vite或Rollup, 可以借助 manualChunks 对代码进行拆包
- 三方模块,尽量提取为CDN, 可以有效减小包体积大小。
- gzip压缩
- 路由懒加载,可以有效减小入口文件的大小,减少白屏率。
- 使用插件对图片进行压缩
3. 网络优化
- 使用http2的多路复用,可以突破HTTP 1.x 的请求并发限制,头部压缩等功能。
- 采用CDN
- prefetch:优先级较低,可以在浏览器空闲时加载一些资源,例如提前加载下一个页面的资源,增加后续的打开速度
- preload:优先级高,提前加载必要的资源
- modulepreload: 原生esm可以进行预加载
- DNS 预解析, 通过 dns-prefetch 技术将这一过程提前,降低 DNS 解析的延迟时间
4. 运行时优化
- 虚拟列表
- 防抖、节流
- 图片懒加载,并且使用CDN
- requestAnimationFrame 优化动画或一些阻塞浏览器渲染的操作
- 动画操作使用transform,减少触发重排与重绘
- 使用骨架屏优化用户体验
- v-memo优化列表渲染性能
5. 其他优化
- 服务端渲染
总结
总结了一些工作中对项目优化的手段,欢迎补充~
猜你喜欢
- 2025-06-23 浏览器缓存:提升性能的幕后英雄(浏览器的三种缓存)
- 2025-06-23 如何用5分钟开发一个 Webpack Loader?
- 2025-06-23 使用 npm-check 管理 Node.js 依赖项
- 2025-06-23 H5页面开发技巧与实战经验分享(h5页面开发技巧与实战经验分享怎么做)
- 2025-06-23 还不清楚webpack和vite原理?有这篇足够了!
- 2025-06-23 Javascript 多线程编程的前世今生
- 2025-06-23 JavaScript模块化,CommonJS和ESM,你真的用对了吗?
- 2025-06-23 前端开发需要了解常用7种JavaScript设计模式
- 2025-06-23 前端工程化-webpack 分包的方式有哪些?
- 2025-06-23 Webpack 学习目录:从入门到精通的学习路线
- 06-24mysql操作手册(mysql 基本操作)
- 06-24使用 SQLAlchemy 实现 Python 数据库操作的 ORM 完整指南
- 06-24Flet开发网站,数据库模块SQLAlchemy使用“十要领”
- 06-24python中orm框架sqlalchemy使用(python安装sqlalchemy)
- 06-244、SQLAlchemy基础使用(sqlalchemy1.4)
- 06-24经验:什么影响了数据库查询速度、什么影响了MySQL性能
- 06-24揭秘阿里OceanBase数据库最新性能测试结果
- 06-24运维角度浅谈:MySQL数据库优化(深入浅出mysql数据库开发、优化与管理维护)
- 最近发表
-
- mysql操作手册(mysql 基本操作)
- 使用 SQLAlchemy 实现 Python 数据库操作的 ORM 完整指南
- Flet开发网站,数据库模块SQLAlchemy使用“十要领”
- python中orm框架sqlalchemy使用(python安装sqlalchemy)
- 4、SQLAlchemy基础使用(sqlalchemy1.4)
- 经验:什么影响了数据库查询速度、什么影响了MySQL性能
- 揭秘阿里OceanBase数据库最新性能测试结果
- 运维角度浅谈:MySQL数据库优化(深入浅出mysql数据库开发、优化与管理维护)
- MySQL 生产流程监控咋选库?这俩常用工具手把手教你
- 常用数据库性能基线(数据库性能管理四个阶段)
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)