Крупные корпоративные приложения часто включают в себя миллионы строк кода и предлагают деление на отдельные пакеты. В зависимости от разграничения прав пользователей на отдельные пакеты, у пользователя либо есть права на работу с данным пакетом либо нет. По умолчанию приложение собирается в один app.js файл, который включает в себя все пакеты указанные в секции requires в app.json . Это означает что для тех пользователей которые не имеют прав на пакет, он все равно будет загружен, такой вот overhead. Лучший подход это использовать динамически загружаемые пакеты.
В сmd 6.5 добавилась поддержка динамической загрузки пакетов, которая позволяет серьезно улучшить время запуска приложения. Разработчик может реализовывать логику которая загружает пакеты по требованию — с любыми необходимыми зависимостями и условиями. Например, если у пользователя есть необходимые права на модуль, то он будет загружен.
Динамическая загрузка пакетов
Для примера создадим тестовый пакет NewDevCard
sencha generate package NewDevCard
Сделаем данный пакет динамически загружаемым, для этого добавим секцию uses в app.json.
"uses": [ "NewDevCard" ]
И добавим использование загрузчика пакетов, для этого добавим в секцию requires package-loader в app.json. Данный пакет является remote, и сам скачается при сборке приложения из официального репозитория Sencha.
"requires": [ "package-loader" ]
Теперь мы можем использовать метод Ext.Package.load()
который загрузит указанный пакет.
// После необходимых проверок мы можем загрузить пакет Ext.Package.load(pkg_name).then(function(pkg) { // Пакет загружен });
Обратите внимание, что в cmd теперь необходимо использовать флаг -uses
sencha app build -uses production sencha app watch -uses
Пример приложения использующего package-loader можно тут.
Спасибо за статью!