浏览器进程模型及事件循环机制

简介: 这篇文章介绍了在Vite工程化中如何手动分包以优化打包输出的过程。文章首先创建了一个Vue3工程,通过修改代码前后打包对比,指出每次打包都会导致包含第三方库的文件重新下载。接着,文章说明了如何将第三方依赖库和业务代码分别打包,通过配置`vite.config.ts`文件来实现手动分包,最终达到优化缓存效果,减少不必要的下载。

项目搭建

1、 我们使用 vite 搭建一个 vue3 工程,执行命令:

pnpm create vite vue3-demo --template vue-ts

2、 安装 lodash 依赖包,下载依赖:

pnpm add lodash

pnpm install

3、 完成后的工程目录结构是这样的:

image.png

业务场景

我们先首次构建打包,然后修改一下代码再打包,对比一下前后打包差异:

image.png

可以看到,代码改动后,index-[hash].js 的文件指纹发生了变化,这意味着每次打包后,用户就要重新下载新的 js,而这个文件里面包含了这些东西:vuelodash业务代码,其中像 vuelodash 这些依赖包是固定不变的,有变动的只是我们的业务代码,基于这个点我们就可以在其基础上打包优化。

打包优化

我们需要在打包上优化两个点:

  1. 把第三方依赖库单独打包成一个 js 文件

  2. 把我们的业务代码单独打包成一个 js 文件

这块需要我们对 vite 工程化知识有一定的了解,它使用 Rollup 打包你的代码,并且它是预配置的,可输出用于生产环境的高度优化过的静态资源,可以通过配置 build.rollupOptions.output.manualChunks 来自定义 chunk 分割策略。

更改 vite 配置

1、 打开 vite.config.ts,加入配置项:

 import { defineConfig } from 'vite'
 import vue from '@vitejs/plugin-vue'

 // https://vitejs.dev/config/
 export default defineConfig({
   plugins: [vue()],
   build: {
     rollupOptions: {
       output: {
         manualChunks: {
           'vendor':['vue', 'lodash'], // 这里可以自己自定义打包名字和需要打包的第三方库
         }
       }
     }
   }
 })

2、 执行打包命令,我们可以看到打包文件中多了一个 verdor-[hash].js 的文件,这个就是刚才配置分包的文件:
image.png

3、 这样的好处就是,将来如果我们的业务代码有改动,打包的第三方库的文件指纹就不会变,用户就会直接读取浏览器缓存,这是一种比较优的解决办法:
image.png

4、 但这样需要我们每次都手动填写第三方库,那也显得太呆了,我们可以把 manualChunks 配置成一个函数,每次去加载这个模块的时候,它就会运行这个函数,打印看下输出什么:
image.png

5、 我们会发现依赖包都是在 node_modules 目录下,接下来我们就修改一下配置:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  build: {
    rollupOptions: {
      output: {
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return 'vendor'
          }
        }
      }
    }
  }
})

6、 我们再看下打包结果:

image.png

总结

分包(Code Splitting)是一种将应用程序代码拆分为不同的块或包的技术,从而在需要时按需加载这些包。这种技术带来了许多优势,特别是在构建大型单页应用(Single Page Application,SPA)时。

  1. 减小初始加载时间: 将应用程序分成多个小块,可以减少初始加载时需要下载的数据量。这意味着用户可以更快地看到初始内容,提高了用户体验。

  2. 优化资源利用: 分包可以根据用户的操作行为和需要进行按需加载。这样,在用户访问特定页面或功能时,只会加载与之相关的代码,而不会加载整个应用程序的所有代码,从而减少了不必要的资源消耗。

  3. 并行加载: 分包允许浏览器并行加载多个包。这可以加速页面加载,因为浏览器可以同时请求多个资源,而不是等待一个大文件下载完成。

  4. 缓存优化: 分包使得缓存管理更加灵活。如果应用程序的一部分发生变化,只需重新加载受影响的分包,而不必重新加载整个应用程序。

  5. 减少内存占用: 当用户访问某个页面时,只有该页面所需的代码被加载和执行。这有助于减少浏览器内存的使用,尤其是在应用程序变得复杂时。

  6. 按需更新: 当应用程序的某个部分需要更新时,只需要重新发布相应的分包,而不必重新发布整个应用程序。这可以减少发布和部署的复杂性。

  7. 代码复用和维护: 分包可以按功能或模块来划分,从而鼓励代码的模块化和复用。这样,不同页面之间可以共享相同的代码块,减少了重复编写和维护代码的工作量。

