标签:|| scroll 相对路径 字符 span text reload 直接 延迟
懒加载是一种按需延迟资源的方式。在加载显示页面时,并不一次性加载所有该页面所需要的图像,对于在可视区域之外的图像,可以等到用户scroll到该区域的时候,再进行加载
1、目前已经有很多库实现了懒加载,例如lazysizes,可以考虑使用
2、使用库这样的操作,相当于增加一个需要请求的js文件,增加一次http请求。所以如果能够实现原生的懒加载,能够更好的优化性能;
原理:
代码
var viewHeight = document.documentElement.clientHeight; //可视区高 function lazyLoad() { var eles = document.querySelectorAll(‘img[data-original][lazyload]‘) Array.prototype.forEach.call(eles, function (item, index) { var rect; if (item.dataset.original === "") return; rect = item.getBoundingClientRect(); if (rect.bottom >= 0 && rect.top < viewHeight) { ! function () { var img = new Image(); img.src = item.dataset.original;//提前缓存图片 img.onload = function () { item.src = img.src; } item.removeAttribute("data-original"); item.removeAttribute("lazyload"); }() } }); } lazyLoad() document.addEventListener("scroll", lazyLoad)
预加载,提前告诉浏览器将会用到的资源(例如图片),提前加载缓存起来。需要的时候,直接从缓存中获得图片等资源
http请求并没有减少,而是在页面加载渲染的过程中,在网络不繁忙的时机发出请求。
实现方法:
<img src="./img/1.jpeg" style="display:none">
<style>
#demo{ background:url("./img/demo.jpeg")
no-repeat
-9999px
-9999px
;
}
</style>
//demo.js
var img = new Image(); img.src = "./img/1.jpeg"
将脚本加入到页面中(js位置很重要,最好放在“</body>”之前‘’;或者放在head中,但是使用defer属性延迟脚本的执行)
<script src="demo.js"></script>window.onload=function(){ var img = document.createElement(‘img‘); img.setAttribute(‘src‘,‘./img/1.jpeg‘); img.setAttribute(‘style‘,‘display:block‘); // 添加元素到body中,位于</body>之前, document.body.appendChild(img); }
var xmlhttprequest=new XMLHttpRequest(); xmlhttprequest.onreadystatechange=callback; xmlhttprequest.onprogress=progressCallback; xmlhttprequest.open("GET","http://image.baidu.com/mouse,jpg",true); xmlhttprequest.send(); function callback(){ if(xmlhttprequest.readyState==4&& xmlhttprequest.status==200){ var responseText=xmlhttprequest.responseText; }else{ console.log("Request was unsuccessful:"+xmlhttprequest.status); } } function progressCallback(e){ e=e || event; if(e.lengthComputable){ console.log("Received"+e.loaded+"of"+e.total+"bytes") } }
懒加载与预加载,一个是延迟图片的加载,一个是提前加载图片并缓存起来。
懒加载,减少了http请求。预加载并没有减少请求。
懒加载非常直接明确的提升了性能。预加载相当于提前做牺牲为后来者做了性能优化,选择预加载的执行时机就显得非常重要。
标签:|| scroll 相对路径 字符 span text reload 直接 延迟
原文地址:https://www.cnblogs.com/Jamie1032797633/p/10804819.html