Vue 中的那些性能优化


得益于 Vue 的 响应式系统 和 虚拟 DOM 系统 ,Vue 在渲染组件的过程中能自动追踪数据的依赖,并精确知晓数据更新的时候哪个组件需要重新渲染,渲染之后也会经过虚拟 DOM diff 之后才会真正更新到 DOM 上,Vue 应用的开发者一般不需要做额外的优化工作。

但在实践中仍然有可能遇到性能问题,下面会介绍一些定位分析 Vue 应用性能问题的方式及一些优化的建议。

整体内容由三部分组成:

  • 如何定位 Vue 应用性能问题

  • Vue 应用运行时性能优化建议

  • Vue 应用加载性能优化建议


1. 如何定位 Vue 应用性能问题

Vue 应用的性能问题可以分为两个部分,第一部分是运行时性能问题,第二部分是加载性能问题。

和其他 web 应用一样,定位 Vue 应用性能问题最好的工具是 Chrome Devtool,通过 Performance 工具可以用来录制一段时间的 CPU 占用、内存占用、FPS 等运行时性能问题,通过 Network 工具可以用来分析加载性能问题。

例如,通过 Performance 工具的 Bottom Up 标签我们可以看出一段时间内耗时最多的操作,这对于优化 CPU 占用和 FPS 过低非常有用,可以看出最为耗时的操作发生在哪里,可以知道具体函数的执行时间,定位到瓶颈之后,我们就可以做一些针对性的优化。

2. Vue 应用运行时性能优化建议

运行时性能主要关注 Vue 应用初始化之后对 CPU、内存、本地存储等资源的占用,以及对用户交互的及时响应。下面是一些有用的优化手段:


2.1 引入生产环境的 Vue 文件

开发环境下,Vue 会提供很多警告来帮你对付常见的错误与陷阱。而在生产环境下,这些警告语句没有用,反而会增加应用的体积。有些警告检查还有一些小的运行时开销

当使用 webpack 或 Browserify 类似的构建工具时,Vue 源码会根据 process.env.NODE_ENV 决定是否启用生产环境模式,默认情况为开发环境模式。在 webpack 与 Browserify 中都有方法来覆盖此变量,以启用 Vue 的生产环境模式,同时在构建过程中警告语句也会被压缩工具去除。


2.2 使用单文件组件预编译模板

当使用 DOM 内模板或 JavaScript 内的字符串模板时,模板会在运行时被编译为渲染函数。通常情况下这个过程已经足够快了,但对性能敏感的应用还是最好避免这种用法

预编译模板最简单的方式就是使用单文件组件——相关的构建设置会自动把预编译处理好,所以构建好的代码已经包含了编译出来的渲染函数而不是原始的模板字符串。


2.3 提取组件的 CSS 到单独到文件

当使用单文件组件时,组件内的 CSS 会以