什么是懒加载和预加载?为什么需要懒加载和预加载?
概念
懒加载和预加载是常用的web优化的手段,用于提升提升用户体验。
特点
提高网页加载速度
减少后台服务器压力
提升用户体验
实现原理
以下以图片的加载为例。
预加载
在某些网站浏览一组图片时,只给你显示第一张图片,然后可以通过一些形式(点击按钮)来切换图片,在你浏览第一张图片时,其实一整组图片都预加载完了,之后切换就可以了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>preLoad</title> </head> <body> <div class="container"> <img src="loading.gif" alt="pic" /> <button onclick="onLeft()">Left</button> <button onclick="onRight()">Right</button> </div> <script> var img = document.querySelector('img'); var index = 0; var imgData = ['img1.png', 'img2.png', 'img3.png', 'img4.png', 'img5.png']; function preLoad() { imgData.forEach((path) => { var image = new Image(); image.src = path; }); } preLoad(); img.src = imgData[index]; function onLeft() { index--; if (index < 0) { index = imgData.length - 1; } img.src = imgData[index]; } function onRight() { index++; if (index > imgData.length - 1) { index = 0; } img.src = imgData[index]; } </script> </body> </html>
|
懒加载
当图片数量比较多时,要是一次性请求加载,加载时间可能需要数十秒。所以可以先出现用户界面需要的图片,将来可能需要出现在页面上的,等将来到了再加载。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>lazyload</title> </head> <body> <div class="container"> <img src="loading.gif" alt="pic" data-src="img1.png"> <img src="loading.gif" alt="pic" data-src="img2.png"> <img src="loading.gif" alt="pic" data-src="img3.png"> <img src="loading.gif" alt="pic" data-src="img4.png"> <img src="loading.gif" alt="pic" data-src="img5.png"> </div> <script> var images = document.querySelectorAll('img'); function lazyLoad() { var scrollTop = window.pageYOffset; images.forEach((image) => { if (image.offsetTop < (window.innerHeight + scrollTop)) { image.src = image.getAttribute('data-src'); } }); } window.onscroll = lazyLoad(); </script> </body> </html>
|
总结
预加载和懒加载都是基础的前端开发技能,了解并善用是必须的。