У меня есть приложение Angular 8 + Webpack 4, которое не использует CLI, и время сборки довольно велико (примерно 150 с). Я нашел где-то (я не могу вспомнить, где), что был неофициальный флаг для включения некоторых метрик сравнения: @ngtools/webpack/src/benchmark.js
.
Включение этого флага дает некоторые более подробные метрики на время моей сборки (цифрыпохожи для сборки с нуля и для инкрементной сборки):
AngularCompilerPlugin._createOrUpdateProgram.ng.createProgram: 0.845ms
TypeChecker._update: 0.805ms
TypeChecker._createOrUpdateProgram.ng.createProgram: 0.073ms
AngularCompilerPlugin._createOrUpdateProgram.ng.loadNgStructureAsync: 2270.816ms
AngularCompilerPlugin._emit.ng.getNgStructuralDiagnostics: 0.005ms
TypeChecker.gatherDiagnostics.ng.getTsSyntacticDiagnostics: 2808.133ms
TypeChecker.gatherDiagnostics.ng.getTsSemanticDiagnostics: 50618.766ms // <- This is very long
TypeChecker.gatherDiagnostics.ng.getNgSemanticDiagnostics: 46.749ms
TypeChecker.message: 53474.933ms
AngularCompilerPlugin._emit.ng.emit: 140105.957ms
AngularCompilerPlugin._emit: 140106.072ms
AngularCompilerPlugin._update._emit: 140106.099ms
AngularCompilerPlugin._update: 142523.159ms
AngularCompilerPlugin._make: 142523.670ms
Мне действительно интересно узнать больше о том, что делают эти шаги, и если были известные способы их оптимизации, особеннона один ссылается TypeChecker.gatherDiagnostics.ng.getTsSemanticDiagnostics
, что является очевидным узким местом.
Спасибо!