javascript - Babel fordítási teljesítmény mérése (fájlonként vagy modulonként)
Megpróbálom kitalálni, hogyan lehet kinyerni némi információt a babel fordítási folyamatból.
Konkrétabban, amikor futtatom a babel-t (nem számít, hogy a Webpack babel-loader-ét, tesztkeretrendszerek transzformereit, a Babel CLI-jét stb. használom), szükségem lenne valamennyi információ kinyerésére minden lefordított fájlhoz. Például:
- fájlelérési út
- fordítási idő
- bármilyen más metaadat?
Amit eddig kipróbáltam
Sebességmérés bővítmény Webpackhoz (link)
Jól működik, de csak a Webpack betöltőinek futási idejét mutatja. Nincs információ az egyes lefordított fájlokról.
Csatlakozás a Webpack fordító/kompilációs példányához
Fontolgattam, hogy írok egy Webpack plugint, amely csatlakozik a fordítási folyamathoz, ahogyan itt le van írva, de nem találtam megfelelő hookokat annak felismerésére, hogy egy fájlt a babel dolgoz fel.
Frissítések
Azt hiszem, @kidroca a helyes irányt jelezte. Konkrétabban azt értem, hogy a Babel wrapPluginVisitorMethod opciója a kulcs a Babel fordítási folyamatába való bevonódáshoz.
Lásd a babel-minify időzítés bővítményét.
Kapcsolódó szálak:
- 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
Frissítések 2018.04.28
Végül megpróbáltam egy megoldást becsomagolni egy eszközbe, amit babel-timingnak neveztem.
Válasz #1
Használhatod a @babel/core-t és a babel.transformSync(code)-t, amely az Absztrakt Szintaxis Fa (AST) információkat ad vissza néhány más adattal együtt. És adhatsz hozzá némi logikát is a módszer teljesítményének mérésére.
Beállítottam egy minimális repót és egy kicsit játszottam vele magam: https://github.com/kidroca/babel-meta
Alapvetően futtathatod a npm run analyze-file ./es6-src/es6-module.js vagy a npm run analyze-dir ./es6-src/es6-module.js parancsot, és megnézheted az eredményeket
Ez vissza fog adni:
{
"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 */
}
Módosíthatod a analyze.js fájlt, hogy kiszűrd a szükséges információkat.
Módosíthatod a .babelrc fájlt, hogy szabályozd az átalakítást, és hozzáadhass/eltávolíthass plugineket.
