首页 > 代码编程 > 前端开发 > js 延迟加载(JavaScript实现网页图片延迟加载)

js 延迟加载(JavaScript实现网页图片延迟加载)

2023-06-22 前端开发 46 ℃ 0 评论

什么是延迟加载?

延迟加载(lazy loading)是一种Web性能优化技术,其核心思想是将网页中的图片和其他外部资源在用户需要时再加载。这种技术能够减少网页的加载时间,降低服务器的压力,提高用户的体验。

为什么需要延迟加载?

在网页中,图片和其他外部资源往往占据了大量的带宽和加载时间。当网页中包含大量图片时,这些图片的加载速度就会成为影响网页性能的主要因素。而当这些图片一开始就被全部加载出来,会导致网页的加载时间变得非常缓慢,用户的等待时间也会变长,影响用户体验。

同时,这些图片和外部资源的加载也会占用服务器的带宽和资源,影响服务器的稳定性和性能,甚至会带来额外的服务器成本。

因此,为了提高网页性能,减少用户等待时间,降低服务器压力,延迟加载技术应运而生。

怎样实现延迟加载?

其实实现延迟加载并不难,我们可以通过JavaScript来实现。具体实现方法如下:

Step 1:HTML标签

在HTML页面中,我们需要将要延迟加载的图片标签的src属性设置为空字符串,将实际的图片URL保存在另一个自定义的属性中,例如data-src。这样可以在页面加载时只加载图片占位符而不加载实际的图片。

<img src="" data-src="example.jpg">

Step 2:JavaScript代码

我们可以使用JavaScript来检测页面中所有需要延迟加载的图片,并在适当的时机将其实际的图片URL赋值给src属性,从而触发图片的加载。具体实现代码如下:

var lazyImages = document.querySelectorAll("img[data-src]");

var lazyLoad = function() {

for(var i = 0; i < lazyImages.length; i++) {

if(isInViewport(lazyImages[i])) {

lazyImages[i].src = lazyImages[i].dataset.src;

lazyImages[i].removeAttribute("data-src");

}

}

};

document.addEventListener("DOMContentLoaded", lazyLoad);

window.addEventListener("load", lazyLoad);

window.addEventListener("scroll", lazyLoad);

window.addEventListener("resize", lazyLoad);

function isInViewport(elem) {

var bounding = elem.getBoundingClientRect();

return (

bounding.top <= (window.innerHeight || document.documentElement.clientHeight) &&

bounding.bottom >= 0

);

}

Step 3:优化性能

为了提高延迟加载的性能,我们可以对代码进行一些优化。例如:

1. debounce防抖

在页面滚动时,如果频繁地触发图片加载事件,会降低页面的性能。因此,我们可以使用debounce防抖技术来将多个事件合并成一个。在这里,我们可以使用Lodash.js中的_.debounce函数来实现。

var lazyLoad = _.debounce(function() {

// ...

}, 100);

2. Intersection Observer

在代码中使用Intersection Observer API代替scroll和resize事件,这样可以减少代码的复杂度,并提高性能。

var lazyLoad = function(elems, observer) {

elems.forEach(function(elem) {

if(elem.intersectionRatio > 0) {

elem.target.src = elem.target.dataset.src;

observer.unobserve(elem.target);

}

});

};

var observer = new IntersectionObserver(function(entries, observer) {

lazyLoad(entries, observer);

}, {rootMargin: "0px 0px 100% 0px"});

lazyImages.forEach(function(lazyImage) {

observer.observe(lazyImage);

});

总结

延迟加载是一项非常简单而实用的Web性能优化技术,可以有效地提高网页性能,减少用户等待时间,降低服务器压力。在实现上,我们可以使用JavaScript来检测页面中需要延迟加载的图片,并在适当的时机进行预加载。同时,为了提高性能,我们可以对代码进行优化,使用debounce防抖和Intersection Observer API等技术来提高代码的效率。

炮渣日记