ice
ice copied to clipboard
开发调试性能 benchmark
目前 eslint 作为默认情况下自动检测修改文件的代码,根据开发者及实际体验反馈,对于 hot-reload 的速度会有一定影响 #4865
方案
按不同大小的项目(lite、pro)查看 eslint / tsChecker 等逻辑对于 hot-reload 速度影响 根据实际 benchmark,以及可优化的方案对是否默认开启 eslint(增量检查)进行确定和讨论
webpack 模式
定制 speed-measure-webpack-plugin(由于基础 webpack loader 和 plugin 基本都采取预编译,直接使用该插件无法根据具体的依赖包判断出相应的 loader 名称)
输出 webpack 构建过程中相关 loader 及 plugin 耗时信息,信息结构:

vite 模式
由于 vite 模式的服务启动时间并不意味的编译结束,因此 vite 模式下的启动时间将由页面真实渲染时间为准,具体方案:
- 工程中注入 process.env.BUILD_START
- 在页面渲染的 callback 中输出 +new Date() - process.env.BUILD_START 时间戳(dev 阶段默认注入该运行时代码)
针对 vite 下的插件,提供全局的劫持处理:
// 如果存在 transform 逻辑,则计算 transform 的耗时
if (plugin.transform && plugin.transformInclude) {
const _transform = plugin.transform
plugin.transform = function (code, id) {
if (plugin.transformInclude && !plugin.transformInclude(id)) {
return null
}
const transformStart = +new Date()
const result = _transform.call(this, code, id)
const transformEnd = +new Date()
log('', transformEnd - transformStart);
return result;
}
}
由于 vite 的插件相对独立 并且针对单文件进行编译,输出时将考虑更多信息过滤