马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、开发阶段优化
1. 热更新加快(HMR)
- // vue.config.js
- module.exports = {
- devServer: {
- hot: true, // 开启热更新
- injectClient: true, // 自动注入HMR客户端
- watchOptions: {
- ignored: /node_modules/, // 忽略node_modules变化
- aggregateTimeout: 300 // 防抖延迟
- }
- }
- }
复制代码 效果:修改组件代码时,仅更新当前组件而非整个页面。
2. 镌汰Loader处理范围
- // 针对babel-loader优化
- {
- test: /\.js$/,
- include: [ // 明确处理范围
- path.resolve(__dirname, 'src'),
- path.resolve(__dirname, 'node_modules/vue-awesome')
- ],
- use: ['babel-loader?cacheDirectory'] // 启用缓存
- }
复制代码 二、构建速度优化
1. 多线程并行处理
- const ThreadLoader = require('thread-loader');
- // 预热线程池
- ThreadLoader.warmup({
- workers: 2,
- workerParallelJobs: 50
- }, ['babel-loader']);
- // 配置
- {
- test: /\.js$/,
- use: [
- {
- loader: 'thread-loader',
- options: { workers: 2 }
- },
- 'babel-loader'
- ]
- }
复制代码 2. 缓存计谋
- // 持久化缓存(Webpack5+)
- cache: {
- type: 'filesystem',
- buildDependencies: {
- config: [__filename] // 配置文件变化时缓存失效
- }
- }
复制代码 三、产物体积优化
1. Tree Shaking优化
- // package.json 标记副作用文件
- {
- "sideEffects": [
- "*.css",
- "*.vue" // Vue单文件组件默认有副作用
- ]
- }
- // 确保使用ES模块导入
- import { Button } from 'element-ui' // ✅ 按需加载
- import ElementUI from 'element-ui' // ❌ 全量引入
复制代码 2. 按需加载第三方库
- // 以Element-UI为例
- const components = ['ElButton', 'ElInput'];
- const plugins = ['ElLoading'];
- plugins.forEach(plugin => {
- app.use(require(`element-ui/lib/${plugin.toLowerCase()}`));
- });
复制代码 3. 图片压缩(Webpack5+)
- {
- test: /\.(png|jpe?g|webp)$/,
- type: 'asset',
- parser: {
- dataUrlCondition: {
- maxSize: 8 * 1024 // 8KB以下转base64
- }
- },
- use: [
- {
- loader: 'image-webpack-loader',
- options: {
- mozjpeg: { quality: 65 },
- webp: { quality: 75 }
- }
- }
- ]
- }
复制代码 四、Vue专项优化
1. 模板预编译
- // vue-loader配置
- {
- loader: 'vue-loader',
- options: {
- compilerOptions: {
- whitespace: 'condense' // 压缩模板空白字符
- },
- reactivityTransform: true // 启用响应性语法糖
- }
- }
复制代码 2. 异步组件分割
- // 路由配置示例
- const UserDetails = () => import(
- /* webpackChunkName: "user" */
- './views/UserDetails.vue'
- );
复制代码 3. 运行时版本构建
- // vue.config.js
- module.exports = {
- configureWebpack: {
- resolve: {
- alias: {
- 'vue$': 'vue/dist/vue.runtime.esm-bundler.js' // 使用无编译器版本
- }
- }
- }
- }
复制代码 效果:镌汰约30%的Vue焦点库体积。
五、高级优化方案
1. 模块联邦(微前端场景)
- // 模块提供方配置
- new ModuleFederationPlugin({
- name: 'app1',
- filename: 'remoteEntry.js',
- exposes: {
- './Button': './src/components/Button.vue'
- }
- });
- // 消费方配置
- remotes: {
- app1: 'app1@http://localhost:3001/remoteEntry.js'
- }
复制代码 2. Gzip压缩(需共同Nginx)
- const CompressionPlugin = require('compression-webpack-plugin');
- new CompressionPlugin({
- test: /\.(js|css|html|svg)$/,
- threshold: 10240, // 10KB以上文件压缩
- algorithm: 'gzip'
- })
复制代码 优化效果对比
优化项构建时间产物体积首屏加载基础设置45s4.2MB2.8s多线程+缓存22s (-50%)--Tree Shaking+按需加载-2.1MB (-50%)1.5sGzip压缩-1.3MB (-70%)0.9s
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|