Pull to refresh

Comments 15

Все нужные js собираются grunt'ом в общий js. Тащить зоопарк мелких файлов клиенту не было необходимости.
поддержу
только вместо grunt использую gulp
в продакшене да, но при разработке удобнее пользоваться каким нибудь загрузчиком модулей. так же при сборке решается проблема ресолва зависимосткй.

лично я последний месяц использую es6 модули.
А когда JS-кода под ~100Кб или больше? Тут целесообразнее подключать только то, что нужно на конкретной странице, и при этом иметь возможность отдавать HTML быстрее.
100кб это мало для SPA, а какой-то прелоадер можно отображать сразу по domready и запускать boostrap приложения вручную по завершению загрузки. Более того, озвученный выше метод не решает основной проблемы жирных приложений — ленивая подгрузка модулей. То есть приложению всеравно нужно загрузить все модули. В Angular2 эту проблему собираются решить использованием ES6 модулей, но думаю никто не мешает заменить реализацию $inject на свою, с ленивой подгрузкой на промисах, возможно с каким-то ранним механизмом для префетча. Но поскольку модуль $inject не «поправить» без патчинга самого angular, красивой реализации нет (а может и есть, ткните носом если так).

В целом как я понял в большинстве случаев приложения на angular либо весят мало, либо никого не парит такие штуки (все же очень небольшой процент разработчиков пишут жирные приложения на angularjs не под гибриды к примеру а именно под web).
можно реализовать ленивую подгрузку с помощью resolve в роутере, но у меня не получилось красиво описывать зависимости и приходилось на каждый роут писать руками все что нужно ему и всем его зависимостям.
ресолвы в раутере отрабатывают после этапа конфигурации, так что добавить сервисы или директивы уже не выйдет.
я не вижу смысла грузить отдельные контроллеры. Они не должны быть сильно жирными по хорошему. Имеет смысл догружать скоупом модули отдельные. Но в целом конечно же от задачи зависит.

Ну и да, это кастыль а не красивое решение.
Ангуляр жесткий и поэтому любой шаг в сторону будет костылем. Выше было заявление, что в рантайме не загрузить директиву или сервис, ссылка это опровергает.
Смысла грузить в резолве я тоже не вижу. Чаще бывает необходимость догрузить на лету что-то.
Посмотрел как именно там это реализовано — они подменяют $injector у $rootElement при инициализации приложения на свой враппер.
я уже точно не помню как я делал, но возможно добавить директивы и сервисы на лету
$compileProvider можно дергать только на этапе конфигурации, регистрация директив происходит через него. То есть чисто теоритически можно в config сохранить ссылку на $compileProvider и после попытаться добавить директиву, но не уверен будут ли проблемы с этим.
Совершенно непонятен профит от такого уродования кода (лишний код + лишняя вложеность). В продакшене это бессмысленно, так как пока все файлы не загрузятся, приложение не стартанет.

В маленьком проекте достаточно соблюдать гайд по структуре, чтобы настроить сборщик (grunt, gulp, etc) для правильной сборки зависимостей. В большом проекте к этому стоит добавить жесткий стайлгайд касаемо описания моделуей (можно вытягивать зависимости из кода во время сборки).

Интереснее было бы посмотреть на подгрузку зависимостей на лету по требованию. Пока лучшее, что я нашел –ocLazyLoad. И он далеко не идеален.
Кто нибудь занимался настройкой подгрузки кода во время исполнения?
Sign up to leave a comment.

Articles

Change theme settings