由于图片是web上最流行的内容类型之一,因此网站的页面加载时间很容易成为一个问题。

即使经过适当的优化,图像也会有相当大的重量。这可能会对访问者在访问网站内容之前等待的时间产生负面影响。很有可能,它们会失去耐心,转向其他地方,除非你能想出一个不影响速度感知的图像加载解决方案。

在本文中,您将学习有关延迟加载图像的五种方法,您可以将这些方法添加到web优化工具包中,以改进站点上的用户体验。

什么是延迟加载?

延迟加载图像意味着在网站上异步加载图像——也就是说,在网站上面的折叠内容完全加载之后,甚至仅当它们出现在浏览器的视区中时,才有条件地加载它们。这意味着,如果用户不一直向下滚动,那么放在页面底部的图像甚至不会被加载。

许多网站都使用这种方法,但在图片密集的网站上尤其明显。尝试浏览你最喜欢的在线搜索网站,寻找高分辨率的照片,你很快就会意识到网站只加载有限数量的图片。当您向下滚动页面时,您将看到占位符图像快速填充真实图像以供预览。例如,请注意unsplash.com上的加载程序:将页面的该部分滚动到视图中会触发使用全分辨率照片替换占位符:

为什么要关心延迟加载图像?

至少有两个很好的理由可以让你考虑延迟的为你的网站加载图像:

如果您的网站使用javascript来显示内容或向用户提供某种功能,那么加载dom很快就变得至关重要。脚本在开始运行之前,通常要等到dom完全加载之后才开始运行。在有大量图像的站点上,延迟加载-或异步加载图像-可能会在用户停留或离开您的站点之间产生差异。

由于大多数延迟加载解决方案只在用户滚动到在视区中可以看到图像的位置时加载图像,因此如果用户从未到达该点,则永远不会加载这些图像。这意味着节省了大量的带宽,大多数用户,尤其是那些在移动设备和慢速连接上访问网络的用户,都会感谢您。

嗯,延迟加载图像有助于网站性能,但最好的方法是什么?

没有完美的方式。

如果您使用javascript,那么实现您自己的延迟加载解决方案应该不成问题。没有什么比自己编写代码更能让你控制了。

或者,您可以浏览web,寻找可行的方法,并开始使用它们。我就是这么做的,然后遇到了这五个有趣的技巧。

1使用intersection observer api进行延迟加载

intersection observer api是一个现代化的界面,你可以利用它来延迟加载图像和其他内容。

下面介绍mdn如何引入此api:

intersection observer api提供了一种异步观察目标元素与祖先元素或顶级文档视口交叉的方法。

换句话说,异步观察的是一个元素与另一个元素的交集。

denys mishunov在交叉观察者和使用它的延迟加载图像上都有很棒的教程。这是他的解决方案的样子。

假设您想懒得加载图片库。每个图像的标记如下所示:

test image

注意图像的路径如何包含在data-src属性内,而不是src属性中。原因是使用src意味着图像会立即加载,这不是你想要的。

在css中,您可以为每个图像赋予一个min-height值100px。这为每个图像占位符(没有src属性的img元素)提供了垂直维度。

img {

min-height: 100px;

...more styles here

}

在javascript文档中,然后创建一个配置对象,并将其注册到一个intersectionobserver实例中:

// create config object: rootmargin and threshold

// are two properties exposed by the interface

const config = {

rootmargin: '0px 0px 50px 0px',

threshold: 0

};

// register the config object with an instance

// of intersectionobserver

let observer = new intersectionobserver(function(entries, self) {

// iterate over each entry

entries.foreach(entry => {

// process just the images that are intersecting.

// isintersecting is a property exposed by the interface

if(entry.isintersecting) {

// custom function that copies the path to the img

// from data-src to src

preloadimage(entry.target);

// the image is now in place, stop watching

self.unobserve(entry.target);

}

});

}, config);

最后,迭代所有图像并将它们添加到此iterationobserver实例:

const imgs = document.queryselectorall('[data-src]');

imgs.foreach(img => {

observer.observe(img);

});

这个解决方案的优点是:实现起来很容易,很有效,并且让intersectionobserver在计算方面做大量的工作。

