代码 Vite 开发服务器变慢:从 DevTools 的 Disable cache 到桶文件

2026-09-12 21:02:58

Vite 开发服务器变慢:从 DevTools 的 Disable cache 到桶文件

浏览器插件会干涉请求

大型应用在开着 DevTools 的时候,启动和刷新都会变慢,原因之一是浏览器插件对请求的干扰。开发时用一个不含插件的配置,或者直接开无痕模式。

别勾 DevTools 的 Disable cache

Vite 对预打包依赖做了强缓存,对源码走快速 304 响应。如果在 DevTools 里勾了「禁用缓存(Disable cache)」,启动速度和整页刷新都会大幅变慢。用 Vite 时务必不要开这个选项。

插件钩子的开销要分开看

  • 只在特定场景才用的大型依赖,改成动态 import,减少 Node 启动时间。
  • buildStartconfigconfigResolved 这几个钩子不应该耗时过长或做大量操作,因为开发服务器启动会等这些钩子跑完。
  • resolveIdloadtransform 可能让某些文件比别的文件慢。检查 code 里是否含特定关键字、id 是否匹配扩展名,再去决定要不要做完整转换。

定位这类问题用 vite --debug plugin-transform,或者 vite-plugin-inspect

解析导入路径可能很贵

路径解析在最坏情况下开销不小。Vite 支持用 resolve.extensions 去「猜」路径,默认值是:

['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json']

更稳的做法是写明确路径,比如 import './Component.jsx'。也可以缩小 resolve.extensions 列表来减少文件系统检查,但要确保这份列表对 node_modules 里的文件同样适用。

桶文件

桶文件(barrel file)的代价在于:当你只导入一个 API,例如 import { slash } from './utils',工具需要获取并转换桶文件里的所有文件——它们可能包含 slash,也可能带初始化时执行的副作用。结果是初始加载的内容比实际需要的更多,页面更慢。

尽量避免桶文件,改成直接导入具体模块:

import { slash } from './utils/slash.js'

这个问题见 issue #8237。

请求瀑布与 server.warmup

Vite 只转换浏览器请求到的文件,所以启动很快;但当某个文件的转换明显慢于其他文件时,仍然会出现请求瀑布。

server.warmup 预热那些确定会常用的大文件(比如 big-utils.js)。只预热高频文件,预热太多会让启动时过载。

--openserver.open 也会自动预热入口起点或要打开的 URL。

保持 Vite 快,核心是减少源文件的工作量

优先用 CSS 而不是 Sass/Less/Stylus,需要嵌套可以交给 PostCSS / Lightning CSS 处理。不要把 SVG 转成 UI 框架组件,作为字符串或 URL 导入即可。

参考:https://cn.vite.dev/guide/performance

复制全文 生成海报 Vue Vite 前端性能

推荐文章

程序员茄子在线接单