优化前端性能之从“全局引入”改为“按需引入”

博主用 Chrome 的 Lighthouse 分析项目时, Lighthouse 提示说明我的 element-plus.js 文件太大了(3.48 MB),压缩它预计可以省下 1.15 MB。

这通常是因为全局引入了整个 Element Plus 库 ,但实际用到的组件可能还不到一半。解决方法很简单:从"全局引入"改为"按需引入"

具体怎么改?(Vite 项目)

下面是在 Vite + Vue 3 项目中,将 Element Plus 改为按需引入的完整操作步骤。

1. 删除当前的"全量引入"代码

在你的 main.jsmain.ts 文件中,找到并删除或注释掉下面这几行全局引入的代码:

javascript 复制代码
// src/main.js - 请删除或注释掉以下全量引入的代码

// 删除这一行
// import ElementPlus from 'element-plus'
// 删除这一行
// import 'element-plus/dist/index.css'

// 删除这一行
// app.use(ElementPlus)
2. 安装按需引入需要的插件

打开终端,进入你的项目根目录,执行以下命令安装两个 Vite 插件:

bash 复制代码
npm install -D unplugin-vue-components unplugin-auto-import
3. 配置 Vite

在你的项目根目录下找到 vite.config.js(或 vite.config.ts)文件,修改 plugins 数组,加入按需引入的配置:

javascript 复制代码
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// 1. 引入两个新插件
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
// 2. 引入 Element Plus 的解析器
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  plugins: [
    vue(),
    // 3. 配置自动导入 Vue API(ref, reactive...)
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    // 4. 配置自动导入 Vue 组件,并告诉它为 Element Plus 启用按需加载
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
})
4. 重启项目,验证效果

配置修改完成后,需要重启你的开发服务器:

bash 复制代码
npm run dev

重启后,插件就会开始工作。现在页面里写的 <el-button> 等组件,都会被自动按需导入。

对比结果:能省多少?

按需引入的优化效果非常明显 。根据多份优化实践报告,这项改动后的 element-plus.js 体积可以缩减 60%-80%

引入方式 典型体积 首屏加载时间 (3G网络) 说明
全局引入 (目前) ~2.3 MB ~2.1 秒 打包了整个库,包含所有未使用的组件
按需引入 (推荐) ~800 KB ~0.7 秒 只打包了你页面中实际用到的组件

现在你理解的按需引入,和"路由懒加载"一样,都是解决首屏加载慢的核心手段。如果你不确定自己的项目是否配置成功,可以在打包后(npm run build)检查 dist 目录,看看是否生成了多个独立的 CSS/JS 文件来确认。

相关推荐
yume_sibai14 分钟前
02-Flutter进阶开发
前端·flutter
津津有味道24 分钟前
Web网页写网址到424DNA标签Javascrip源码
javascript·nfc·424dna·写网址·加密提交
a11177636 分钟前
莱茵生命终端 网页 html
前端·开源
水月清辉1 小时前
CSS 常用语法详解
前端·css
梨涡泥窝2 小时前
JavaWeb——基于 Spring Boot + Vue 的图书管理系统的设计与实现
vue.js·spring boot·后端
Eric_见嘉2 小时前
打开这个 VSC 设置「组件引用位置」和数量就都清楚了
前端·typescript·visual studio code
李高钢2 小时前
Python Tornado 框架入门:从零搭建你的第一个异步 Web 应用
前端·python·tornado
宁风2 小时前
JavaScript:函数体系-1
前端·javascript
mmsx2 小时前
Android 手簿 ADB 无线调试全攻略:USB 转 WiFi 一键连接
android·前端
guwentian2 小时前
Rolldown vs esbuild vs Webpack:Rust 打包器大战我们该怎么选
前端·webpack·rust·esbuild