А когда JS-кода под ~100Кб или больше? Тут целесообразнее подключать только то, что нужно на конкретной странице, и при этом иметь возможность отдавать HTML быстрее.
100кб это мало для SPA, а какой-то прелоадер можно отображать сразу по domready и запускать boostrap приложения вручную по завершению загрузки. Более того, озвученный выше метод не решает основной проблемы жирных приложений — ленивая подгрузка модулей. То есть приложению всеравно нужно загрузить все модули. В Angular2 эту проблему собираются решить использованием ES6 модулей, но думаю никто не мешает заменить реализацию $inject на свою, с ленивой подгрузкой на промисах, возможно с каким-то ранним механизмом для префетча. Но поскольку модуль $inject не «поправить» без патчинга самого angular, красивой реализации нет (а может и есть, ткните носом если так).
В целом как я понял в большинстве случаев приложения на angular либо весят мало, либо никого не парит такие штуки (все же очень небольшой процент разработчиков пишут жирные приложения на angularjs не под гибриды к примеру а именно под web).
можно реализовать ленивую подгрузку с помощью resolve в роутере, но у меня не получилось красиво описывать зависимости и приходилось на каждый роут писать руками все что нужно ему и всем его зависимостям.
я не вижу смысла грузить отдельные контроллеры. Они не должны быть сильно жирными по хорошему. Имеет смысл догружать скоупом модули отдельные. Но в целом конечно же от задачи зависит.
Ангуляр жесткий и поэтому любой шаг в сторону будет костылем. Выше было заявление, что в рантайме не загрузить директиву или сервис, ссылка это опровергает.
Смысла грузить в резолве я тоже не вижу. Чаще бывает необходимость догрузить на лету что-то.
$compileProvider можно дергать только на этапе конфигурации, регистрация директив происходит через него. То есть чисто теоритически можно в config сохранить ссылку на $compileProvider и после попытаться добавить директиву, но не уверен будут ли проблемы с этим.
Совершенно непонятен профит от такого уродования кода (лишний код + лишняя вложеность). В продакшене это бессмысленно, так как пока все файлы не загрузятся, приложение не стартанет.
В маленьком проекте достаточно соблюдать гайд по структуре, чтобы настроить сборщик (grunt, gulp, etc) для правильной сборки зависимостей. В большом проекте к этому стоит добавить жесткий стайлгайд касаемо описания моделуей (можно вытягивать зависимости из кода во время сборки).
Интереснее было бы посмотреть на подгрузку зависимостей на лету по требованию. Пока лучшее, что я нашел –ocLazyLoad. И он далеко не идеален.
Кто нибудь занимался настройкой подгрузки кода во время исполнения?
Использование RequireJS в приложениях AngularJS