移动网站懒加载技术的实现方法
在移动互联网时代,网页加载速度直接影响用户体验和搜索引擎排名,移动设备的网络环境往往不稳定,带宽有限,如果网页一次性加载所有资源(如图片、视频、脚本等),可能会导致页面加载缓慢,甚至卡顿,懒加载(Lazy Loading)技术通过延迟加载非关键资源,显著提升页面性能,本文将详细介绍移动网站懒加载的实现方法,包括技术原理、实现方案及优化建议。

懒加载技术概述
懒加载是一种优化网页性能的技术,其核心思想是“按需加载”,即仅加载当前视口(Viewport)内的内容,而延迟加载用户尚未浏览的部分,常见的应用场景包括:
- 图片懒加载:只加载当前可见区域的图片,滚动时再加载后续图片。
- 视频懒加载:避免自动播放,仅在用户交互时加载视频资源。
- 脚本懒加载:延迟执行非关键 JavaScript,减少主线程阻塞。
懒加载能有效减少首屏加载时间(First Contentful Paint, FCP),降低带宽消耗,并提升页面交互流畅度。
懒加载的实现方法
1 基于原生 JavaScript 的实现
原生 JavaScript 可以通过 IntersectionObserver API 实现懒加载,该 API 可以监听元素是否进入视口,并触发回调函数。
示例代码:图片懒加载
document.addEventListener("DOMContentLoaded", function() {
const lazyImages = document.querySelectorAll("img[data-src]");
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.removeAttribute("data-src");
observer.unobserve(img);
}
});
});
lazyImages.forEach(img => {
imageObserver.observe(img);
});
});
HTML 结构
<img data-src="image.jpg" alt="Lazy-loaded image">
优点
- 性能高效,不依赖额外库。
- 兼容现代浏览器(IE 需 polyfill)。
2 基于 <img loading="lazy"> 的 HTML 原生支持
现代浏览器(Chrome 77+、Firefox 75+)支持 loading="lazy" 属性,无需 JavaScript 即可实现懒加载。
示例代码
<img src="image.jpg" loading="lazy" alt="Lazy-loaded image">
优点
- 简单易用,无需额外脚本。
- 浏览器自动优化加载策略。
缺点
- 兼容性有限(不支持旧版浏览器)。
- 无法自定义加载阈值。
3 基于第三方库的实现
如果项目需要更灵活的控制,可以使用以下懒加载库:
(1)Lozad.js
const observer = lozad(); observer.observe();
(2)LazyLoad
const lazyLoadInstance = new LazyLoad({
elements_selector: ".lazy"
});
优点
- 提供更多配置选项(如加载阈值、回调函数)。
- 兼容旧版浏览器。
缺点
- 增加额外 JavaScript 依赖。
4 视频懒加载的实现
视频文件通常较大,懒加载能显著提升性能。
示例代码
<video controls preload="none" poster="poster.jpg">
<source data-src="video.mp4" type="video/mp4">
</video>
<script>
const videoObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const video = entry.target;
const source = video.querySelector("source");
source.src = source.dataset.src;
video.load();
videoObserver.unobserve(video);
}
});
});
document.querySelectorAll("video").forEach(video => {
videoObserver.observe(video);
});
</script>
优化建议
- 使用
preload="none"避免自动加载。 - 提供
poster占位图提升用户体验。
懒加载的优化策略
1 设置合理的加载阈值
通过 IntersectionObserver 的 rootMargin 调整触发加载的提前量:
new IntersectionObserver(callback, {
rootMargin: "200px" // 提前 200px 加载
});
2 结合占位图优化用户体验
<img src="placeholder.jpg" data-src="real-image.jpg" class="lazy-img">
.lazy-img {
background: #f0f0f0;
transition: opacity 0.3s;
}
.lazy-img.loaded {
opacity: 1;
}
3 避免 SEO 影响
- 确保懒加载内容能被搜索引擎爬取(如使用
<noscript>回退)。 - 避免过度延迟关键内容加载。
懒加载的适用场景与限制
适用场景
限制如无限滚动)需手动管理观察器。
- 旧版浏览器需 polyfill。
懒加载是提升移动网站性能的关键技术,合理使用可大幅优化加载速度,开发者可根据项目需求选择原生 JavaScript、HTML 属性或第三方库实现,并结合优化策略(如占位图、阈值调整)提升用户体验,随着浏览器支持增强,懒加载将成为移动 Web 开发的标配优化手段。
参考资料
- MDN - IntersectionObserver API
- Google Developers - Native Lazy Loading
- Lozad.js - Lightweight Lazy Loader
-
喜欢(10)
-
不喜欢(3)




