Использование AOT и JIT в производстве в приложении Angular 9

Итак, я разрабатываю приложение Angular 9, в котором есть панель управления клиентами для управления их шаблонами, которые сохраняются на сервере. Эти шаблоны можно просматривать на разных устройствах через систему активации, поэтому устройства привязаны к пользователю.

Допустим, на https://templates.com у нас есть /login, /dashboards, /manage с дополнительными путями для просмотра и редактирования данных. На этом URL-адресе у нас также есть /:companyName по этому пути, он запрашивает шаблон, который содержит html со строками интерполяции, а также css, который будет загружен на лету.

До сих пор мне удавалось добиться этого благодаря сообщению alarm9k.

Единственная проблема, которая возникает с этим решением, заключается в том, что при создании приложения вы не можете использовать ng build --prod, потому что использование --prod не будет работать, поскольку компилятор angular не включен в AOT, поэтому вы застряли в JIT.

Это приведет к гораздо большему размеру приложения, в моем случае размер составляет почти 42 МБ. Поэтому я хотел бы уменьшить размер файла, так как это сильно влияет на задержку приложения. Я просматривал статистику приложения, и банкомат имеет задержку http p95 1,2 секунды и среднюю задержку http 340 мс.

При использовании различных тестов скорости веб-сайта выберите Великобританию, откуда должен выполняться тест. Я получаю значения времени загрузки примерно от 600 до 900 мс. При проверке нескольких местоположений это дало мне среднее время загрузки 5 секунд.

Вопрос:

Поэтому я хотел бы знать, есть ли способ разделить приложение на 2, где одно находится в режиме AOT, а другое - в режиме JIT, безопасно ли хранить часть в режиме JIT и если это сведет к минимуму приложение или нет.

Если это невозможно, я хотел бы знать, как лучше всего свернуть это приложение и как это можно сделать.

Или если есть способ, по крайней мере, сделать приложение более безопасным, так как весь код можно просмотреть в браузере в режиме JIT.

РЕДАКТИРОВАТЬ 1:

Я забыл упомянуть, что в моем случае я использую socket.js для системы активации, поэтому информационные панели и шаблоны в некоторой степени связаны. Таким образом, при переходе к /:companyname устройство не было подключено до того, как оно автоматически переходит к /activate, где генерирует код и прослушивает, вводит ли пользователь этот код, чтобы подключить устройство к учетной записи пользователя.

РЕДАКТИРОВАТЬ 2:

Я читал, что ivy можно использовать для загрузки компонентов на лету, чтобы можно было по-прежнему работать в AOT и без компилятора. Можно ли это сделать, и если да, то как этого добиться?


person Billy Cottrell    schedule 18.03.2020    source источник