- vừa được xem lúc

Thành phần Image trong Next.js: Giải pháp cho hiện tượng Layout Shift

0 0 1

Người đăng: Gung Typical

Theo Viblo Asia

Bạn đã bao giờ gặp tình huống đang đọc dở thì nội dung trang web bất ngờ nhảy loạn xạ vì ảnh tải xong chưa? Vấn đề thường gặp này, gọi là Cumulative Layout Shift (CLS), ảnh hưởng tiêu cực đến trải nghiệm người dùng và SEO.

Chuyển đổi bố cục tích lũy (CLS) là gì?

CLS là một chỉ số Core Web Vital, đo lường mức độ thay đổi bố cục bất ngờ xảy ra khi tải trang. Một điểm CLS tốt rất quan trọng vì nó đồng nghĩa với trải nghiệm người dùng tốt hơn, thứ hạng SEO cao hơn và một trang web trông chuyên nghiệp hơn.

Vấn đề với thẻ <img> chuẩn

Thông thường, việc sử dụng thẻ <img> truyền thống của HTML có thể dẫn đến hiện tượng layout shift. Nguyên nhân là do trình duyệt không biết kích thước ảnh cho đến khi tải xong.

Văn bản trang tải trước, sau đó ảnh bắt đầu tải xuống. Cuối cùng, khi ảnh được tải xong, nó đẩy nội dung xuống dưới, gây ra hiện tượng “nhảy” khó chịu.

Vị cứu tinh: Thành phần Image trong Next.js

Để giải quyết vấn đề này, Next.js cung cấp thành phần Image, cho phép chỉ định kích thước ảnh trước, giúp trình duyệt dành sẵn không gian để tải ảnh mà không ảnh hưởng đến bố cục.

// Good Practice
import Image from 'next/image'; function ProductCard() { return ( <Image src="/product.jpg" alt="Product description" width={640} height={480} priority={false} loading="lazy" /> );
}

Các tính năng chính ngăn chặn sự thay đổi bố cục

1. Kích thước bắt buộc

Việc đặt thuộc tính width và height là bắt buộc, giúp dành sẵn không gian cho ảnh ngay cả trước khi tải, ngăn chặn layout shift.

2. Responsive Sizing

Thành phần này cũng tự động điều chỉnh theo kích thước màn hình, duy trì tỷ lệ khung hình của ảnh, tránh layout shift trên các thiết bị khác nhau.

3. Placeholder tự động

Một tính năng nổi bật khác của thành phần Image là khả năng sử dụng placeholder mờ, chiếm giữ đúng không gian cần thiết. Điều này giúp bố cục ổn định trong khi ảnh tải, mang lại trải nghiệm mượt mà hơn.

Best practice khi sử dụng thành phần Image trong Next.js

Thực hiện theo các thực hành này sẽ giúp bạn tận dụng tối đa thành phần Image trong Next.js.

1. Luôn đặt kích thước:

Việc xác định kích thước giúp trình duyệt biết chính xác không gian mà hình ảnh sẽ chiếm, tránh thay đổi bố cục.

 // Good <Image src="/hero.jpg" width={1200} height={600} alt="Hero image" /> // Bad (missing dimensions) <Image src="/hero.jpg" alt="Hero image" />

2. Sử dụng placeholder làm mờ cho hình ảnh quan trọng

Thêm placeholder làm mờ cho hình ảnh phía trên sẽ mang lại hiệu ứng tải mượt mà

 <Image src="/hero.jpg" width={1200} height={600} alt="Hero image" placeholder="blur" />

3. Đặt mức độ ưu tiên cho hình ảnh quan trọng

Đối với hình ảnh nổi bật hoặc hình ảnh quan trọng khác, hãy đặt thuộc tính priority thành true để tải nhanh hơn.

 <Image src="/hero.jpg" width={1200} height={600} alt="Hero image" priority />

Tránh một số lỗi thường gặp

1. Đừng bỏ qua văn bản thay thế

Văn bản thay thế rất cần thiết cho khả năng truy cập, giúp trình đọc màn hình có thể truy cập hình ảnh của bạn.

 // Bad <Image src="/product.jpg" width={400} height={300} /> // Good <Image src="/product.jpg" width={400} height={300} alt="Red ceramic coffee mug with floral pattern" />

2. Xử lý URL hình ảnh bên ngoài một cách cẩn thận

Nếu bạn đang sử dụng hình ảnh từ nguồn bên ngoài, hãy định cấu hình tên miền trong next.config.js:

 module.exports = { images: { domains: ['example.com'], }, };

Để kiểm tra sự cải thiện CLS, bạn có thể sử dụng các công cụ như Chrome DevTools (tab Performance), Lighthouse Audits và Core Web Vitals trong Google Search Console.

Việc sử dụng thành phần Image của Next.js cùng với việc tuân thủ các phương pháp tốt nhất này sẽ đảm bảo quá trình tải mượt mà, bố cục ổn định và trải nghiệm trang web chuyên nghiệp hơn.

Cảm ơn các bạn đã theo dõi!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Viết một chiếc app quản lý Hạn sử dụng của thực phẩm

Mở đầu. Tôi là 1 kỹ sư công nghệ thông tin mới ra trường. Trong thời gian học Đại học, từ năm 1 tới năm 4, tôi đi làm thêm tại TSUTAYA (chuỗi cửa hàng bán sách, video...v.v nổi tiếng bên Nhật). Về chiếc App tôi đã phát triển. App tôi phát triển là Web App giúp quản lý hạn sử dụng của đồ ăn.

0 0 52

- vừa được xem lúc

Routing trong Next.js

Trước đó bạn có thể đang tò mò về Next.js, vào đây luôn bạn ơi. (go). .

1 0 56

- vừa được xem lúc

Cài đặt chuyển đổi ngôn ngữ trong một project NextJS

Ở phiên bản Nextjs Version 10 mới đây, việc sử dụng i18n đã trở nên dễ dàng hơn qua tính nâng cao là Internationalized Routing. Cài đặt cấu hình cơ bản. Tại file next.config.

0 0 73

- vừa được xem lúc

Cấu hình eslint airbnb, prettier cho dự next.js sử dụng typescript

Chào mọi, mình đã quay lại đây. Hôm nay mình sẽ đem đến một chủ đề linter cụ thể cấu hình eslint cho dự án next.

0 0 194

- vừa được xem lúc

Handling custom page navigation on Next.js

Last month we discussed about different kind of routing on Next.js. Here's a short example of creating a component that moves the user to next page. import { useRouter } from 'next/router'.

0 0 87

- vừa được xem lúc

Next Image một feature, một nâng cấp tuyệt vời version nextjs 10

NextJS đã cho ra mắt version 10 cách đây 2 tháng với hơn 20 fearture nâng cấp đáng giá. Chúng ta có thể kể ra những features nổi bật như. . Next/Image: với khẳ năng render image cho các kích thước màn hình tương ứng.

0 0 62