Какова цель дифференциальной загрузки в CLI?
Дифференциальная загрузка (Differential Loading) — это функция Angular, которая позволяет генерировать и использовать разные бандлы JavaScript для различных версий браузеров. Это особенность, которая значительно улучшает производительность, так как позволяет загружать более легкие и современные бандлы для современных браузеров, в то время как старые браузеры получают более полные или настраиваемые версии.
Зачем это нужно?
С каждым годом браузеры становятся более производительными и поддерживают все больше новых функций и стандартов. Однако, по-прежнему существует множество пользователей, использующих старые версии браузеров, которые не поддерживают современные возможности.
При использовании дифференциальной загрузки Angular, вы можете:
Как это работает?
В Angular CLI, когда вы создаете новое приложение с помощью команды ng new
, по умолчанию включена поддержка дифференциальной загрузки. В результате Angular CLI настраивает два бандла для вашего приложения:
- Один бандл для современных браузеров.
- Второй бандл для старых браузеров.
Пример настройки
Вы можете посмотреть, как это выглядит в файлe angular.json
вашего приложения. В разделе "build"
у вас будут настройки optimization
, fileReplacements
, и многое другое. Вот пример фрагмента конфигурации:
"projects": {
"my-app": {
"architect": {
"build": {
"options": {
"outputHashing": "all",
"sourceMap": true,
"optimization": true,
"scripts": [],
"styles": []
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": {
"scripts": true,
"styles": true
},
"budgets": [
{
"type": "initial",
"maximumWarning": "2kb",
"maximumError": "5kb"
}
]
}
}
}
}
}
}
При сборке проекта для продакшн среды (ng build --prod
), Angular CLI создаст два файла:
main-es5.js
- для поддержки старых браузеров (ES5).main-es2015.js
- для современных браузеров (ES2015+).Как дифференциальная загрузка работает на практике?
Когда ваше приложение загружается, браузер ссылается на index.html
, и в зависимости от того, какой браузер использует пользователь, ему будет предоставлен соответствующий бандл:
<body>
<script src="main-es2015.js" nomodule></script>
<script src="main-es5.js"></script>
</body>
nomodule
атрибут указывает на то, что скриптmain-es2015.js
будет загружен только в браузерах, которые поддерживают ES2015.- Браузеры, которые не поддерживают ES2015, проигнорируют этот скрипт, и вместо этого будет загружен
main-es5.js
.
Заключение
Дифференциальная загрузка в Angular позволяет создавать более эффективные приложения, оптимизируя их под разные версии браузеров. Это особенно важно в современном веб-разработке, где пользователи могут использовать разные платформы и устройства. Используя эту функцию, вы можете значительно улучшить производительность своих приложений и улучшить пользовательский опыт.