Изображения являются неотъемлемой частью современного веб-дизайна, но они также могут существенно замедлять время загрузки страницы. Чтобы решить эту проблему, Angular предоставляет директиву NgOptimizedImage, мощный инструмент, который обеспечивает соблюдение лучших практик и повышает производительность загрузки изображений. В этой статье мы рассмотрим функции и использование директивы NgOptimizedImage для оптимизации загрузки изображений в приложениях Angular.
Понимание директивы NgOptimizedImage
Директива NgOptimizedImage предназначена для определения приоритета загрузки изображения с наибольшей отрисовкой содержимого (LCP), что повышает общую производительность. Рассмотрим подробнее его свойства и функциональность:
Селекторы
Директива применяется к элементам img
с помощью следующего селектора:
img[ngSrc]
Характеристики
Директива NgOptimizedImage предоставляет несколько свойств для настройки поведения загрузки изображения. Давайте подробно рассмотрим каждое свойство:
- ngSrc: это свойство указывает имя исходного изображения. Загрузчик изображения обрабатывает имя изображения, а конечный URL применяется как свойство
src
элементаimg
. - ngSrcset: это свойство принимает разделенный запятыми список дескрипторов ширины или плотности. Имя изображения из
ngSrc
объединяется со списком дескрипторов для создания свойстваsrcset
элементаimg
. Это свойство включает адаптивные изображения. - размеры: свойство
sizes
используется для передачи атрибута базовых размеров элементуimg
, что позволяет автоматически создавать отзывчивыеsrcset
. - ширина и высота: эти свойства определяют внутренние размеры изображения. Для адаптивных изображений они представляют внутреннюю ширину и высоту в пикселях. Для изображений фиксированного размера они указывают желаемую визуализируемую ширину и высоту в пикселях.
- загрузка: Это свойство управляет поведением загрузки изображения. Он может быть установлен на
'lazy'
,'eager'
или'auto'
. Установка изображений какloading='eager'
илиloading='auto'
помечает их как неприоритетные изображения, в то время как'lazy'
загрузка откладывает загрузку до тех пор, пока изображение не будет отображено. Рекомендуется избегать изменения этого входа для приоритетных изображений. - приоритет: установка для свойства
priority
значенияtrue
указывает, что изображение должно иметь высокий приоритет во время загрузки. - loaderParams: это свойство позволяет передавать пользовательские данные в пользовательские загрузчики.
- disableOptimizedSrcset: включение этого свойства отключает автоматическое создание
srcset
для изображения. - fill: это свойство, помеченное как DEVELOPER PREVIEW, включает «режим заливки» для изображения. В этом режиме изображение заполняет содержащий его элемент, не требуя явных значений высоты и ширины.
Функциональность
Директива NgOptimizedImage предлагает несколько функций для повышения производительности загрузки изображений:
- Автоматически устанавливает атрибут
fetchpriority
в тегеimg
для определения приоритета загрузки изображения с наибольшей отрисовкой содержимого (LCP). - Lazy по умолчанию загружает неприоритетные изображения.
- Утверждает наличие соответствующего тега ссылки
preconnect
в заголовке документа. - Создает соответствующие URL-адреса активов, если предоставляется соответствующая функция
ImageLoader
. - Автоматически генерирует
srcset
на основе предоставленных дескрипторов. - Требует установки свойств
width
иheight
и предупреждает, если они неверны или могут вызвать визуальное искажение при рендеринге.
Реализация директивы NgOptimizedImage
Чтобы использовать преимущества директивы NgOptimizedImage в вашем приложении Angular, выполните следующие действия:
Шаг 1. Импортируйте директиву NgOptimizedImage.
Начните с импорта директивы NgOptimizedImage в необходимый NgModule или автономный компонент:
import { NgOptimizedImage } from '@angular/common'; // Include it in the necessary NgModule @NgModule({ imports: [NgOptimizedImage], }) class AppModule {} // ... or a standalone Component @Component({ standalone: true, imports: [NgOptimizedImage], }) class MyStandaloneComponent {}
Шаг 2: Настройте загрузчик
Чтобы использовать загрузчик по умолчанию, никаких дополнительных изменений кода не требуется. URL-адрес, возвращаемый универсальным загрузчиком, всегда будет соответствовать значению src
. Другими словами, загрузчик по умолчанию не применяет никаких преобразований к URL-адресу ресурса, а значение атрибута ngSrc
используется как есть.
Если вы хотите использовать существующий загрузчик для стороннего сервиса изображений, добавьте фабрику провайдеров для выбранного сервиса в массив провайдеров. Например, чтобы использовать загрузчик Imgix:
import { provideImgixLoader } from '@angular/common'; // Call the function and add the result to the `providers` array: providers: [ provideImgixLoader("https://my.base.url/"), ],
Директива NgOptimizedImage также предоставляет функции для определенных поставщиков изображений, таких как provideCloudflareLoader
, provideCloudinaryLoader
, provideImageKitLoader
и provideImgixLoader
. Если вы используете другого поставщика изображений, вы можете создать собственную функцию загрузчика.
Чтобы использовать собственный загрузчик, укажите свою функцию загрузчика в качестве значения токена внедрения зависимостей (DI) IMAGE_LOADER
:
import { IMAGE_LOADER, ImageLoaderConfig } from '@angular/common'; // Configure the loader using the `IMAGE_LOADER` token. providers: [ { provide: IMAGE_LOADER, useValue: (config: ImageLoaderConfig) => { return `https://example.com/${config.src}-${config.width}.jpg}`; }, }, ],
Шаг 3. Обновите теги img
в шаблонах
Наконец, обновите теги <img>
в своих шаблонах, чтобы использовать свойство ngSrc
вместо атрибута src
:
<img ngSrc="logo.png" width="200" height="100">
Используя ngSrc
, директива получает контроль над установкой атрибута src
, запуская загрузку изображений в оптимальное время.
Заключение
Директива NgOptimizedImage — ценный инструмент для повышения производительности загрузки изображений в приложениях Angular. Следуя шагам, описанным в этой статье, вы сможете легко внедрить директиву и обеспечить соблюдение рекомендаций по загрузке изображений. Используя такие функции, как автоматическая генерация srcset
, отложенная загрузка и обработка приоритетов, NgOptimizedImage позволяет оптимизировать взаимодействие с пользователем вашего веб-приложения, гарантируя эффективную загрузку изображений.
Не забудьте учесть конкретные требования вашего приложения и выбрать подходящий загрузчик изображений или создать собственный загрузчик для интеграции с предпочитаемой вами службой размещения изображений. С NgOptimizedImage вы можете найти правильный баланс между производительностью и визуальным качеством, предоставляя своим пользователям исключительное удобство загрузки изображений.