профилирование/улучшение производительности AngularJS

В поисках потенциальных узких мест в AngularJS я нашел это:

 var KEYWORD_REGEX = /^((ng:|[$_a-z])[\w\-_]+)/; 

источник: https://github.com/angular/angular.js/blob/b77defde81fc265c13fa504dc78b41a43997abf4/docs/config/processors/keywords.js

KEYWORD_REGEX, похоже, имеет большое количество вызовов, так как вызывается внутри цикла:

_.forEach(tokens, function(token) { (line 72)

Который сам находится внутри внутреннего цикла:

_.forEach(doc, function(value, key) { (line 97)

Который также находится во внутреннем цикле! :

_.forEach(docs, function(doc) { (line 88)

Итак, у нас есть вложенный цикл на два уровня глубже: производительность O (N) ^ 3.

Этот вопрос: Как мне измерить Производительность цикла дайджеста моего приложения AngularJS? предлагает запустить профиль процессора с использованием инструментов разработчика Chrome для измерения производительности, но я не думаю, что он достаточно детализирован, чтобы измерить производительность определенного раздела кода.

Я не уверен, какой код написать, чтобы попасть в этот файл. Из чтения комментария к файлу keywords.js:

 * This processor extracts all the keywords from each document and creates
 * a new document that will be rendered as a JavaScript file containing all

Кажется, что любой файл с поддержкой angular должен вызывать keywords.js, поскольку angularjs сканирует каждый документ на наличие директив? Для измерения производительности подход запускает AngularJS из исходного кода, изменяет циклы, описанные выше, чтобы включить время (используя getTime() ), которое измеряет завершение каждого цикла, создает множество директив AngularJS и запускает приложение?


person thepen    schedule 20.12.2016    source источник
comment
keywords.js не относится к источникам Angular. Непонятно, как это относится к теме.   -  person Estus Flask    schedule 20.12.2016
comment
@estus keywords.js содержится в github.com/angular/angular.js/, где github.com/angular/angular .js является источником Angularjs?   -  person thepen    schedule 20.12.2016
comment
angular/angular.js — репозиторий проекта. Не только исходники фреймворка. Последние находятся в src/, согласно соглашению. Указанный вами файл находится по адресу /docs/config/processors. Это скрипт Node и, очевидно, имеет отношение к документации фреймворка, а не к самому фреймворку.   -  person Estus Flask    schedule 20.12.2016
comment
@estus а, большое упущение с моей стороны, спасибо. Знаете ли вы, для чего используется проект конфигурации, поскольку его все же стоит оптимизировать?   -  person thepen    schedule 20.12.2016
comment
Вероятно, он используется для создания документации Angular. Я совершенно уверен, что это не имеет никакого отношения к вашему вопросу. Обычно вы можете захотеть профилировать приложение с помощью инструментов разработчика и выяснить узкие места по результатам профилирования, а не угадывать их из исходного кода.   -  person Estus Flask    schedule 20.12.2016
comment
@estus согласился, но в этом случае O (N) ^ 3 предполагает низкую производительность, если только N не слишком мало?   -  person thepen    schedule 20.12.2016
comment
Не обязательно. Это полностью зависит от того, чему равно O(N)^3. Вложенные циклы сами по себе не так уж плохи.   -  person Estus Flask    schedule 20.12.2016