一、Lazyload的理解分析

  1. Lazyload技术是一种延迟加载技术,让页面加载速度快到飞起、减轻服务器压力、节约流量、提升用户体验

  2. 实现思路
    1)页面较长,屏幕的可视区域有限
    2)不设置页面中img标签的src属性值或者将其指向同一个占位图
    3)图片的实际地址存在img标签自定义的一个属性中,如:“data-url”
    4)监听scroll,滚动到某个位置时,动态的将url替换成实际的“data-url”

  3. 流程图分析:

  4. 代码实现
    html部分:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Lazyload</title><style type="text/css">.mob-wrap li{list-style: none;width: 100%;height: 345px;}</style></head><body><ul class="mob-wrap"><li"><img class="tamp-img" alt="loading" data-src="http://mob.com/public/images/index/sharesdk-logo.jpg"><p>ShareSDK轻松实现社会化功能</p></li><li"><img class="tamp-img" alt="loading" data-src="http://mob.com/public/images/index/sms-logo.jpg"><p>短信验证码SDK</p></li><li"><img class="tamp-img" alt="loading" data-src="http://mob.com/public/images/index/rec-logo.jpg"><p>MobLink实现Web与App的无缝链接</p></li></ul></body>
</html>

js部分:

var aImg = [{"src":"http://mob.com/public/images/index/sharesdk-logo.jpg","txt":"ShareSDK轻松实现社会化功能"},{"src":"http://mob.com/public/images/index/sms-logo.jpg","txt":"短信验证码SDK"},{"src":"http://mob.com/public/images/index/rec-logo.jpg","txt":"MobLink实现Web与App的无缝链接"}
];
var sLi = '';
document.getElementsByClassName("mob-wrap")[0].innerHTML="";
for(let i = 0;i<10;i++){sLi = document.createElement("li");sLi.innerHTML = `<img class="tamp-img" alt="loading" src="./zwt.gif" data-src="${aImg[i%3].src}"><p>${aImg[i%3].txt}</p>`;document.getElementsByClassName("mob-wrap")[0].appendChild(sLi);
};window.onscroll = function () {var bodyScrollHeight =  document.documentElement.scrollTop;// body滚动高度var windowHeight = window.innerHeight;// 视窗高度var imgs = document.getElementsByClassName('tamp-img');for (var i =0; i < imgs.length; i++) {var imgHeight = imgs[i].offsetTop;// 图片距离顶部高度 if (imgHeight  < windowHeight  + bodyScrollHeight - 340) {imgs[i].src = imgs[i].getAttribute('data-src');imgs[i].className = imgs[i].className.replace('tamp-img','');}}
};

二、Lazyload的再优化

  1. 不做任何处理直接监听scroll必然导致在滚动鼠标滚轮的时候,过于频繁的触发处理函数。如果刚巧在处理函数中有大量的操作dom等消耗性能的行为,引发大量操作,导致页面变卡变慢,甚至浏览器崩溃无响应,处理这种问题的思路是节流和防抖
  2. 节流函数的形象比喻,比如在接咖啡的时候,按了一次按钮会出咖啡,紧跟着再按几次按钮接到的还是那一杯咖啡,相当于后面几次按的没有起作用
  3. 每隔least时间内至少执行一次的节流函数
    1)代码如下:
//节流函数
_throttle = (fn, delay, least) => {var timeout = null,startTime = new Date();fn();return function() {var curTime = new Date();clearTimeout(timeout);if(curTime - startTime >= least) {fn();startTime = curTime;}else {timeout = setTimeout(fn, delay);}}
}

2)使用节流函数:
代码如下:

function compare () {var bodyScrollHeight =  document.documentElement.scrollTop;// body滚动高度console.log(bodyScrollHeight+"替换src方法")var windowHeight = window.innerHeight;// 视窗高度var imgs = document.getElementsByClassName('tamp-img');for (var i =0; i < imgs.length; i++) {var imgHeight = imgs[i].offsetTop;// 图片距离顶部高度 if (imgHeight < windowHeight + bodyScrollHeight - 340) {imgs[i].src = imgs[i].getAttribute('data-src');imgs[i].className = imgs[i].className.replace('tamp-img','');}}
}
window.onscroll = _throttle(compare, 350,600);

3)说明:滚动时间least长于600,调用compare,否则延迟350ms执行。这样相对于直接onscroll性能得到更进一步提升,在功能上也没有什么问题,不同的业务场景调整一下delay和least就可以

