Как и большинство людей в карьере AngularJS, я ударил шею для бутылки производительности в своем приложении, и я использовал профилировщик в Chrome, чтобы попытаться выяснить Зачем.angular.equals() занимает 50% времени выполнения
Как раз в сторону; Я сделал то, что я считаю обычной оптимизацией для приложений AngularJS, и у меня нет чрезмерных наблюдателей [~ 300]. Тем не менее, я использую Angular Google Maps и Angular Material.
Главное, что появляется в профилировщике, - это функция, называемая equals
внутри AngularJS, которая занимает 50% времени. Интересно, хотя я не использую angular.equals
в своем коде, поэтому я ожидаю его некоторого внутреннего углового процесса (цикл digest?) Или внешней библиотеки - хотя я проверил исходный код в большинстве больших библиотек, которые я использую, и они экономно используют .equals()
.
Может ли кто-нибудь дать мне несколько подсказок относительно того, где искать или какой тип кода искать, чтобы выяснить, что вызывает эти чрезмерные проверки на равенство?
Я думаю, что речь идет о грязной системе проверки механизма обнаружения изменений, не так ли? –
@LenilsondeCastro Это также может быть фактором. Я не настолько хорошо разбираюсь в внутренних функциях Angular, но вы можете увидеть, как реализуется '$ digest' [здесь] (https://github.com/angular/angular.js/blob/03043839d5a540b02208001fe12e812dfde00a8e/src/ng/rootScope. JS). – JLRishe
Спасибо за ответ, я не знал, как параметр 'objectEquality' влияет на производительность. Сказав, что я использую очень мало фактических '$ scope. $ Watch', и когда я это делаю, я не использую' objectEquality'. Лучше делать '$ scope. $ Watch (" expression ", ...)' или '$ scope. $ Watch (() => {return $ scope.value;}, ...)' – Chris