javascript - 测量 Babel 编译性能(每个文件或模块)
问题描述
我试图弄清楚如何从编译过程中提取一些信息。babel
更具体地说,当我运行时babel
(无论是使用 Webpack 的babel-loader
、测试框架的转换器、Babel 的 CLI等),我都需要为每个编译的文件提取一些信息。喜欢:
- 文件路径
- 编译时间
- 任何其他元数据?
到目前为止我尝试过的
Webpack 的速度测量插件(链接)
工作正常,但它只提供 Webpack 的加载器运行时间。没有关于单个编译文件的信息。
挂钩到 Webpack 的编译器/编译实例
我考虑编写一个 Webpack 插件来挂钩到此处描述的编译过程,但我找不到合适的挂钩来识别正在处理的文件babel
。
更新
我猜@kidroca 指出了正确的方向。更具体地说,我了解 Babel 的wrapPluginVisitorMethod
选项是挂钩 Babel 编译过程的关键。
见babel-minify
的计时 插件.
相关话题:
- <a href="https://github.com/babel/babel/issues/5340" rel="nofollow noreferrer">https://github.com/babel/babel/issues/5340
- https://github.com/babel/babel/issues/2206
- https://github.com/babel/babel/pull/3659
- https://github.com/babel/minify/pull/93
- https://github.com/babel/babel/pull/3659
28/04/18 更新
我最终尝试将解决方案封装到我称为babel-timing的工具中。
解决方案
您可以使用@babel/core
and babel.transformSync(code)
which 将返回
抽象语法树(AST) 信息以及其他一些数据。并且您还可以添加一些逻辑来衡量此方法的性能
我已经设置了一个最小的 repo 并自己玩了一下:https ://github.com/kidroca/babel-meta
基本上你可以运行npm run analyze-file ./es6-src/es6-module.js
或npm run analyze-dir ./es6-src/es6-module.js
检查结果
这将返回:
{
"filename": "/full/path/to/src/file.js",
"cwd": "current/dir",
"ast": "ast information json - lines, comments, and other info",
"executionTime": "execution time in ms",
/* a lot of other info */
}
您可以修改analyze.js
文件以过滤掉您需要的信息
您可以修改.babelrc
文件以控制转换和添加/删除插件
推荐阅读
- java - 尝试使用它们时,同一调用中的两个泛型方法是否会导致编译错误?
- python - 为什么默认情况下不启用“PEP 572 -- 赋值表达式”?
- java - Tomcat 中的 HyperSQL 数据库在 Linux 重启后被删除
- html - 如何使用 R 解析 html 文本?
- image - VBScript 以文件名作为标题将图像导入单词
- wordpress - 如何在 WordPress 网站的 nginx 上修复从 http 到 https 的无限循环重定向?
- ios - Swift UITableview 在文本框中编辑不同的值
- python - Stripe 订阅在 Django/Python 上创建重复付款
- elasticsearch - ElasticSearch 更新 API 脚本 - 创建结构数组
- javascript - 如何使用 Joi 最新版本验证枚举字符串?