Cara mempercepat loading web
Sebagai Jasa Web Design Surabaya, kami seringkali menghadapi saat load sebuah website tidak maksimal, karena harus menunggu cukup lama sampai ada content yang dimunculkan.
Hal ini bisa terjadi jika halaman web kita memiliki banyak gambar, css, dan javascript yang harus di load terlebih dulu sebelum memunculkan isi dari webnya.
Pada kesempatan ini kita akan mengulas cara untuk memerintah browser supaya tidak mengunduh seluruh gambar yang ada di halaman web kita. Teknik ini dikenal dengan nama lazy load.
Dengan teknik ini, gambar tidak langsung diunduh saat halaman web dibuka, tetapi baru akan diunduh saat kita scroll ke bagian gambar tersebut.
Baca Juga: Mengenal Lebih Dekat Pemrograman Web Dengan PHP
Baca juga: Memeriksa Password Strength dengan pStrength jQuery Plugin
Secara umum, saat memanggil sebuah gambar kita menggunakan perintah:
<img src="images/blabla.jpg">
Dengan perintah di atas, browser akan langsung mengunduh gambar tersebut saat halaman web dibuka. Semakin banyak gambar, tentu waktu yang dibutuhkan semakin lama sampai seluruh komponen halaman web diunduh.
Dengan lazy load kita memodifikasi kode di atas dengan kode berikut:
<img data-src="images/blabla.jpg" class="lazy">
Dengan kode tersebut browser tidak akan langsung mengunduh gambar, sehingga otomatis komponen yang diunduh hanya bagian css, javascript, dan kode html.
Lalu bagaimana memunculkan gambar tersebut saat discroll?
Kita perlu menggunakan kode javascript untuk mengatasi hal itu.
Baca Juga: Mengenal Lebih Dekat Pemrograman Web Dengan PHP
Kode Javascript:
document.addEventListener("DOMContentLoaded", function() {
var lazyloadImages;
if ("IntersectionObserver" in window) {
lazyloadImages = document.querySelectorAll(".lazy");
var imageObserver = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
var image = entry.target;
image.src = image.dataset.src;
image.classList.remove("lazy");
imageObserver.unobserve(image);
}
});
});
lazyloadImages.forEach(function(image) {
imageObserver.observe(image);
});
} else {
var lazyloadThrottleTimeout;
lazyloadImages = document.querySelectorAll(".lazy");
function lazyload () {
if(lazyloadThrottleTimeout) {
clearTimeout(lazyloadThrottleTimeout);
}
lazyloadThrottleTimeout = setTimeout(function() {
var scrollTop = window.pageYOffset;
lazyloadImages.forEach(function(img) {
if(img.offsetTop < (window.innerHeight + scrollTop)) {
img.src = img.dataset.src;
img.classList.remove('lazy');
}
});
if(lazyloadImages.length == 0) {
document.removeEventListener("scroll", lazyload);
window.removeEventListener("resize", lazyload);
window.removeEventListener("orientationChange", lazyload);
}
}, 20);
}
document.addEventListener("scroll", lazyload);
window.addEventListener("resize", lazyload);
window.addEventListener("orientationChange", lazyload);
}
})
Untuk contoh bisa dilihat di halaman demo dari Jasa Web Design Surabaya:
sumber: css-tricks.com