js图片延迟加载

http://stylechen.com/imglazyload2.html

【译】页面加载中的图片性能优化


2013年05月26日 吴 天豪 性能优化 

原文地址:http://www.stevesouders.com/blog/2013/04/26/i/

我的大部分性能优化工作都集中在JavaScript和CSS上,从早期的Move Scripts to the BottomPut Stylesheets at the
Top
规则。为了强调这些规则的重要性,我甚至说过,“JS和CSS是页面上最重要的部分”。

几个月后,我意识到这是错误的。图片才是页面上最重要的部分。

我关注JS和CSS的重点也是如何能够更快地下载图片。图片是用户可以直观看到的。他们并不会关注JS和CSS。确实,JS和CSS会影响图片内容的展示,尤其是会影响图片的展示方式(比如图片轮播,CSS背景图和媒体查询)。但是我认为JS和CSS只是展示图片的方式。在页面加载的过程中,应当先让图片和文字先展示,而不是试图保证JS和CSS更快下载完成。

我优化JS和CSS的目的就是让页面尽快渲染。

开始渲染的时间过迟

伴着关注渲染时间的念头,我查询了HTTP
Archive
来了解我们的页面开始渲染的时间。下面是一些衡量的数值:

  • TTFB,第一个HTML文档数据包到达的时间

  • 开始渲染的时间

  • 页面onload触发的时间

从世界最快的30万个地址的测量值中,我提取出其中的50%和90%部分。如下面展示的一样,在页面加载的前三分之一段时间内,没有任何渲染动作。



















表格 1. 页面加载过程中的各个时间点
  TTFB 开始渲染 onload
50th percentile 610 ms 2227 ms 6229 ms
90th percentile 1780 ms 5112 ms 15969 ms

预加载

页面等待渲染的时间是整个页面加载时间的三分之一,这个事实让人出乎意料。HTTP
Archive上的数据说明,页面花费了32%到36%的时间来等待渲染开始。但是只需要10%的时间来获取第一个字节。因此,浏览器在22%到26%的时间段内,虽然已经接受到了数据,但是却不做任何渲染。在这段时间内浏览器通常都是在下载解析脚本和样式—这两者都会阻碍页面的渲染。

曾经,浏览器在这个时间段内(从接受到第一个字节到渲染开始)是处于空闲状态的。这是因为旧的浏览器中,一个脚本的下载会阻塞其他所有的资源的下载,比如IE6&7。浏览器厂商意识到虽然浏览器需要等待脚本下载执行完成后才能构建DOM,但是没有理由阻塞页面其他资源的并行下载。在2009年的IE8之后,浏览器预加载其他资源的请求。研究表明,预加载让页面加载速度快了20%。今天,所有主流浏览器都支持预加载。在这些浏览器数据中,我展示了每个主流浏览器最早支持预加载的版本。

(顺便说一句,我认为预加载是最有效的性能提升方式。设想现在的浏览器中脚本下载会阻塞其他资源,面对页面上如此庞大的脚本数量,页面的性能会糟糕到哪个程度)

预加载和响应式图片

这时我们又要回到Jason
Grigsby
的一条tweet:

我不得不承认一点。我试图推进响应式图片,并且越来越倾向于鼓励开发者来使用JS阻止预加载。

Jason指的“响应式图片”是一项技术,使用脚本来生成图片。通常这个技术用于实现图片对分辨率的适应。一个例子是Picturefill。当你将“预加载”和“响应式图片”合起来思考——预加载会提前加载图片的SRC,但是响应式图片技术通常又没有SRC,或者只是有一个1x1的替代图片。这两项技术之间有冲突。下面有一些权衡:

  • 不要使用响应式图片,这样浏览器就可以利用预加载尽快下载图片,但是图片可能会比需要的尺寸大很多,而且会耗费更长的时间来下载(耗费更多的流量)

  • 使用响应式图片,由于没有利用预加载,则意味着图片会在脚本下载执行后下载,这个时候IMG标签都已经创建好了。

接着Jason在后一条tweet中说:

让我觉得不舒服的是,大部分结论都没有经过测试。只是一些理论,而不是数据。

我并没有数据来比较这两个方式,但是HTTP
Archive中开始渲染的时间占总加载时间的三分之一也说明了一些问题。似乎渲染确实被脚本阻塞了,也就是说IMG标签还没有被创建。那么在1/3点后的时间里,IMG标签会被解析,然后JS和CSS才会执行并开始下载需要的图片。

