Как стать автором
Обновить

Использование директивы NgOptimizedImage для реализации загрузки изображений в Angular

Время на прочтение2 мин
Количество просмотров4.3K
Автор оригинала: Netanel Basal

Директива NgOptimizedImage в Angular отвечает за реализацию загрузки изображений, сохраняя высокую производительность. Она доступна в Angular v14.2.0. Директива помечена как standalone и может быть импортирована в standalone компоненты и модули.

Чтобы ее использовать, мы должны заменить атрибут src Вашего изображения на rawSrc:

import { NgOptimizedImage } from '@angular/common';

@Component({
  standalone: true,
  imports: [NgOptimizedImage],
  template: `
    <!-- видимая область страницы -->
    <img rawSrc="https://picsum.photos/200/300" width="200" height="300" priority />
    
    <!-- ниже видимой области страницы -->
    <img rawSrc="https://picsum.photos/300/300" 
        style="margin-top: 300vh" 
        width="300" 
        height="300" />`,
})
export class LoginPageComponent {}

Директива предоставит нам следующие преимущества LCP(Скорость загрузки основного контента):

  • Атрибут loading для изображений ниже видимой области страницы будет установлен на lazy, в то время как атрибут loading для изображений в видимой области страницы будет eager.

  • Она гарантирует приоритетность для изображений в видимой области страницы. Это значит, что будет установлено значение high для атрибута fetchpriority. Значение по умолчанию — default.

  • Она гарантирует, что изображения в видимой области страницы будут иметь соответствующий тег preconnect.

<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <title>MyNgApp</title>
  <base href="/">
  <!-- ?? ?? ?? ?? ?? ?? -->
  <link rel="preconnect" href="https://picsum.photos">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>

<body>
  <app-root></app-root>
</body>

</html>
  • Она гарантирует, что ширина и высота будут установлены таким образом, чтобы предотвращались сдвиги макета.

Слово «гарантирует» означает, что директива предупредит  Вас, если это не так.

Загрузчики изображений

Загрузчик — это функция, которая генерирует соответствующий URL-адрес ресурса для данного файла изображения. Загрузчик по умолчанию возвращает src, который мы передаем для rawSrc. Также Angular предоставляет различные загрузчики для сторонних сервисов изображений:

  • Cloudflare Image Resizing

  • Сloudinary

  • ImageKit

  • Imgix

Чтобы их использовать, мы должны передать фабрику провайдеров для выбранного сервиса в массив провайдеров:

import { NgOptimizedImage, provideImgixLoader } from '@angular/common';

NgModule({
  providers: [
    provideImgixLoader("https://my.base.url/", {
      ensurePreconnect: boolean
    })
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

Мы можем создать собственный загрузчик, переопределив провайдер IMAGE_LOADER:

import { ImageLoaderConfig, IMAGE_LOADER, NgOptimizedImage } from '@angular/common';

@NgModule({
  providers: [{ 
    provide: IMAGE_LOADER, 
    useValue: (config: ImageLoaderConfig) => { 
      return `https://example.com/images?src=${config.src}&width=${config.width}` } 
    }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

Дополнительная информация про API:

Теги:
Хабы:
Всего голосов 9: ↑9 и ↓0+9
Комментарии0

Публикации

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн