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

博主用 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 文件来确认。

相关推荐
LinXunFeng1 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
乘风gg1 天前
为什么AI 时代来临,大部分人吃不到红利
前端·ai编程·claude
恋猫de小郭1 天前
Android 限制侧载新进展,谷歌联合国内厂商推验证计划
android·前端·flutter
IT_陈寒1 天前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
恋猫de小郭1 天前
解读 Android 17 全新内存限制,有没有“豁免”后门?
android·前端·flutter
Hyyy1 天前
理解LLM的基本工作原理:预训练、微调、推理的区别
前端
Gatlin1 天前
前端逆向与反逆向:一场猫鼠游戏的底层逻辑与实战
前端
代码煮茶1 天前
React 组件封装方法论 —— 以 Todo App 为例
javascript·react.js
Pedantic1 天前
本地通知(Local Notifications)学习笔记
前端
任沫1 天前
Agent之Function Call
javascript·人工智能·go