彻底弄懂图片懒加载 拼搏现实的明天。 2023-03-04 12:26 20阅读 0赞 ### 1、目标 ### * 从浏览器底层渲染机制分析懒加载的意义 * 最初基于JS盒模型实现的懒加载方案 * 基于getBoundingClientRect的进阶方案 * 手撕Lodash源码中的debounce(函数防抖) * 手撕Lodash源码中的throttle(函数节流) * 终极方案:IntersectionObserver * 未来设想:img.loading=lazy ### 2、从浏览器底层渲染机制分析懒加载的意义 ### \* 为啥要做图片的延迟加载 \* 浏览器渲染页面 \* 1.构建DOM树 \* 2.构建CSSOM树 \* 3.生成RENDER TREE \* 4.布局 \* 5.分层 \* 6.珊格化 \* 7.绘制 \* 构建DOM树中如果遇到img \* 老版本:阻碍DOM渲染 \* 新版本:不会阻碍 每一个图片请求都会占用一个HTTP(浏览器同时发送的HTTP 6个) \* 拿回来资源后会和RENDER TREE一起渲染 \* … \* 开始加载图片,一定会让页面第一次渲染速度变慢(白屏) * \* 图片延迟加载:第一次不请求也不渲染图片,等页面加载完,其他资源都渲染好了,再去请求加载图片 \*/ ### 3、 ### // 核心代码 // 加载条件:盒子底边距离BODY距离 < 浏览器底边距离BODY的距离 // 方法一: let B = utils.offset(lazyImageBox).top + lazyImageBox.offsetHeight, A = winH + document.documentElement.scrollTop; if (B <= A) { lazyImg(lazyImageBox); } /* */ // 方法二: // let { // bottom // } = lazyImageBox.getBoundingClientRect(); // if (bottom <= winH) { // lazyImg(lazyImageBox); // } // 方法三 // IntersectionObserver 监听DOM对象,当DOM元素出现和离开视口的时候触发回调函数 // let lazyImageBoxs, // observer = new IntersectionObserver(changes => { // changes.forEach(item => { // let { // isIntersecting, // target // } = item; // if (isIntersecting) { // lazyImg(target); // observer.unobserve(target); // } // }); // }); // 方案四: 每个图片加一个 loading="lazy" 兼容性差 function lazyImg(lazyImageBox) { let img = lazyImageBox.querySelector('img'), trueImg = img.getAttribute('data-image'); img.src = trueImg; img.onload = function () { // 图片加载成功 utils.css(img, 'opacity', 1); }; img.removeAttribute('data-image'); }
相关 彻底弄懂图片懒加载 1、目标 从浏览器底层渲染机制分析懒加载的意义 最初基于JS盒模型实现的懒加载方案 基于getBoundingClientRect的进阶方案 手撕 拼搏现实的明天。/ 2023年03月04日 12:26/ 0 赞/ 21 阅读
相关 图片懒加载 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Nvbmds 青旅半醒/ 2022年11月16日 13:41/ 0 赞/ 326 阅读
相关 图片懒加载 function lazyLoadImg() { var img = document.getElementsByTagName('img'); s 谁践踏了优雅/ 2022年09月28日 13:05/ 0 赞/ 389 阅读
相关 图片懒加载 在一个项目中,如果同时加载的图片太多的话,会导致页面卡顿,这个时候就会用到懒加载。懒加载的实现原理是监听浏览器的滚动条事件,先加载出前面几张图片,然后当滚动条滚动的时候再依次加 分手后的思念是犯贱/ 2022年06月17日 13:49/ 0 赞/ 172 阅读
相关 图片懒加载 1.引入js jquery.lazyload.js(如下) / Lazy Load - jQuery plugin for lazy loading 缺乏、安全感/ 2022年06月16日 06:44/ 0 赞/ 492 阅读
相关 图片懒加载 懒加载的意义[(在线demo预览)][demo] 尽管很多公司的网页都有一些限制,比如页面的最大的图片大小不得大于50k,也有很多图片优化工具fis3、gulp等等,但是 痛定思痛。/ 2022年06月04日 07:58/ 0 赞/ 531 阅读
相关 图片懒加载 在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度, 偏执的太偏执、/ 2022年05月28日 02:07/ 0 赞/ 551 阅读
相关 图片懒加载 <!--<!doctype html>--> <!--<html lang="en">--> <!--<head>--> <!--<me 亦凉/ 2022年05月23日 12:19/ 0 赞/ 488 阅读
相关 图片懒加载 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> r囧r小猫/ 2022年05月21日 06:54/ 0 赞/ 532 阅读
相关 图片懒加载 \[外链图片转存失败(img-vbwUXXxJ-1563574134995)([https://upload-images.jianshu.io/upload\_images/ 川长思鸟来/ 2021年09月30日 00:24/ 0 赞/ 848 阅读
还没有评论,来说两句吧...