另一方面,虽然大多数浏览器的最新版本都支持交集观察器api,但并不是所有浏览器都一致支持它。幸运的是,有一个polyfill可用。

2 robin osborne逐步增强的延迟加载

罗宾·奥斯本提出了一个基于渐进增强的超级巧妙的解决方案。在这种情况下,使用javascript实现的延迟加载本身被认为是对常规html和css的增强。

渐进增强的原因吗?那么,如果使用基于javascript的解决方案显示图像,如果禁用javascript或发生错误阻止脚本正常工作,会发生什么情况呢?在这种情况下,如果没有渐进的增强,用户很可能根本看不到图像。不酷。

您可以在此pen中查看osborne解决方案的基本版本的详细信息;在另一个pen中,你可以看到一个更全面的解决方案,其中考虑了破坏javascript的情况。

这种技术有许多优点:

渐进增强方法可确保用户始终可以访问内容。

它不仅适用于javascript不可用的情况,而且还适用于javascript 崩溃的情况:我们都知道容易出错的脚本,特别是在运行大量脚本的环境中。

它延迟加载滚动图像,因此如果用户不滚动到浏览器中的位置,则不会加载所有图像。

它不依赖于任何外部依赖,因此不需要框架或插件。

3 lozad.js

实现延迟加载图像的一种快速简便的替代方法是让js库为您完成大部分工作。

lozad是纯javascript中高性能,轻量级和可配置的延迟加载器,没有依赖关系。您可以使用它来延迟加载图像,视频,iframe等,并使用intersection observer api。

您可以使用npm / yarn包含lozad并使用您选择的模块捆绑器导入它:

npm install --save lozad

yarn add lozad

import lozad from 'lozad';

或者,您可以使用cdn简单地加载库,并将其添加到

接下来,对于基本实现,将类lozad添加到标记中的资源:

img.jpg

最后,在js文档中实例化lozad:

const observer = lozad();

observer.observe();

您将找到如何使用lozad github存储库上的库的所有详细信息。

如果您不想深入了解intersection observer api的工作方式,或者您只是在寻找适用于各种内容类型的快速实现,那么lozad是一个很好的选择。

只有,请注意浏览器支持,并最终将此库与intersection observer api的polyfill集成。

4延迟加载,模糊图像效果

如果你是一个中等水平的读者,你肯定已经注意到网站是如何在帖子中加载主图片的。

您首先看到的是图像的模糊、低分辨率副本,而它的高分辨率版本正被延迟加载,媒体网站上的高分辨率,延迟加载图像。

您可以通过多种方式使用这种有趣的模糊效果来延迟加载图像。

我最喜欢的技术是craig buckler。以下是此解决方案的所有优点:

性能:只有463个字节的css和1,007个字节的缩小javascript代码

支持视网膜屏幕

无依赖性:不需要jquery或其他库和框架

逐步增强以抵消旧版浏览器和javascript失败

5 yall.js

yall是一个功能丰富的延迟加载脚本,适用于图像,视频和iframe。更具体地说,它使用了intersection observer api,并在必要时巧妙地依靠传统的事件处理程序技术。

在文档中包含yall时,需要按如下方式对其进行初始化:

document.addeventlistener("domcontentloaded", yall);

接下来,要延迟加载一个简单img元素,您需要在标记中执行的操作是:

alternative text to describe image.

请注意以下事项:

您添加类慵懒的元素

值src是占位符图像

要延迟加载的图像的路径位于data-src属性内。

yall的好处包括:

intersection observer api具有出色的性能

神奇的浏览器支持(它可以追溯到ie11)

没有必要的其他依赖。

到此这篇关于网站性能延迟加载图像的五种技巧(小结)的文章就介绍到这了,更多相关图片延迟加载内容请搜索萬仟网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持萬仟网!

