简单几步,将React项目脚手架Webpack换成Vite⚡⚡,附带性能比较和思考

简介: 简单几步,将React项目脚手架Webpack换成Vite⚡⚡,附带性能比较和思考


⚡️使用Vite

前段时间,将练习了时长两年半的react项目脚手架换成vite了,过程如下

首先使用vite创建基础项目框架

npm create vite@latest my-vue-app --template react-ts

将src工作目录直接拷贝过来

接着配置常用的路径解析alias

// vite-config,ts
alias: [
  ...(
    Object.entries({
      '@': path.resolve('src'),
    }).map(([key, val]) => ({ find: key, replacement: val }))
  ),
],
extensions: [".js", ".ts", ".tsx", ".jsx", ".d.ts"],

此时页面可以访问了,但是还是会有ts相关报错,

只需要在tsconfig.json里添加如下配置:

"paths": {
  "@/*": ["./src/*"]
},

为了使ci/cd可以正常进行,还需要将项目默认打包默认目录从dist换成build

// vite-config,ts
export default defineConfig({
  build: {
    outDir: './build',
  }
})

整个过程很快,

性能优化过程

接下来我执行了打包命令,部署在服务器上看看

在没有任何优化情况下,包体积为6.7M,比webpack版包体积小了0.4M

部署之后,vite版lighthouse的性能得分59分

通过分析,发现是因为没有压缩,大文件太多,加载过慢导致的,所以接下来,我们进行压缩文件。

压缩配置

import viteCompression from 'vite-plugin-compression'
// https://vitejs.dev/config/
export default defineConfig({
  build: {
    outDir: './build',
    rollupOptions: {
      plugins: viteCompression({
        verbose: true, // 是否在控制台中输出压缩结果
        disable: false,
        threshold: 10240, // 阈值,单位为b
        algorithm: 'gzip', // 压缩算法,可选['gzip',' brotliccompress ','deflate ','deflateRaw']
        ext: '.gz', // 格式
        deleteOriginFile: false // 是否清除源文件,简易这里保留
      })
    }
  },
  // ...
})

并不是所有的nginx都带有 gzip 模块,所以最好保留源文件,以备不时之需

打包之后

同时需要,nginx需要开启压缩识别,否则无效。

server {
    # 其他配置
    gzip on;
    gzip_comp_level 5;
    gzip_min_length 256;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    # 其他配置
}

通过压缩文件优化后,性能有了明显提升。

我的项目没有图片,所以没有使用压缩图片的插件,如果需要可以使用vite-plugin-imagemin

性能比较

而webpack版的lighthouse的性能得分73分

webpack 版已经完成了代码压缩、代码分割、路由懒加载。

对比两个版本,webpack 的 FCP 指标十分优秀,Vite 的 TBT 指标很健康。

虽然,目前来看两者差距不大。但是vite的优势很明显,

使用默认配置加上代码压缩,可以比webpack优化配置之后更好一点。

思考

此时影响的因素主要请求链的长度过长

翻译:下面的关键请求链显示了哪些资源是以高优先级加载的。考虑减少链的长度,减少资源的下载大小,或者推迟不必要资源的下载以提高页面负载。

我们可以看到上面的请求链接,好几个都是只有几kb的小文件。而这些小文件是外层index文件的依赖文件,所以会造成阻塞,小文件小文件众多阻塞的时间就越久。

vite 将文件根据路由切割成多个子模块,每个模块的文件来自于不同的依赖包的子集。并且通过import的方式,引入到主文件中。

如果我们在小文件引入前,将小文件进行合并,就可以有效缩短链长度,从而更进一步的提高性能。目前还没有类似的插件。

今天的分享就到这里了,感谢你的阅读!


相关文章
|
9天前
|
前端开发 JavaScript 开发者
工程化(webpack+vite)
在现代前端开发中,工程化是提高开发效率和项目质量的关键。UniApp 结合 Webpack 和 Vite,提供强大的工程化支持。Webpack 功能强大,支持复杂项目的构建;Vite 则利用现代浏览器的 ESM 特性,提供快速的开发体验。开发者可根据项目需求选择合适的工具,显著提升开发效率和项目质量。
|
2月前
|
前端开发
React | 修改React脚手架的默认端口号?
React | 修改React脚手架的默认端口号?
144 64
|
1月前
|
XML 前端开发 JavaScript
react学习笔记一:入门级小白到脚手架(create-react-app)开发项目
这篇文章是React的学习笔记,覆盖了从React的基础用法到高级特性,包括组件化、状态管理、生命周期、虚拟DOM等主题,适合React初学者参考。
92 0
react学习笔记一:入门级小白到脚手架(create-react-app)开发项目
|
21天前
|
前端开发 JavaScript
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
|
18天前
|
JavaScript 前端开发 算法
在性能上,React和Vue有什么区别
【10月更文挑战第23天】在性能上,React和Vue有什么区别
14 1
|
22天前
|
前端开发 JavaScript 开发者
工程化(webpack+vite)
工程化(webpack+vite)
|
1月前
|
JSON 前端开发 JavaScript
【简单粗暴】如何使用 React 优化 AG 网格性能
【简单粗暴】如何使用 React 优化 AG 网格性能
29 3
|
2月前
|
前端开发 NoSQL MongoDB
React技术栈-基于react脚手架编写评论管理案例
这篇文章介绍了在MongoDB中使用sort和投影来对查询结果进行排序和限制返回的字段,通过具体的命令示例展示了如何实现这些操作。
50 6
React技术栈-基于react脚手架编写评论管理案例
|
1月前
|
缓存 前端开发 JavaScript
10 种方案提升你 React 应用的性能
本文首发于微信公众号「前端徐徐」,作者徐徐分享了提升 React 应用性能的方法。文章详细介绍了 `useMemo`、虚拟化长列表、`React.PureComponent`、缓存函数、使用 Reselect、Web Worker、懒加载、`React.memo`、`useCallback` 和 `shouldComponentUpdate` 等技术,通过实际案例和代码示例展示了如何优化 React 应用的性能。这些方法不仅减少了不必要的重新渲染和计算,还提升了应用的响应速度和用户体验。
20 0
|
2月前
|
前端开发 JavaScript 开发者
工程化(webpack+vite)
工程化(webpack+vite)