angularjs/рендеринг Разница в производительности между встраиванием или использованием ng-include

Я могу использовать ng-include, чтобы включить партиал внутри углового представления, или я могу использовать партиалы на стороне сервера, чтобы сделать это на сервере. Я думаю об использовании партиалов на стороне сервера вместо партиалов angular, а затем ng-include (с тегом script), потому что я где-то читал, что партиалы angular создают новые области видимости, и это может снизить производительность $digest.

Есть ли в этом какая-то обоснованность. Как влияет на производительность использование угловых включений


person Harry    schedule 18.05.2013    source источник


Ответы (1)


ng-include создаст новую область и зарегистрирует наблюдение (в выражении пути, используемом ng-include) в области, где используется ng-include. Хотя это требует некоторой дополнительной обработки, оно по-прежнему основано на объектах JavaScript и поэтому работает очень быстро. Эффект от новых часов плюс дополнительный прицел в большинстве случаев должен быть совершенно незначительным.

Единственная реальная разница, которую я вижу, заключается в том, что ng-include будет включать/отображать ваш частичный асинхронно, поэтому вы можете увидеть небольшую задержку, особенно при загрузке частичных файлов по сети (но это можно уменьшить, предварительно загрузив частичные файлы, как описано здесь: https://stackoverflow.com/a/12346901/1418796)

Вкратце: в большинстве случаев эффект ng-include должен быть незначительным, если частичные файлы предварительно загружены.

И последний комментарий: «преждевременная оптимизация — корень всех зол». Не начинайте настройку производительности micr, пока не измерите производительность своего приложения и не определите, что ng-include является узким местом.

person pkozlowski.opensource    schedule 18.05.2013
comment
С другой стороны, ng-include(s) внутри ng-repeat(s) запустится очень быстро и продемонстрирует значительное снижение производительности из-за асинхронного механизма. Лучшая оптимизация, которую я сделал в своем приложении angularJS, заключалась в создании директивы ng-include-cached (синхронной при попадании в кеш). - person Guillaume86; 25.02.2014
comment
@ Guillaume86: Не хотите ли поделиться исходным кодом этой директивы? Мне было бы очень интересно. - person paldepind; 27.02.2014
comment
@paldepind вот оно: gist.github.com/guillaume86/9272837, но вы, вероятно, захотите написать новый с последним кодом ngInclude из последней версии angular. Мой использовал старую версию 1.0.x в качестве основы. - person Guillaume86; 28.02.2014