ice icon indicating copy to clipboard operation
ice copied to clipboard

开发调试性能 benchmark

Open ClarkXia opened this issue 4 years ago • 0 comments

目前 eslint 作为默认情况下自动检测修改文件的代码,根据开发者及实际体验反馈,对于 hot-reload 的速度会有一定影响 #4865

方案

按不同大小的项目(lite、pro)查看 eslint / tsChecker 等逻辑对于 hot-reload 速度影响 根据实际 benchmark,以及可优化的方案对是否默认开启 eslint(增量检查)进行确定和讨论

webpack 模式

定制 speed-measure-webpack-plugin(由于基础 webpack loader 和 plugin 基本都采取预编译,直接使用该插件无法根据具体的依赖包判断出相应的 loader 名称)

输出 webpack 构建过程中相关 loader 及 plugin 耗时信息,信息结构: image

vite 模式

由于 vite 模式的服务启动时间并不意味的编译结束,因此 vite 模式下的启动时间将由页面真实渲染时间为准,具体方案:

  1. 工程中注入 process.env.BUILD_START
  2. 在页面渲染的 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 的插件相对独立 并且针对单文件进行编译,输出时将考虑更多信息过滤

ClarkXia avatar Nov 05 '21 06:11 ClarkXia