美文网首页
关于前端页面懒加载的用法

关于前端页面懒加载的用法

作者: clth | 来源:发表于2018-07-08 02:14 被阅读0次

注:转载,原文:火头军人

https://mp.weixin.qq.com/s/JYglEGYN9tnGpDg7ARPx7w?scene=25#wechat_redirect

图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。为了解决这种问题,通过前后端配合,使图片仅在浏览器当前视窗内出现时才加载该图片,达到减少首屏图片请求数的技术就被称为“图片懒加载”。

传统的解决方案

我们先来探讨一下传统的图片懒加载技术是如何实现的。

淘宝首页代码

如图是淘宝上的懒加载,

通过在tms-data中村粗的data文件,在用户下拉菜单后进行向后台发送api进行加载的行为。这种也是一个比较常见的懒加载方式。在用户加载过后将变成以下代码。

淘宝首页代码

可优化的一些点:

(1)滚动函数的节流

浏览器中的滚动事件是一个触发非常频繁的事件,有时候我们主观体验只是轻轻拨动了一下滚轮,但实际上触发了数次甚至数十次的onscroll事件:

还记得我们在前文所述的懒加载策略中提到,每次滚动事件都将执行:选择页面所有图片→遍历→筛选在当前视窗内的图片→加载真实图片与dom元素。以上过程是一个非常耗时的过程,尤其是在筛选符合条件的图片的步骤。因此,我们需要对滚动事件进行节流:只有当后一次触发滚动与前一次触发滚动的时间间隔大于一定阈值时,才认为这次滚动生效。

通俗地说,就是两次滚动事件之间必须大于一定的时间。这意味着用户在快速下滑页面时,筛选加载策略并不会执行,只有当用户停下或是逐渐放缓下滑速度时,才会进行筛选加载策略。若用jQuery实现上述节流步骤则如下所示(scroll事件节流阈值150ms,resize事件节流阈值100ms):

设置函数执行间隔

顾名思义,预加载就是指预先加载一些未在当前视窗内,但是即将出现的一些图片。还是拿前文举的例子进行扩展:

可以看到,虽然当前视窗中只有3张图片,但若使用预加载,将提前加载前后各1屏幕内的图像(红色虚线内),如此一来,当用户在当前视窗内继续上滑或下滑时,该屏内的图片已经提前加载完毕,用户就不会感知到图片从白屏到显像的这种抖动过程,大大提升了用户体验。

更优的用户体验

在国内网站中,知乎官网在图片懒加载部分做得较为领先,拥有很好的用户体验。让我们先来看一下效果,随便打开一个知乎问答页(在PC环境中打开):知乎问答页示例

效果图:

仔细观察,我们可以看到这样一种效果:图片在由白至清晰的过程中有一种模糊渐变的效果,相比于直接替换空白占位图的方案,这种方式不会给用户带来突兀感。

查看页面源代码,我们发现直出的页面中img标签是以这种形式存在的:

img标签及其内的信息作为字符串保存在noscript标签中,src中为一张低品质图片,data-original中为真实图片地址,同时有一个占位的span元素。当页面滚动到该noscript标签对应的位置时,解析出noscript标签中的img,并替换占位span元素:

此时将先加载低质量的小图,再加载清晰的高质量原图:

如此一来,用户将在极短的时间内就能看到图片的大致轮廓。随后等真实图片加载完毕后,再使用CSS控制图片逐渐变清晰,整个过程顺畅自然,一气呵成。在网速较差的环境下,这种方式也能有很优雅的降级体验。

相关文章

  • 关于前端页面懒加载的用法

    注:转载,原文:火头军人 https://mp.weixin.qq.com/s/JYglEGYN9tnGpDg7A...

  • 图片懒加载和预加载

    图片懒加载的原理是什么? 首先明白为什么要懒加载: 懒加载即延迟,对于图片过多的页面,为了加快页面加载速度,我们需...

  • # 懒加载和预加载

    web前端 1. 懒加载 1、不加载全部图片 2、首先显示在页面中的图,首先进行加载 3、当屏幕发生滚动的时候,判...

  • 原生JS - 图片懒加载@郝晨光

    前言 在现在以用户体验至上的前端时代,为了提升页面加载速度,为了提升用户体验,我们经常会用到图片懒加载这个功能。所...

  • 关于前端图片的懒加载

    所谓懒加载实际上非常简单,只是在正常的img标签里用data-src代替真正的src,这样可以让那些不用马上加载的...

  • 懒加载和预加载

    懒加载 js懒加载 意义 懒加载(LazyLoad)是前端优化的一种有效方式,能极大的提升用户体验,图片加载是其重...

  • 懒加载和预加载

    懒加载和预加载 1. 懒加载 1. 什么是懒加载? 懒加载也就是延迟加载 当访问一个页面的时候,先把img元素或是...

  • 懒加载、为什么使用懒加载

    懒加载(LazyLoad)一直是前端的优化方案之一。它的核心思想是:当用户想看页面某个区域时,再加载该区域的数据。...

  • React拓展2-路由组件的lazyLoad

    lazyLoad懒加载:需要使用的时候再进行加载 当未使用懒加载时,页面一打开,就将所有的路由组件给加载到页面了 ...

  • 关于render渲染次数

    关于render渲染次数 页面加载render执行几了次(五) 单纯的前端渲染render在componentWi...

网友评论

      本文标题:关于前端页面懒加载的用法

      本文链接:https://www.haomeiwen.com/subject/zfobuftx.html