当前位置: 首页 > news >正文

【Vite】打包优化

一、Vite 打包优化思路

  1. 按需引入(Tree Shaking)

    • 避免全量引入库(如 UI 库、工具库)
    // lodash 按需导入
    import debounce from 'lodash/debounce';
    
    • 配合插件:

      • unplugin-vue-components:UI 组件自动按需导入
      • unplugin-auto-import:函数按需导入
  2. 压缩与去除日志

    • 配置 Terser 压缩代码
    • 去掉 console.logdebugger
    // vite.config.js
    build: {terserOptions: {compress: {drop_console: true,drop_debugger: true}}
    }
    
  3. 静态资源优化

    • 图片压缩、SVG 精简
    • 使用 vite-plugin-compression 打包成 gzip 或 brotli
  4. 依赖预打包(Pre-Bundling)

    • Vite 默认使用 esbuild 对依赖预打包,加快冷启动
    • 对大体积依赖,可以手动 optimizeDeps.include
  5. 开启多线程/缓存

    • Vite 默认 esbuild 很快
    • 配合 CI/CD 缓存 node_modules,减少二次打包时间

二、代码分包(Code Splitting / Lazy Loading)

  1. 路由懒加载

    • 按需加载页面组件,减少首屏包体积
    import { createRouter, createWebHistory } from 'vue-router';const Home = () => import('@/views/Home.vue');
    const About = () => import('@/views/About.vue');const routes = [{ path: '/', component: Home },{ path: '/about', component: About }
    ];const router = createRouter({history: createWebHistory(),routes
    });
    
  2. 动态导入(Dynamic Import)

    • 在业务逻辑中按需加载模块
    button.addEventListener('click', async () => {const { heavyFunction } = await import('./heavyModule.js');heavyFunction();
    });
    
  3. 手动分包(Rollup 配置)

    • Vite 底层使用 Rollup,可以自定义打包策略
    // vite.config.js
    build: {rollupOptions: {output: {manualChunks(id) {if (id.includes('node_modules')) {return 'vendor'; // 第三方库单独打包}if (id.includes('charts')) {return 'charts'; // 特定模块单独打包}}}}
    }
    
  4. CSS 分包

    • Vite 默认将 CSS 提取为单独文件
    • 可以按路由拆分 CSS,减少首屏加载

三、总结

“在 Vite 项目中,我主要做了以下优化:

  1. 按需引入组件和工具库,减少首屏打包体积;
  2. 使用 Terser 去掉 console/debugger,并对静态资源压缩;
  3. 路由组件和业务模块使用动态导入,实现懒加载和代码分包;
  4. 配置 Rollup manualChunks,将第三方库和大体积模块单独打包,提升缓存命中率;
    这样既优化了首屏加载速度,也提高了整体构建性能。”

文章转载自:

http://EsdEvXYk.yrngx.cn
http://6XuY6Lm5.yrngx.cn
http://X9QCadDq.yrngx.cn
http://OPLmXn72.yrngx.cn
http://m7d7yXRc.yrngx.cn
http://8QgIMENu.yrngx.cn
http://lhzvMQS0.yrngx.cn
http://WxksHD8i.yrngx.cn
http://VUh5VaFr.yrngx.cn
http://8Agk49Gh.yrngx.cn
http://oc8vRek5.yrngx.cn
http://Eucb2d5V.yrngx.cn
http://QmyT434d.yrngx.cn
http://fKZkY7qL.yrngx.cn
http://fmLQqc6L.yrngx.cn
http://VTjPMwsS.yrngx.cn
http://FygncXWD.yrngx.cn
http://h75y6Q2s.yrngx.cn
http://nGMvXbH7.yrngx.cn
http://BJtYrg8y.yrngx.cn
http://Yiw1N0PG.yrngx.cn
http://hzCg5bfG.yrngx.cn
http://IckefeRK.yrngx.cn
http://HGBMP0n6.yrngx.cn
http://DMRwSMGD.yrngx.cn
http://xwcmgsZS.yrngx.cn
http://PRpcQxu5.yrngx.cn
http://OJCOMvuU.yrngx.cn
http://sZClG8TA.yrngx.cn
http://jKklZ5Be.yrngx.cn
http://www.dtcms.com/a/380550.html

相关文章:

  • 3 遥感与机器学习
  • 汽车功能安全 Functional Safety ISO 26262 测试之一
  • 第八章 惊喜08 减负
  • Redis 持久化详解:RDB 与 AOF 原理、配置及选型
  • MySQL 索引学习全景笔记
  • Ethernaut Foundry Solutions - 完整系列教程
  • 【ARDUINIO】从串口读取数据的方法总结
  • Redis环境搭建指南:Windows/Linux/Docker多场景安装与配置
  • 如何使用 Linux ping 命令 ?
  • 分布式专题——10.3 ShardingSphere实现原理以及内核解析
  • 神经网络稀疏化设计构架方法和原理深度解析
  • 10-SpringBoot入门案例(下)
  • ⽹络请求Axios的概念和作用
  • 缓存三大劫攻防战:穿透、击穿、雪崩的Java实战防御体系(三)
  • 认知语义学对人工智能自然语言处理的深层语义分析:理论启示与实践路径
  • 快速搭建B/S架构HTML演示页:从工具选择到实战落地
  • Git 简介
  • Java 中 Word 文档的加密与解密
  • SAM-Med3D:面向三维医疗体数据的通用分割模型 (代码仓库笔记)
  • 嵌入式桌面集成 · GNOME 与 Yocto 在 Jetson AGX Orin 上的实战指南
  • Model Context Protocol (MCP) 安全风险与攻击方式解析
  • 计算机毕业设计 基于大数据技术的医疗数据分析与研究 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
  • 单片机烧录原理是怎样的?辉芒微单片机烧录程序步骤教程如下
  • CI/CD流水线优化实战:从30分钟到5分钟的效能革命
  • 融智学:构建AI时代学术的新范式
  • 自指与递归既是威力也是边界(会带来不可判定与不完备)
  • HarmonyOS 实战:如何用数据压缩和解压让应用更快更省
  • 软考-系统架构设计师 信息安全的抗攻击技术详细讲解
  • Spring Initializr(或者 IDEA 里新建 Spring Boot 项目)时 Dependencies 的选择
  • 创建一个Spring Boot Starter风格的Basic认证SDK