相关文章
|
4月前
|
IDE API 开发工具
让 GitHub 个人主页更专业:用 WakaTime 实现动态代码统计
这篇文章介绍了如何使用 WakaTime 为 GitHub 个人主页添加动态代码统计,展示编码活跃度,提升专业性。通过注册账号、安装 IDE 插件、配置 GitHub 仓库和使用工作流自动更新 README 文件,实现对多种编程语言的详细统计。
277 1
让 GitHub 个人主页更专业:用 WakaTime 实现动态代码统计
|
4月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
432 16
|
4月前
|
开发工具 git 索引
Git使用详细教程(4):git rm使用详解
Git使用详细教程(4):git rm使用详解
315 104
|
4月前
|
人工智能 Kubernetes Cloud Native
MSE Nacos Controller:为 Kubernetes 生态构建配置管理与服务发现的桥梁
在企业云原生转型过程中,如何实现传统微服务与 Kubernetes 服务的配置统一管理、服务互通及协议转换成为关键挑战。MSE Nacos Controller 应运而生,作为连接 Kubernetes 与 Nacos 的桥梁,支持 ConfigMap 与 Nacos 配置双向同步、服务自动注册发现,并助力 Higress 等 MCP 网关实现 REST API 向 AI 可调用 MCP 服务的转换,全面提升系统治理能力与智能化水平。
391 32
|
4月前
|
人工智能 自然语言处理 算法
提升LangChain开发效率:10个被忽视的高效组件,让AI应用性能翻倍
LangChain作为主流大语言模型应用框架,其高级组件常被忽视。本文详解10个高价值但低使用率的核心组件,如语义检索、多模板路由、智能查询转换等,结合技术原理与实践案例,助开发者构建更高效、智能、适应性强的AI系统,提升应用性能与业务价值。
307 0
|
5月前
|
Java
== 与 equals 的区别
本段内容介绍了 Java 中 `==` 和 `equals` 的区别:`==` 用于基本类型比较值,引用类型比较地址;`equals` 默认行为与 `==` 相同,但常被重写以比较对象内容,如 String 和 ArrayList。
191 1
|
4月前
|
JavaScript API 开发者
JS 分片任务的高阶函数封装
这篇文章介绍了在实际业务开发中,如何处理渲染大量元素导致的页面卡顿问题。文章通过问题复现,分析了浏览器渲染原理,并提出了使用分片任务执行的方法。文章详细介绍了如何使用requestIdleCallback API实现分片任务,并封装成高阶函数,以便开发者针对不同任务进行自定义分片处理。同时,文章也涉及了浏览器渲染原理和requestIdleCallback API的用法。
|
前端开发 数据处理
如何使用 Promise.all() 处理异步并发操作?
使用 `Promise.all()` 可以方便地处理多个异步并发操作,提高代码的执行效率和可读性,同时通过统一的 `.catch()` 方法能够有效地处理异步操作中的错误,确保程序的稳定性。
|
6月前
|
供应链 搜索推荐 数据挖掘
破局!电商API如何重塑电商行业新格局
电商API:驱动电商行业变革的隐形引擎。它打破数据孤岛,实现跨平台信息共享;自动化业务流程,提升运营效率;拓展业务渠道,促进生态繁荣;支持个性化推荐,优化用户体验;赋能数据驱动决策,提升竞争力。实战案例显示其在店铺管理、数据分析与全球布局中的重要作用。未来,AI技术融合与跨境电商发展将推动电商API迈向智能化与生态化,持续为电商行业注入活力。
|
弹性计算 运维 Linux
Docker环境如何配置?使用阿里云OOS一步搞定!
阿里云OOS简化了ECS上应用部署,提供Docker一键安装服务。支持多种操作系统,包括Alibaba Cloud Linux、CentOS、Ubuntu、Debian和Windows Server。要安装Docker,用户只需在OOS扩展程序中选择并确认实例,执行安装。OOS扩展程序还支持Java、Python等开发环境及宝塔面板、WordPress等应用的快速配置,提升运维效率,让云资源管理更便捷。
Docker环境如何配置?使用阿里云OOS一步搞定!

热门文章

最新文章