Weboldal keresés

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.