Изображения составляют большую часть многих приложений и могут быть основной причиной проблем с производительностью, включая низкие показатели Core Web Vitals.
Оптимизация изображений может быть сложной темой, но Angular берет большую часть работы на себя с помощью директивы
NgOptimizedImage.
ПРИМЕЧАНИЕ: Узнайте больше об оптимизации изображений с помощью NgOptimizedImage в подробном руководстве.
В этом упражнении вы узнаете, как использовать NgOptimizedImage для обеспечения эффективной загрузки изображений.
-
Import the NgOptimizedImage directive
Чтобы использовать директиву
NgOptimizedImage, сначала импортируйте её из библиотеки@angular/commonи добавьте в массивimportsкомпонента.import { NgOptimizedImage } from '@angular/common'; @Component({ imports: [NgOptimizedImage], ... }) -
Update the src attribute to be ngSrc
Чтобы включить директиву
NgOptimizedImage, замените атрибутsrcнаngSrc. Это относится как к статическим источникам изображений (т.е.src), так и к динамическим (т.е.[src]).import { NgOptimizedImage } from '@angular/common'; @Component({ template: ` ... <li> Static Image: <img ngSrc="/assets/logo.svg" alt="Angular logo" width="32" height="32" /> </li> <li> Dynamic Image: <img [ngSrc]="logoUrl" [alt]="logoAlt" width="32" height="32" /> </li> ... `, imports: [NgOptimizedImage], }) -
Add width and height attributes
Обратите внимание, что в приведенном выше примере кода у каждого изображения есть атрибуты
widthиheight. Чтобы предотвратить сдвиг макета, директиваNgOptimizedImageтребует наличия обоих атрибутов размера для каждого изображения.В ситуациях, когда вы не можете или не хотите указывать статические
heightиwidthдля изображений, вы можете использовать атрибутfill, чтобы изображение вело себя как "фоновое изображение", заполняя содержащий его элемент:<div class="image-container"> //Container div has 'position: "relative"' <img ngSrc="www.example.com/image.png" fill /> </div>ПРИМЕЧАНИЕ: Чтобы изображение с
fillотображалось правильно, его родительский элемент должен иметь стильposition: "relative",position: "fixed"илиposition: "absolute". -
Prioritize important images
Одной из самых важных оптимизаций для производительности загрузки является приоритезация любого изображения, которое может быть "элементом LCP" (самым большим графическим элементом на экране при загрузке страницы). Чтобы оптимизировать время загрузки, обязательно добавьте атрибут
priorityк вашему "hero image" ( главному изображению) или любым другим изображениям, которые, по вашему мнению, могут быть элементом LCP.<img ngSrc="www.example.com/image.png" height="600" width="800" priority /> -
Optional: Use an image loader
NgOptimizedImageпозволяет указать загрузчик изображений, который сообщает директиве, как форматировать URL-адреса для ваших изображений. Использование загрузчика позволяет определять изображения с помощью коротких относительных URL-адресов:providers: [ provideImgixLoader('https://my.base.url/'), ]Итоговый URL будет 'https://my.base.url/image.png'
<img ngSrc="image.png" height="600" width="800" />Загрузчики изображений нужны не только для удобства — они позволяют использовать все возможности
NgOptimizedImage. Узнайте больше об этих оптимизациях и встроенных загрузчиках для популярных CDN здесь.
Добавив эту директиву в свой рабочий процесс, вы обеспечите загрузку изображений с использованием лучших практик с помощью Angular 🎉
Если вы хотите узнать больше, ознакомьтесь с документацией по NgOptimizedImage.
Продолжайте в том же духе, и давайте перейдем к изучению маршрутизации.