Pull to refresh

Comments 18

Ждем статей — как экранизировать переменную с помощью angular или как складывать числа на js.
Следующая по видимому будет про ng-class.
Понимаю, слишком уж просто. Но я решил зайти издалека.
А зачем? Такие основы легко и непринужденно учатся по документации. Да и вообще говоря, эти директивы достаточно интуитивны, чтобы тратить на них сколько-либо значимого времени. Чего действительно не хватает — это основы оптимизации приложений на angular — тут есть где развернуться.
Меньше юзать скоуп, не включать без крайней нужды dirty-checking (обычно они и не нужны, достаточно проверки по отдельным свойствам и если уж нужно мониторить что-то жирное, то кастомный ватчер, который возвращает хэш какой-то вместо копирования объекта целиком + diff), не использовать фильтры для обхода массивов (ибо они будут отрабатывать на каждый $digest), стараться делать все так, что бы количество вызовов $digest было минимальным…

По сути в плане оптимизации angular приложений — слабое место это $scope. Причем если вы посмотрите на github какие-то более мение большие проекты опенсурсные, то там в этом плане все грустно. Где-то в $scope пробрасывается функция напрямую использующая $http, где-то еще какой-то треш… Контроллеры на 100% состоящие из ватчеров и каких-то функций, пробрасываемых в $scope…
А где можно посмотреть на примере оптимизированное приложение?
Честно, не могу сказать, ибо не знаю. Хотя сам бы хотел посмотреть.

Из интересных подходов я бы еще порекомендовал вот эту статью. Автор пытался реализовать частичный запуск $digest для скоупа (что бы просмотр изменений не распрастранялся выше по $scope, а только на дочерние айтемы. Из эксперементов выходил неплохой профит при использовании в контексте ng-repeat + много элементов с навешанными директивами, использующими изолированные скоупы).
Раскройте, пожалуйста, смысл фраз «Меньше юзать скоуп» и «слабое место это $scope» с точки зрения производительности.
Ну по сути производительность падает изза запуска $apply/$digest, которые запускают ватчеры и т.д. Нужно стараться делать все так, что бы количество циклов $digest было наименьшим. Так же не стоит использовать dirty checking, ибо при этом будет неплохо проседать производительность. Опять же все зависит от задачи, в некоторых случаях падения производительности можно и не заметить, но если у вас будут часто меняться данные в $scope и после каждого изменения прогоняться $digest, то вы сразу все заметите. Скажем стандартные директивы аля ng-keyup или что-то в этом духе на каждое нажатие клавиши вызывает $digest, причем обновляться будет все от $rootScope и ниже, все приложение. Производительность при этом будет падать линейно в зависимости от количества ватчеров и данных, находящихся в $scope.
Вы повторно пересказали остальные части своего предыдущего коммента. C $apply()/$digest() и количеством вотчеров все понятно. Меня именно процитированные фразы смутили.
многое из того что пихают в $scope можно туда не пихать. По сути все сводится к уменьшению количества и сложности ватчеров, что бы сократить длительность цикла $digest и общее их количество. Например, не нужно использовать директивы аля ng-keyup/ng-keydown для своих директив, лучше использовать просто ивент листенеры, и вызывать $digest только когда это действительно нужно.
Да, безусловно, пихать в $scope все подряд не нужно. Правда на производительности это, по-большому счету, никак не сказывается. Это уже скорее про архитектуру.
Я не верно выразился, под «пихают» я имел ввиду что слишком сильно завязывают на $scope, вплоть до того что через него обрабатывают нажатия клавишь клавиатуры, позиция курсора и т.д.
Это же перевод… Написали бы развернутую статью о использовании выражений, нюансах с наследованием скоупов и т.д.
Честно говоря, я сам сейчас в процессе изучения документации, поэтому нюансы будут позже. Я как бы совмещаю приятное с полезным, почитываю туториалы, решил перевести серию с scotch.io
Спасибо за статью :)
Иногда быстро найти слишком простую с точки зрения разработчика информацию и ее днем с огнем не сыщешь потому что «это элементарно» :)
А я использую ng-if, что, зачастую, ускоряет приложение в разы.
Иногда вставка узла вызывает притормаживание, ввиду этого местами его заменяю другими методами управления отображением.
Sign up to leave a comment.

Articles

Change theme settings