在开发阶段,为什么vite的启动速度快,但是首屏加载慢?

1,149 阅读3分钟

在开发阶段,Vite之所以启动速度快但首屏加载慢,主要可以归因于以下几个原因:

启动速度快的原因

  1. 基于ES Modules

    • Vite利用了ES Modules(ESM)的特性,通过原生的JavaScript模块机制进行开发,避免了传统打包工具中大量的模块重复打包、解析和编译等过程,从而加快了启动速度。
    • 在开发模式下,Vite直接利用浏览器原生的ESM支持,在浏览器中运行未经打包的代码,减少了开发环境中的构建时间。
  2. 按需编译

    • Vite会根据页面的实际需求,只编译和加载当前页面所需的模块,而不是将整个应用打包成一个bundle。这种按需编译的方式减少了编译和打包的时间,使得启动更加迅速。
  3. 缓存机制

    • Vite在开发过程中会缓存已经编译过的模块,当模块发生改动时,只重新编译改动的模块,而不是重新编译整个项目。这种缓存机制有效地减少了不必要的重复编译,提高了开发效率和启动速度。
  4. 热模块替换(HMR)

    • Vite使用了微型的开发服务器,并启用了HMR功能。当代码发生变化时,可以实时更新页面,而无需刷新整个页面,从而减少了等待时间,加快了开发效率。

首屏加载慢的原因

  1. 资源转换和编译

    • 在访问页面时,Vite需要对静态资源和依赖进行转换处理,例如将Vue文件转换成JS代码,以便浏览器能够正确运行。这个过程在首次加载时需要一定的时间,尤其是在需要处理大量资源或复杂依赖时。
  2. 依赖预构建

    • Vite在首次启动时需要进行依赖预构建,以确保CommonJS和UMD兼容性。这个预构建过程需要扫描项目中的所有文件,并找到所有使用到的依赖,然后进行构建打包。这个过程可能需要一定的时间,尤其是在项目依赖较多或文件较多时。
    • 在非首次启动时,虽然Vite会使用缓存来减少预构建时间,但如果项目依赖或配置文件发生了变化,仍然需要重新进行预构建。
  3. 网络延时和资源体积

    • 首屏加载还受到网络延时和资源体积的影响。如果资源文件体积过大或网络延迟较高,也会导致首屏加载速度变慢。
  4. 浏览器解析和执行时间

    • 即使资源被成功加载到浏览器,浏览器也需要时间来解析和执行这些资源。如果资源中包含复杂的JavaScript代码或大量的CSS样式,浏览器的解析和执行时间也会增加,从而导致首屏加载变慢。

综上所述,Vite在开发阶段之所以启动速度快但首屏加载慢,主要是由于其采用了基于ES Modules、按需编译、缓存机制和HMR等高效的开发机制来加快启动速度,但在首屏加载时需要进行资源转换、依赖预构建以及浏览器解析和执行等额外工作,从而导致了加载速度的下降。为了提升首屏加载速度,可以采取一些优化措施,如减少资源体积、优化依赖关系、使用缓存策略等。