前端性能优化之Lazyload 1相关推荐

  1. 前端性能优化之Lazyload

    前端性能优化之Lazyload @(Mob前端-冬晨)[JavaScript|技术分享|懒加载] [TOC] Lazyload 简介 前端工作中,界面和效果正在变得越来越狂拽炫酷,与此同时性能也是不得 ...

  2. 深度讲解:web前端性能优化

    一.课程简介: 1.课程大纲 涉及到的分类 网络层面 构建层面 浏览器渲染层面 服务端层面 涉及到的功能点 资源的合并与压缩 图片编解码原理和类型选择 浏览器渲染机制 懒加载预加载 浏览器存储 缓存机 ...

  3. 前端性能优化——从 10 多秒到 1.05 秒

    https://lishaoy.net 关于 性能优化 是个大的面,这篇文章主要涉及到 前端 的几个点,如 前端性能优化 的流程.常见技术手段.工具等. 提及 前端性能优化 ,大家应该都会想到 雅虎军 ...

  4. 移动H5前端性能优化指南[转]

    移动H5前端性能优化指南 米随随2015.01.23 移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用 2. 在Mobile侧我们提出三秒种渲染完成首屏指标 3. 基于第二点 ...

  5. WEB前端性能优化小结

    1. 请减少HTTP请求 基本原理: 在浏览器(客户端)和服务器发生通信时,就已经消耗了大量的时间,尤其是在网络情况比较糟糕的时候,这个问题尤其的突出. 一个正常HTTP请求的流程简述:如在浏览器中输 ...

  6. 前端性能优化 -- 从 10 多秒到 1.05 秒

    关于 性能优化 是个大的面,这篇文章主要涉及到 前端 的几个点,如 前端性能优化 的流程.常见技术手段.工具等. 提及 前端性能优化 ,大家应该都会想到 雅虎军规,本文会结合 雅虎军规 融入自己的了解 ...

  7. 前端性能优化的重要方案:图片懒加载

    大家好,我是前端岚枫,一枚二线城市的程序媛,今天主要跟大家分享我整理的前端性能优化的重要方案:图片懒加载,主要包括其原理,我们常用的一些插件,及编写源码实现图片懒加载功能等,图片懒加载是项目比较常见的 ...

  8. 移动HTML5前端性能优化指南

     http://www.cocoachina.com/webapp/20150126/11020.html (点击看大图) 移动H5前端性能优化指南[托尼托尼研究所] 概述 1. PC优化手段在M ...

  9. WEB前端性能优化基本套路

    前言 前端性能优化这是一个老生常谈的话题,但是还是有很多人没有真正的重视起来,或者说还没有产生这种意识. 当用户打开页面,首屏加载速度越慢,流失用户的概率就越大,在体验产品的时候性能和交互对用户的影响 ...

最新文章

  1. webapi同时支持post和get报404错误
  2. 彻底弄懂dalvik字节码【一】
  3. 10.1.4 HTML练习题
  4. 使用SQL SERVER 2000的全文检索功能
  5. Xml+Xslt测试工具
  6. Wordpress上传图片的存储逻辑
  7. html 按钮防止多次提交,HTML点击提交按钮两次
  8. Backblaze发布2016年2季度硬盘可靠性报告
  9. 【大数据部落】银行信用数据SOM神经网络聚类实现
  10. <研赛>华为杯数学建模竞赛获奖经验分享--数模之星提名
  11. 52单片机C语言如何用间接寻址,单片机要如何寻址?
  12. Python替换月份为英文缩写
  13. js中Error对象
  14. vbox 虚拟机导入 无法启动 fatal:int18:boot failure
  15. 什么是lims系统,lims(实验室管理系统)
  16. BJDCTF 2nd writeup(二)
  17. shell-------数组遍历、切片、替换等操作
  18. String类的trim()方法之不能消除的空格
  19. 全球十佳电影,你看过几部
  20. Pyqt5 pandas matplotlib network自用操作

热门文章

  1. RoarCTF2019-misc-黄金六年wp
  2. Ae入门系列之二:素材的导入与管理
  3. 令我欣慰的读者反馈《大话Java程序设计从入门到精通》
  4. mkv视频格式转换mp4格式?
  5. Java中怎么移动文件_使用java移动文件
  6. KeePass v1.21
  7. 为什么只有跳槽才能涨工资
  8. OpenOffice.org中的XML应用
  9. 【幻灯片动画制作】Focusky教程 | 自定义图形形状
  10. 在一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。---(java版)