我认为,在页面加载过程中初始化图片请求太晚了,并且相对使用预加载后的效果,页面的渲染时间确实被推迟了。再次声明,我没有数据来对比这两项技术。同时,我也不确定在markup技术的响应式图片中使用预加载会有怎样的改观。(Jason有篇博客文章有相关的内容,The real conflict behind <picture> and @srcset

理想情况下,我们利用markup解决了预加载和响应式图片之间的冲突问题。直到那时,我依然担心这样的技术在开发社区中大量使用会让响应式图片付出预加载失效的代价。我希望浏览器可以增强预加载的效果,那么现在和未来里网站就能够充分利用预加载的功能。

http://www.w3ctech.com/p/1503

js图片延迟加载,布布扣,bubuko.com

时间: 2024-12-22 16:47:45

js图片延迟加载的相关文章

jquery.lazyload.js 图片延迟加载

当做网页的时候,特别是整个网页展示图片较多的时候,用到图片延迟效果是很好的 使用方法也非常简单. 1.在网页任何位置(一般是在</body>前面)加上如下代码(注意<script>引用的两个js文件,路径自行设定): <script src="js/jquery.min.js"></script> <script src="js/jquery.lazyload.min"></script> &l

jQuery与lazyload.js图片延迟加载

一.简介: 在html中请求图片是最大的一处难题,图片的大小给我们的服务器带来了很大的压力,造成了请求时间过长.图片难以加载出来.jQuery图片延迟加载插件jQuery.lazyload,使用延迟加载在可提高网页下载速度. 基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载.对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. 官网:https://appelsiini.net/projects/lazyload/ 帮助:http://code.ciao

jquery.lazyload.js图片延迟加载

一.插件介绍 jquery.lazyload.js 是一个用 JavaScript 编写的jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置.这与图片预加载的处理方式正好是相反的.在包含很多大图片长页面中延迟加载图片可以加快页面加载速度.浏览器将会在 加载可见图片之后即进入就绪状态. 在某些情况下还可以帮助降低服务器负担.  二.插件作者下载地址 JS下载:http://www.ijquery.cn/js/lazyloa

js图片延迟加载如何实现

这里延迟加载的意思是,拖动滚动条时,在图片出现在浏览器显示区域后才加载显示. 大概的实现方式是: 在页面的load没有触发之前,把所有的指定id的元素内的img放入到imgs中,将所有的图片的src值放入到一个新建的_src属性中,把src设置为指定的显示图片. 然后,在document.body的scroll事件触发时,循环计算imgs中的img元素位置是否正好在浏览器显示框范围内,如果是,则将img元素的_src属性的值赋给src,这样图片就能显示出来. 这里比较麻烦地方是,如何计算img的

JS图片预加载插件

在开发H5项目中有时候会遇到要加载大量图片的情况,利用预加载技术可以提高用户浏览时的体验. 1)概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片.预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染. 2)区别:两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载.懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力. 服务器端区别:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数.预加载可以说是牺牲

js图片预加载与延迟加载

图片预加载的机制原理:就是提前加载出图片来,给前端的服务器有一定的压力. 图片延迟加载的原理:为了缓解前端服务器的压力,延缓加载图片,符合条件的时候再加载图片,当然不符合的条件就不加载图片.? 预加载的实现目的:为了实现更好的用户体验.劣势:会消耗前端服务器的性能. 延迟加载的实现目的:为了优化服务器前端的性能,减少请求次数. 实现方式: 1.第一种是纯粹的延迟加载,使用setTimeOut或setInterval进行加载延迟. 2.第二种是条件加载,符合某些条件,或触发了某些事件才开始异步下载

对搜索引擎友好的图片延迟加载技术

先写一个思路,以后再贴代码. 在大数据时代,网站内容越来越丰富,图片数量越来越多,质量也越来越高.这意味着更加耗用带宽.流量. 如果一个页面有100张高清图片,比如游记,在不考虑延迟加载情况下,浏览器会在极短的时间内向服务器发起100个图片下载请求,但实际上用户并不需要短时间内看完100张图片,甚至用户有可能只看前面几张图片,那么这时不管对服务器来说还是对网络来说,还是对用户机器来说都会高负荷的运转起来,将极大的浪费资源. 因此,按需加载.延迟加载才能提供好的用户体验. 那么,延迟加载具体是怎样

jQuery图片延迟加载插件

在一些图片较多的页面上,如果图片都一起加载网页的速度会比较慢,而且也浪费流量. 使用图片延时加载插件就解决这些问题. 方法: 引入jquery和插件文件 <script src="jquery.js" type="text/javascript"></script> <script src="jquery.lazyload.js" type="text/javascript"></sc

jquery图片延迟加载

在用户滚动页面到图片之后才进行加载,使用图片延迟加载,能有效的提高页面加载速度. 所需js插件: <script type="text/javascript" src="${path}/js/jquery.lazyload.js"></script><script type="text/javascript" src="${path}/js/jquery.lazyload.min.js">&