Tìm hiểu Lazy loading là gì?
Lưu ý
Thành phần ảnh và video trên website thường chiếm một lượng dữ liệu tải về lớn. Không may là các bên liên quan đến dự án có thể không thích cắt giảm bất cứ tài nguyên media (đa phương tiện) nào từ các ứng dụng đã có của họ.
Tình huống bế tắc như vậy gây bực bội, đặc biệt khi tất cả mọi người đều muốn cải thiện hiệu suất và tốc độ, nhưng lại không đồng thuận về cách để đạt được điều đó. May thay, lazy loading là giải pháp giúp bạn có được dung lượng trang cần phải tải lần đầu (initial page payload)* thấp và thời gian tải lần đầu ngắn hơn, nhưng không bắt bạn phải cắt bỏ nội dung.
Tại sao lại cần Lazy Loading ảnh hoặc video mà không tải chúng luôn cho rồi?
Sau khi đã hiểu Lazy Loading là gì. Nhưng có lẽ bạn thắc mắc tại sao không tải ảnh luôn mà cần dùng tới Lazy Loading. Bởi vì có khả năng là bạn đang tải về các thành phần trên trang mà người dùng có thể không bao giờ nhìn đến. Điều này là vấn đề vì hai lý do sau:
- Nó là sự lãng phí dữ liệu. Trên các kiểu kết nối băng thông không giới hạn (unmetered), điều tồi tệ nhất có thể vẫn chưa xảy ra đâu (dù bạn có thể sử dụng lượng băng thông quý giá này để ưu tiên tải các tài nguyên khác mà người dùng thực sự sẽ nhìn thấy). Trên các gói giới hạn dữ liệu, tải các thành phần người dùng không bao giờ nhìn đến có thể làm lãng phí tiền của họ.
- Nó làm lãng phí thời gian xử lý, pin và các tài nguyên hệ thống khác. Sau khi một tài nguyên đa phương tiện (media) được tải về, trình duyệt phải giải mã (decode) và kết xuất (render) nội dung của nó trong khung nhìn trình duyệt.
Lazy loading ảnh
Image is critical
DevTools report sự kiện load (hay onload) được khởi tạo ở 335ms. Như vậy, sự kiện load đã bị block bởi “awesome-photo.jpg”.
Bạn có thể tưởng tượng là với ví dụ đơn giản trên thì không ảnh hưởng gì đến trải nghiệm của người dùng cả vì trang web sẽ rất nhanh được hiển thị. Tuy nhiên, nếu trang web có 10, 20, … 100 ảnh thì sao. Không khó để đoán là thời gian chờ sẽ càng ngày càng lâu.
Theo báo cáo của HTTP Archive (tại thời điểm 27/Jul/2020), trung bình 1 trang web trên desktop có dung lượng 1999.9 KB. Trong khi, trung bình 1 trang web trên desktop có dung lượng ảnh là 947.1 KB chiếm khoảng 47,35 %. Chúng ta không thể làm ngơ các vấn đề liên quan đến Ảnh, nó quá quan trọng đối với trải nghiệm của người dùng.
Kỹ thuật đối với Ảnh của Lazy Loading là gì?
Cơ bản, khi khai báo 1 thành phần ảnh chúng ta làm như sau:
Vậy muốn ứng dụng lazy loading cho.thành phần này thì chúng ta thêm thuộc tính loading với giá trị lazy:
Dưới đây là các giá trị được hỗ trợ cho thuộc loading:
- auto: Giá trị mặc định phụ thuộc vào hành vi của từng trình duyệt,.tương tự với việc không thêm thuộc tính loading vào.
- lazy: Trì hoãn tải tài nguyên về cho đến khi đạt 1 khoảng cách nào đó từ khung nhìn.
- eager: Tải tài nguyên ngay lập tức, bất kể vị trí của nó trên trang.
Theo trang Can I Use thì thuộc tính loading đã được đa số các trình duyệt implement rồi. Bạn có thể yên tâm sử dụng.
Vậy còn đối với các trình duyệt chưa hỗ trợ thì làm sao. Bạn có thể tạo 1 polyfill hoặc.dùng thư viện của bên thứ 3 như LazySizes. Thuộc tính loading có thể dùng để phát.hiện xem trình duyệt có hỗ trợ tính năng này hay không:
LazySizes
- Bước 1: thêm link đến CDN chứa LazySizes:
hoặc bạn có thể tải về web server & để link trực tiếp trên server:
- Bước 2: thêm class lazyload vào ảnh với thuộc tính data-src hoặc data-srcset:
Lưu ý: LazySizes không cần bất kỳ cấu hình bằng JavaScript nào.
Tránh sử dụng lazy loading cho ảnh trong khung nhìn đầu tiên
Bạn chỉ nên thêm lazy loading cho các ảnh ở bên dưới khung hiển thị đầu tiên. Các hình ảnh với thuộc tính eager được tải ngay lập tức bất kể vị trí trên trang. Trong khi các hình ảnh với thuộc tính loading thì trình duyệt cần phải đợi cho đến khi biết được vị trí của hình ảnh trên trang dựa trên IntersectionObserver. Nói chung, bất kỳ hình ảnh nào trong khung nhìn cần được trình duyệt tải ngay 1 cách mặc định. Bạn không cần chỉ định thuộc tính loading=eager cho những trường hợp ảnh trong khung nhìn.
Testing lazy loading là gì?
Việc các trình duyệt đã hỗ trợ chính thức (native) lazy loading có thể giúp bạn dễ dàng cải thiện trang web của mình hơn. Nếu bạn nhận thấy bất kỳ behavior nào không bình thường của tính năng lazy loading trên Google Chrome thì bạn có thể thông báo tại đây. Hy vọng bạn sẽ có tư duy sử dụng lazy loading ngay từ khi develop trang web.
Liên hệ với SEMTEK để tháo nút thắt cho website của bạn bằng giải pháp về Marketing!
SEMTEK Co,.LTD
🏡 Địa chỉ: 2N Cư Xá Phú Lâm D, Phường 10, Quận 6, TP.HCM
📧 Email: info@semtek.com.vn
☎️ Hotline: (+84)098.300.9285
Tìm hiểu liên quan
- lazy loading example
- lazy loading angular
- imagekit lazy loading
- how lazy loading works
- lazy loading react
- lazy loading github
- lazy loading là gì
- lazy loading html
- Nên mua hosting của công ty nào để có chất lượng tốt nhất?
- Nơi mua/thuê máy chủ giá rẻ cho Website ở đâu tốt và chất lượng
- Các yếu tố để xác định được nên dùng hosting nào