html5延迟加载效果,网站性能延迟加载图像的五种技巧(小结)相关推荐

  1. 计算机网络时延图,计算机网络中网站性能延迟加载图像的示例分析

    计算机网络中网站性能延迟加载图像的示例分析 发布时间:2021-06-09 11:38:56 来源:亿速云 阅读:95 作者:小新 这篇文章给大家分享的是有关计算机网络中网站性能延迟加载图像的示例分析 ...

  2. 6个原则、50条秘技提高HTML5应用及网站性能

    Jatinder Mann是微软Internet Explorer产品的一名项目经理,在BUILD 2012大会上,他做了题为"提高HTML5应用和网站性能的50条秘技(50 perform ...

  3. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  4. Elasticsearch 性能监控2(五种常见问题的解决办法)

    前言:本文为es性能监控基础的扩展,大家可以先看下性能监控基础,熟悉下es的基本原理.为翻译性质文档,感谢原作者.原始文档 类似于汽车的运行方式,Elasticsearch旨在让用户快速上手和运行,而 ...

  5. html5根号,根号5等于多少(五种技巧)

    根号5等于多少(五种技巧) 实数的大小比较,除了常规的方法以外,还有一些比较特殊的方法需要我们掌握.在学习有理数时,比较大小的方法有:(1)数轴法,在数轴上,右边的数比左边的数:(2)正数大于0,0大 ...

  6. 给文字做涂鸦效果的五种实现方案

    介绍 在很多创意网站上,我们都会见到很多文字涂鸦效果,本期我们就介绍五种方法来实现这些文字涂鸦效果,康康如何通过前端技术,一起来让你的网页更有创意吧. 当然在做之前,我们先准备一张涂鸦纹理图哟~ 正文 ...

  7. iframe异步加载_5种延迟加载图像的方法以帮助你提升网站性能与用户体验

    英文 | https://www.sitepoint.com/five-techniques-lazy-load-images-website-performance/翻译 | web前端开发(ID: ...

  8. 通过延迟加载和代码拆分提高网站性能

    by José M. Pérez 由JoséM.Pérez 通过延迟加载和代码拆分提高网站性能 (Improve the Performance of your Site with Lazy-Load ...

  9. 6个最好的WordPress图像优化器插件提高WordPress网站性能

    WordPress图像优化器插件, wordpress建站, wordpress教程 提升WordPress网站的性能发生在几个层面,可以做一些事情来优化网站,有很多非常好的图像压缩和优化工具.选择正 ...

最新文章

  1. 基于用户画像 《列变行》 特征打标显示
  2. MySQL Cluster(MySQL 集群) 初试
  3. VS 2008 mfc 智能应用程序 调用 C# webservice.(二)(gsoap+wince)
  4. PAT甲级1076 Forwards on Weibo (30 分) :[C++题解]图论、bfs
  5. Java递归基础案例-汉诺塔
  6. 树莓派编译一个C程序
  7. 【转】设置Win32窗口背景颜色
  8. 线上MySQL某个历史数据表的分区笔记
  9. Java中常用的加密算法MD5,SHA,RSA
  10. MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题
  11. opencv中的图像拼接
  12. php getter,对象访问器 getter和setter
  13. 基于词典的情感分析实验
  14. Qimage像素级操作
  15. win7计算机桌面快捷键显示桌面,win7系统右击桌面快捷小工具使用介绍
  16. goeasy+jquery+ckplayer实现动态实时视频弹幕
  17. arcgis许可服务器不运行,ArcGIS许可服务管理器无法启动问题解决方法
  18. android手机必备app,5款安卓手机必备的黑科技APP!各个都是精品,一定要低调收藏使用...
  19. Android adb wifi无线调试 USB和无线串口设置连接 无线adb
  20. 计算机毕业设计Java校园共享单车管理系统(源码+系统+mysql数据库+Lw文档)

热门文章

  1. proteus仿真arduino测电阻,数码管显示
  2. 实践篇——学习英语(第一阶段)Early Stage(共四个阶段)
  3. 计算机网络(五层协议)
  4. micro hdmi引脚定义义_网络中控4进4出HDMI矩阵
  5. [讲座论坛] 经济林之核桃类
  6. 网络***实用战术手册(UNIX)
  7. 万年历单片机课程设计百度文库_基于单片机的万年历课程设计.doc
  8. dundas chart legend checkbox
  9. Pytorch中NLLLoss
  10. edonkey.exe