Vite项目优化

205 阅读2分钟

一、我为什么选择vite?(技术选型)

vite分为两个核心阶段:

1.开发环境编译 ESbuild

2.生产环境打包 Rollup

Esbuild是Go实现的,更贴近底层,性能会更好,AST的复用,并发、多线程,利用了原生的es6 module,是真正的按需加载。但是webpack需要分析项目的整个依赖。

image.png

那为什么打包用Rollup呢?

esbuild专注解决的是 ts js的编译,还有很多其他资源 css、图片、路径等等,各种插件。借用了rollup的能力。 使用esbuild+rollup 扬长避短,携手并进。

配置比webpack相对要简单,上手更快,而且性能不错,不用主动去做很多优化,他能保证一个性能的底线

二、打包UMD模块

commonjs规范。nodejs包管理规范。Require exports

AMD

CMD

前端模块化的方案。

你的项目用的什么模块化方案?

es6 module

commonjs

你的项目打包出来的文件遭循什么规范?

UMD的规范

通用性非常强,一套规范,几乎所有的项目都可以引用。

cdn链接

if(xxxx){
  AMD //
}else if{
  cmd //
}

三、Vite在开发环境不进行类型检查

巨大的性能提升。

esbuild是按需引用.

ts的类型检查要分析全局的依赖。

两者冲突的。

借助编辑器的TS类型检查,和vite互不冲突。

四、css编译性能优化

yy一个场景:我们css编译我发现很慢,于是我提升了它的性能。

lightningcss.dev/

// vite.config.js
import { defineConfig } from 'vite';
import lightningcss from 'vite-plugin-lightningcss';
 
export default defineConfig({
  plugins: [
    lightningcss({
      // 这里可以添加LightningCss的配置选项
      // 例如:
      minify: true,
      preset: 'lightning' // 注意:这里应该是字符串 'lightning',而不是变量 Lightning
      // 其他配置选项可以在这里添加
    })
  ]
});

image.png

五、项目别名配置

../../../

../

Webpack

Vite

通用

// 导入必要的模块
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import postcssPresetEnv from 'postcss-preset-env';
import path from 'path';
 
// Vite配置文件
export default defineConfig({
  plugins: [
    vue() // 使用Vue插件
  ],
  css: {
    postcss: {
      plugins: [
        postcssPresetEnv() // 使用PostCSS预设环境插件
      ]
    }
  },
  resolve: {
    alias: {
      '@assets': path.resolve(__dirname, './src/assets/') // 设置别名
    }
  }
});

六、预构建优化性能解决流量瀑布问题

vite有一个非常经典的问题。

按需加载。

引入了一个js,js引入好多其他js

index.js

import xxx from "lodash"

import xxx from "dayjs"

项目初始化,加载上千个js,可能会导致,开发环境,会加载上千个js,很慢。

预构建解决两个问题:

1.分析依赖,将这些多个依赖合并打包在一起加载。

2.有些第三方库比较老,不支持es6 module。

七、使用预构建,优化lodash-es开发环境加加载性能并且利用缓存

optimizeDeps:{
    exclude:['lodash-es']
}

非常典型的lodash-es包引发的问题

image.png 开启预构建

image.png

预构建的缓存