Lazy loading là gì?
Lazy loading được xem là một trong những kỹ thuật giúp tối ưu khi thiết kế website. Bất kỳ một người thiết kế web nào cũng đều biết về sự cần thiết của kỹ thuật này.
Gofiber là công ty công nghệ cung cấp dịch vụ máy chủ và cho thuê VPS hàng đầu tại Việt Nam. Giải pháp máy chủ điện toán đám mây (cloud server/cloud VPS) của Gofiber được xây dựng trên nền tảng công nghệ ảo hóa tiên tiến KVM cùng hệ thống hạ tầng mạnh mẽ, Nhiều Data Center, Hỗ trợ đa dạng hệ điều hành, VPS KVM tối ưu hóa cho hiệu năng cao, Miễn phí DirectAdmin chính hãng, VPS SSD - ổ cứng SSD Enterprise hiệu năng đọc ghi cao.
Khái niệm về lazy loading
Về cơ bản, Lazy loading là việc load dữ liệu khi người dùng cần đến chúng. Thay vì chúng ta phải tải toàn bộ trang web và render nội dung ngay từ đầu thì người thiết kế chỉ cần tải các phần cần thiết hiển thị đến cho người dùng.
Ví dụ, nhiều người đang vào 1 page nào đó, nhưng chẳng kéo xuống đến tận cuối trang và xem toàn bộ nội dung. Thế thì những nội dung họ chưa xem đó thì cần gì phải load đúng không nào? Thế thì, lúc này ta nên dùng scroll thì sẽ load dữ liệu trang đến đó. Lazy loadingcó thể áp dụng cho mọi resource trên cùng 1 page. Thậm chí là cả file JavaScripy.
Bản chất lazy loading Images
Thông thường, sẽ có 2 cách để load Image trên cùng 1 page. Đó là cách sử dụng thẻ và sử dụng thuộc tính background image từ CSS.
- Lazy loading Images thông qua thẻ Img: thẻ <img/> có định dạng cơ bản là < img src=”/path/to/some/image.jpg” /> . Khi đó, trình duyệt đọc src attribute để trigger để đến tải ảnh. Vì thế, bạn phải move link image qua một attribute khác. Cách này sẽ giúp ngăn chặn việc ảnh được tải lên. Sau khi bạn ngăn được load Images thì phải thông báo cho trình duyệt biết khi nào cần load Images lên. Lúc đó, hãy dùng Javascript để lấy sự kiện của người dùng. Cuối cùng là bạn add link từ dât src vào attr src.
- Lazy loading Images dựa vào thuộc tính của background image: đối với background image, trình duyệt sẽ tạo cây DOM kèm với CSSDOM. Sau đó nó sẽ check kiểu CSS có áp dụng nút DOM hiện tại được không. Nếu như DOM có background image thì load image sẽ được trình duyệt load. Src attr cũng tương tự, trước hết bạn sẽ phải set DOM có giá trị background image: none. Sau đó, bạn change những giá trị cần thiết.
Những ứng dụng của lazy loading
Trong lập trình, lazy loading được sử dụng một cách rất rộng rãi. Nhất là khi chúng ta thiết kế website. Trang Wordpress sẽ cung cấp một giải pháp cho người dùng bằng cách dựa trên lazy loading tên Infinite Scroll. Nó sẽ hỗ trợ người dùng sử dụng con lăn cùng chuột máy tính. Nhờ đó, bạn sẽ đọc thêm nội dung mới bằng cách di chuyển xuống dưới. Phần bạn di chuyển đến đâu thì nội dung mới sẽ load đến đó.
Google khi tiếp cận với lazy loading sẽ theo hướng cụ thể là các mục tìm kiếm hình ảnh. Trình duyệt Google sẽ cho một danh sách 4 - 5 hình liên quan sau khi xem một hình bất kỳ. Bên cạnh đó sẽ là nút "View More" để có thể xem được nhiều hình ảnh hơn.
» Xem thêm: UTM tracking là gì và cách tạo mã UTM để theo dõi chiến dịch
Vì sao cần sử dụng lazy loading
Vậy điều gì khiến lazy loading lại cần thiết khi xây dựng website đến như vậy? Nếu bạn vẫn chưa rõ về vấn đề này thì hãy theo dõi phần dưới đây:
Tiết kiệm tài nguyên dữ liệu
Khi người thiết kế web không load các resource chưa cần thiết thì các tài nguyên dữ liệu sẽ được tiết kiệm cho CPU, GPU, bộ nhớ hay băng thông. Nhờ đó, các thiết bị di động sẽ không còn bị kết nối chậm nữa. Nhờ kết nối nhanh, nội dung hiện nhanh hơn nên trải nghiệm người dùng tốt hơn.
Không những thế, dữ liệu được giảm tải giúp tốc độ load nhanh hơn còn giúp chi phí được giảm tổng bytes transferred. Những lỗi bị ẩn dữ liệu sẽ được giảm tối đa.
Nâng cao website performance
Nếu như bạn viết code cho 100 tấm ảnh có thẻ img, browser sẽ phải tải toàn bộ số ảnh ấy dù kể cả user có muốn không. Hay các người dùng có scroll và xem toàn bộ hết 100 tấm ảnh đó không. Chính vì thế, lazy loading sẽ hỗ trợ browser tải ít resource đi (cụ thể ở đây là phần hình ảnh).
Cuối cùng là kết quả trả về cho người dùng dữ liệu nhanh hơn. Mà tất nhiên rồi, ai cũng muốn vào một trang web mà tốc độ tải nhanh chóng phải không nào?
Tốc độ tải trang nhanh hơn, giảm lỗi ẩn dữ liệu
Kỹ thuật lazy loading nhìn chung đều hướng đến người dùng có trải nghiệm tốc độ tải trang nhanh hơn. Khi vào một trang web, ai cũng mong muốn chỉ cần mất chưa đến 1 giây là web đã hiện thông tin mình cần tìm kiếm. Khi web hiện nhanh hơn, các lỗi ẩn dữ liệu sẽ ít có nguy cơ xuất hiện trước người dùng.
Tăng điểm đánh giá website
Điểm số của website là điều mà nhiều nhà thiết kế web cực kỳ quan tâm. Một trong những yếu tố đến "điểm" này phải kể đến tốc độ tải trang, lỗi trang và trải nghiệm người dùng. Những điều này đều sẽ được cải thiện phần nào nếu người dùng áp dụng kỹ thuật lazy loading trong thiết kế web. Khi các chỉ số trên được cải thiện, bảng xếp hạng (ranking) của web trên Google search sẽ được cải thiện và nâng cao hơn mức cũ.
Cải thiện trải nghiệm người dùng
Hiện nay, số người dùng sử dụng điện thoại thông minh đã nhiều hơn là trên desktop. Trong khi đó, màn hình điện thoại sẽ không có nhiều "không gian" để website tải hết toàn bộ dữ liệu lên được. Nếu trang có nhiều hình ảnh sẽ làm tốc độ tải trang bị chậm lại. Người dùng sẽ cảm thấy đây là một trang web rất tệ. Cuối cùng là họ sẽ không quay lại nữa.
Nhưng nếu, người thiết kế web áp dụng lazy loading, các vấn đề về chậm tải web sẽ được cải thiện. Trải nghiệm người dùng tốt hơn thì họ sẽ muốn trở lại trang web khi có nhu cầu.
Những lưu ý trong quá trình sử dụng lazy loading
Lazy loading quả là một kỹ thuật cần thiết. Thế nhưng, để người dùng đạt được hiệu quả khi áp dụng kỹ thuật này cũng không phải là điều dễ dàng. Nếu bạn là một nhà thiết kế website mới, chưa có nhiều kinh nghiệm thì nên lưu ý đến một số vấn đề sau:
- Nếu dùng Intersection Observer API để lazy loading hình thì lệnh scr sẽ phải trở thành data-scr. Trong khi đó, Googlebot lại không hiểu data-scr nghĩa là gì.
- Cách sử dụng lazy loading có những nét đặc trưng riêng tùy theo trình duyệt web. Ví dụ, đối với Internet Ex thì bạn buộc phải sử dụng trình duyệt này để lazy loading dữ liệu. Hoặc bạn có thể dùng Polyfill để giả lập Intersection Observer API và tiếp theo là dùng như bình thường.
- Người thiết kế nên tránh lazy loading những hình ảnh ở đầu trang. Nguyên nhân là để tránh tối thiểu layout shift.
- Trước khi bạn dùng lazy loading thì bạn nên chỉ ra chính xác kích thước ảnh sẽ xuất hiện khi người dùng lướt đến ảnh. Cách này sẽ giúp ảnh được tải nhưng không bị xê dịch thông tin trên trang.
Một số kỹ thuật sử dụng lazy loading
Việc sử dụng lazy loading cũng cần có kỹ thuật riêng. Bởi lẽ, nếu chúng ta dùng không cẩn thận thì một số hiện tượng như nhấp nháy các nội dung chưa được tải xuất hiện, lỗi do các dữ liệu khởi lệnh lazy-load không hiện. Để hiểu hơn về kỹ thuật dùng lazy loading, bạn nên hiểu rõ các vấn đề như sau:
Khi nào nên dùng lazy loading?
Người thiết kế nên bắt đầu cân nhắc sử dụng lazy loading khi trang web có quá nhiều dữ liệu cần tải cùng một lúc. Chẳng hạn như hình ảnh, các lệnh thực thi giao diện hoặc chuỗi ký hiệu đặc biệt. Nhiều dữ liệu cần tải nhưng không dùng lazy loading sẽ làm cho tốc độ tải trang và hiệu suất tải của web bị giảm mạnh.
Trên thiết bị di động, chúng thường có kích thước nhỏ nên các website cũng phải tối ưu cải cả thiện trang nhất có thể. Người dùng của trang phải có kết nối băng thông đủ rộng và kết nối mạng ổn định thì mới không gặp lỗi vứng Javascript của Lazy-load.
Nếu như website có dữ liệu phục vụ cho quá trình buôn bán (các trang gần giống trang thương mại điện tử) thì áp dụng lazy loading không hẳn cần thiết. Bởi vì khách hàng có thể sẽ không thể tìm được những sản phẩm bị "ẩn" dù họ đang cần mua sản phẩm đó.
Dùng Fallback hoặc Polyfill
Đối với các browser không có hỗ trợ loading, cách để triển khai lazy-load là phải dùng Fallback (cách dự phòng). Bên cạnh đó, bạn cũng phải dùng Polyfill (đây là một mã có khả năng triển khai một tính năng của trình duyệt web). Người thiết kế cũng có thể viết một code có thuộc tính loading tương tự như Fallback hoặc Polyfill để thực hiện việc lazy-load các hình ảnh.
Dùng thuộc tính Loading
Chúng ta cũng có thể dùng thuộc tính Loading trong kỹ thuật lazy loading. Cách dùng thuộc tính này rất đơn giản, người thiết kế thậm chí còn không cần dùng đến Javascript. Hay phải lo lắng về lỗi đối với hình ảnh.
Thay vào đó, bạn chỉ cần báo với trình duyệt về những hình ảnh nào cần lazy-load bằng thuộc tính Loading là được. Có 3 giá trị tương ứng với chúng bạn cần lưu ý là lazy, auto và eager. Mỗi loại giá trị đều có một đặc trưng riêng.
Chuẩn bị lazy loading
Đối với lazy loading, trước khi bạn dùng những kỹ thuật trên thì bạn cũng phải hiểu kỹ càng về tính năng của nó khi dùng trên web. Về cơ bản, lazy loading chỉ là một thuộc tính điều chỉnh sự xuất hiện của các dự liệu trên website. Thông thường các dữ liệu này sẽ là hình ảnh. Vì thế, người dùng có thể sử dụng lazy-load với thuộc tính Loading.
Đối với giúp trị của thuộc tính Loading, bạn cần phải hiểu rõ như:
- Lazy - lazy loading (lười tải): trình duyệt cần phải lazy-load toàn bộ dữ liệu này.
- Auto (tự động): trình duyệt sẽ tự đưa ra quyết định có nên lazy-load dữ liệu trên web hoặc không.
- Eager (tha thiết, háo hức): trình duyệt phải tải dữ liệu này ngay lập tức hoặc phải càng sớm càng tốt. Dữ liệu đang load khi đang ở cơ chế lazy khi đổi sang eager thì nó sẽ được tải ngay lập tức.
Có thể nói, lazy loading quả thật vô cùng cần thiết trong việc tạo dựng website phải không nào? Gofiber hy vọng, các thông tin trên đây của chúng tôi sẽ giúp bạn giải đáp được các câu hỏi xoay quanh lazy loading. Chúc bạn áp dụng phương pháp lazy loading thành công.