vite打包优化

说到前端性能优化🚀,通过我个人的感觉总体的来说优化的本质就是优化文件的体积,体积小了加载就快了,当然前端性能不光是在体积方面,在代码层面需要去优化,本篇文章主要讲述的是Vite打包优化。

分包策略

因为浏览器的缓存策略,当请求的文件名不变时,会直接从缓存中获取文件,所以只要每次 main.js 中内容发生了变化,打包后的文件名中的 hash 值都会不一样。也就是说,当项目业务代码发生变化,例如 main.ts 中循环体内的内容发生了变化时,打包后的文件名就发生了变化,浏览器就会重新请求文件。但是这里的问题是,每次打包后的内容大部分都是 lodash 库的内容,它的内容是不会变化的(node_modules 中的代码都是不会变化的),我们只是更改了业务代码而已,会导致每次浏览器请求的文件都很大,很大的网络传输损耗。

分包策略就是为了解决这个问题,它会将一些不常规更新变化的文件进行单独打包处理。

在vite.config.js中配置

import {defineConfig} from 'vite'
module.exports= defineConfig({
	build: {
	sourcemap: false,
    minify: 'terser',
    chunkSizeWarningLimit: 1500,
    terserOptions: {
      // 去掉console和debugger
      compress: {
        drop_console: true,
        drop_debugger: true
      }
    },
    rollupOptions: { // vite打包是通过rollup来打包的
      output: {
        manualChunks: (id) => {
          // 可以在这里打印看一下id的值,这里做个简单处理将node_modules中的包打包为vendor文件
          if(id.indexOf('node_modules') > -1) {
            return 'vendor'
          }
        },
          // 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
          entryFileNames: 'js/[name].[hash].js',
          // 用于命名代码拆分时创建的共享块的输出命名
          chunkFileNames: 'js/[name].[hash].js',
          // 用于输出静态资源的命名,[ext]表示文件扩展名
          assetFileNames: '[ext]/[name].[hash].[ext]',
      }
    }
  },
});

2. gzip压缩

安装 vite-plugin-compression

npm i vite-plugin-compression -D

在vite.config.js中配置

import { defineConfig } from 'vite'
import VitePluginCompression from 'vite-plugin-compression'

export default defineConfig({
  build: {
  	...
  },
  plugins: [
    ...
    VitePluginCompression()
  ]
})

3. CDN加速

分发策略里我们将依赖单独打成一个稳定的包。现在是另外一个场景:比如国内访问一些未被封的国外网站(例如 github、newsela 等)网站时,因为服务器在国外,所以浏览器打开这些网站时请求时间一般都会比较久。即使你分包了,但是如果这个包体积很大,访问时间还是会很长,因为是从国内访问国外了。

如果我们将其中一些依赖包经过 cdn 的方式访问,例如 Vue vue-router 这些包通过 cnd 的方式访问,那么这些包就会直接通过 cdn 地址的方式加载,而不是在我们的服务器上去请求,这样我们的项目包就会更小,页面响应就会更快。

安装 vite-plugin-cdn-import

npm install vite-plugin-cdn-import -D

在vite.config.js中配置

import { defineConfig } from 'vite'
import ViteCDNPlugin from 'vite-plugin-cdn-import'

export default defineConfig({
  plugins: [
    ViteCDNPlugin({
      modules: [{
        name: 'lodash', // 包名
        var: '_', // 对应cdn包导出的变量,如jQuery导出的是$
        path: 'https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js'
      }]
    })
  ]
})

4. 图片压缩

安装vite-plugin-imagemin

npm install vite-plugin-imagemin -D

在vite.config.js中配置

import viteImagemin from "vite-plugin-imagemin"
import {defineConfig}from 'vite'
module.exports = defineConfig{
	plugins:[
		viteImagemin()
	]
})
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端御书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值