网站性能优化:懒加载和预加载

news/2024/5/9 22:40:13/文章来源:https://blog.csdn.net/qq_37003559/article/details/103886603

一、懒加载

1.什么是懒加载

懒加载也叫延迟加载,指的是在长网页中延迟加载图像,是一种很好优化网页性能的方式。用户滚动到它们之前,可视区域外的图像不会加载。这与图像预加载相反,在长网页上使用延迟加载将使网页加载更快。在某些情况下,它还可以帮助减少服务器负载。常适用图片很多,页面很长的电商网站场景中。

2.为什么要用懒加载

  • 能提升用户的体验,不妨设想下,用户打开像手机淘宝长页面的时候,如果页面上所有的图片都需要加载,由于图片数目较大,等待时间很长,用户难免会心生抱怨,这就严重影响用户体验。
  • 减少无效资源的加载,这样能明显减少了服务器的压力和流量,也能够减小浏览器的负担。
  • 防止并发加载的资源过多会阻塞js的加载,影响网站的正常使用。

3.懒加载的原理

首先将页面上的图片的 src 属性设为空字符串,而图片的真实路径则设置在data-original属性中,
当页面滚动的时候需要去监听scroll事件,在scroll事件的回调中,判断我们的懒加载的图片是否进入可视区域,如果图片在可视区内将图片的 src 属性设置为data-original 的值,这样就可以实现延迟加载。

4.懒加载实现步骤

 

<html lang="en">
<head><meta charset="UTF-8"><title>Lazyload</title><style>.image-item {display: block;margin-bottom: 50px;height: 200px;//一定记得设置图片高度}</style>
</head>
<body>
<img src="" class="image-item" lazyload="true"  data-original="images/1.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/2.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/3.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/4.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/5.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/6.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/7.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/8.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/9.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/10.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/11.png"/>
<img src="" class="image-item" lazyload="true"  data-original="images/12.png"/>
<script>
var viewHeight =document.documentElement.clientHeight//获取可视区高度
function lazyload(){
var eles=document.querySelectorAll('img[data-original][lazyload]')
Array.prototype.forEach.call(eles,function(item,index){
var rect
if(item.dataset.original==="")return
rect=item.getBoundingClientRect()// 用于获得页面中某个元素的左,上,右和下分别相对浏览器视窗的位置
if(rect.bottom>=0 && rect.top < viewHeight){
!function(){var img=new Image()img.src=item.dataset.originalimg.onload=function(){item.src=img.src}
item.removeAttribute("data-original")//移除属性,下次不再遍历
item.removeAttribute("lazyload")}()}})
}
lazyload()//刚开始还没滚动屏幕时,要先触发一次函数,初始化首页的页面图片
document.addEventListener("scroll",lazyload)
</script>
</body>
</html>

二、预加载

1.什么是预加载

资源预加载是另一个性能优化技术,我们可以使用该技术来预先告知浏览器某些资源可能在将来会被使用到。预加载简单来说就是将所有所需的资源提前请求加载到本地,这样后面在需要用到时就直接从缓存取资源

2.为什么要用预加载

在网页全部加载之前,对一些主要内容进行加载,以提供给用户更好的体验,减少等待的时间。否则,如果一个页面的内容过于庞大,没有使用预加载技术的页面就会长时间的展现为一片空白,直到所有内容加载完毕。

3.实现预加载的几种办法

  • 使用HTML标签

<img src="http://pic26.nipic.com/20121213/6168183 0044449030002.jpg" style="display:none"/>

  • 使用Image对象

<script src="./myPreload.js"></script>

 

//myPreload.js文件
var image= new Image()
image.src="http://pic26.nipic.com/20121213/6168183 004444903000 2.jpg"
  • 使用XMLHttpRequest对象,虽然存在跨域问题,但会精细控制预加载过程

 

var xmlhttprequest=new XMLHttpRequest();
xmlhttprequest.onreadystatechange=callback;
xmlhttprequest.onprogress=progressCallback;
xmlhttprequest.open("GET","http://image.baidu.com/mouse,jpg",true);
xmlhttprequest.send();
function callback(){if(xmlhttprequest.readyState==4&& xmlhttprequest.status==200){var responseText=xmlhttprequest.responseText;}else{console.log("Request was unsuccessful:"+xmlhttprequest.status);}
}
function progressCallback(e){
e=e || event;
if(e.lengthComputable){
console.log("Received"+e.loaded+"of"+e.total+"bytes")
}
}
  • 使用PreloadJS库

PreloadJS提供了一种预加载内容的一致方式,以便在HTML应用程序中使用。预加载可以使用HTML标签以及XHR来完成。默认情况下,PreloadJS会尝试使用XHR加载内容,因为它提供了对进度和完成事件的更好支持,但是由于跨域问题,使用基于标记的加载可能更好。

 

//使用preload.js
var queue=new createjs.LoadQueue();//默认是xhr对象,如果是new createjs.LoadQueue(false)是指使用HTML标签,可以跨域
queue.on("complete",handleComplete,this);
queue.loadManifest([
{id:"myImage",src:"http://pic26.nipic.com/20121213/6168183  0044449030002.jpg"},
{id:"myImage2",src:"http://pic9.nipic.com/20100814/2839526  1931471581702.jpg"}
]);
function handleComplete(){var image=queue.getResuLt("myImage");document.body.appendChild(image);
}

三、懒加载和预加载的对比

两者都是提高页面性能有效的办法,两者主要区别是一个是提前加载,一个是迟缓甚至不加载。懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力,但会显著减少等待时间提高用户体验

 

四、参考文章

详解懒加载和预加载(js)

懒加载和预加载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_812946.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 网站 访问日志在哪里看,怎样查看网站linux服务器日志

怎样查看网站linux服务器日志[2020-09-08 08:32:43] 简介:linux下查看php错误日志的方法&#xff1a;1、打开php.ini配置文件&#xff0c;开启错误日志&#xff1b;2、重启web服务器&#xff1b;3、查看错误日志存放位置&#xff1b;4、执行【tail -f 50 /var/php_errors.log】…

网站发送Mail功能类

usingSystem;usingSystem.Web.Mail;usingSystem.Configuration;usingSystem.Net.Mail;/**//// <summary>/// 网站发送Mail功能类/// </summary>publicclassMailHelper{ private static string sendUserName ConfigurationManager.AppSettings["sendUserNa…

[导入] 网站架构之主页设计

摘要: 网站架构之主页设计&#xff0d;用户体验良好的网站其主页需要具备的十二个使命思域最近在给编辑部培训的时候发现一个问题&#xff0c;就是他们在设计专题或者页面的时候自我意识太强&#xff0c;缺少页面设计的基本思维&#xff0c;想怎么设计就怎么设计&#xff0c;有…

如何在VS 2005 SP1中使用VS的web服务器运行一个相对于根目录“/”的网站

在VS2008里点“调试”后。站点会根据现有站点的名称产生一个虚拟目录名&#xff0c;这给调试带来很大的影响。特别是绝对路径的站点图片受到影响。 解决方法一来源&#xff1a;http://msdn.microsoft.com/zh-cn/library/ms178109.aspx 为 ASP.NET Development Server 指定端口 …

海洋工作室——网站建设专家:How to check the SQL statement execute time on SQL Server ?...

Check this,setstatisticsprofile onsetstatisticsio onsetstatisticstime ongo<Your SQL Statement goes here>gosetstatisticsprofile offsetstatisticsio offsetstatisticstime off转载于:https://www.cnblogs.com/OceanChen/archive/2009/10/12/1581791.html

获取 HTML5 网页设计灵感的10个网站推荐

这篇文章向大家推荐10个收集 HTML5 网页作品的网站&#xff0c;让大家感受一下 HTML5 的魅力。作为下一代网页标准&#xff0c;HTML5 增加了很多新标签以及新特性&#xff0c;正引领网页技术革命。希望这些优秀的 HTML5 网页案例能带给大家制作 HTML5 网页的灵感。 HTML5 Galle…

27个最佳的矢量素材免费下载网站推荐

在工作中&#xff0c;设计师经常需要到网上搜索免费资源以更快更好的完成设计项目。网上有很多的矢量素材下载网站&#xff0c;下面就为大家收集了27个资源非常丰富的免费矢量素材下载网站&#xff0c;希望你会喜欢这个清单。 1. Free Vectors Daily 2. Blood Sweet Vector 3. …

中冠百年|中冠百年理财网站手机理财

现今&#xff0c;中国是人均储蓄率最高的国家&#xff0c;已超3万。比起储蓄&#xff0c;个人网上理财在国内并不多见。因为很多都觉得个人网上理财是有钱人的事&#xff0c;穷人只要进行储蓄就要可以了。 中冠百年是一家为用户提供多元化投资等交易服务的理财公司&#xff0c…

仿牌网站服务器,主机侦探:还在为选择仿牌服务器发愁吗?

外贸仿牌最近比较火&#xff0c;SEO也开始盯上了这个商机&#xff0c;对于现在这样一个环境来说是非常容易的。如果换作是以前&#xff0c;大多数人连仿牌这个字眼提都不敢提&#xff0c;而今&#xff0c;不仅老板做仿牌&#xff0c;现在就连他的下手也开始学会做仿牌了!相对于…

服务器目标文件夹访问被拒绝,win10系统访问文件夹被拒绝怎么办_网站服务器运行维护...

linux 无法启动mysql怎么办_网站服务器运行维护linux无法启动mysql的解决办法&#xff1a;首先直接进入“/etc/my.cnf”&#xff1b;然后重启mysql&#xff1b;最后执行命令“update user set passwordpassword("") where user"root";”即可。右键点击要访…

WordPress快速建站

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; 这篇文章将介绍如何使用WordPress建立一个博客、网站和论坛。WordPress是基于PHP的博客架设工具。它提供了一套开源的PHP代码以方便用户在支持PH…

SEO搜索引擎优化:为什么要做SEO,为企业能带来什么价值(好处)?

SEO搜索引擎优化 SEO既Search Engine Optimization&#xff0c;翻译为搜索引擎优化&#xff0c;是一种利用技术手段提升网站在搜索引擎之中的排名的方式&#xff0c;让搜索引擎更为信任网站&#xff0c;通过排在搜索引擎的前页从而获得更多的流量。 SEO按技术手段一般分为2种&…

关于SEO与搜索引擎排名现状分析与SEO去向

关于SEO与搜索引擎排名现状分析与SEO去向 网站优化不仅仅局限于搜索引擎排名&#xff1f; 有一个时间&#xff0c;一个关键字的排名第一是完全值得追求的胜利 - 一个时间&#xff0c;你可以建立一个关键字列表&#xff0c;制作300字的原创文章&#xff0c;你的网站将带动源源不…

中国企业网站建设服务应用普及率

文章来源&#xff1a;聚思博新 原文地址&#xff1a;http://www.jusiboxin.com/news/ind/339.html中国企业互联网接入数据&#xff08;中国企业网站建设数量比例&#xff09; - 一项非官方调查显示&#xff0c;去年10个中国企业中只有3.7个企业建立有企业官方网站&#xff0c;只…

百度网站打不开了,只有百度首页跟搜索页打不开其它能正常打开怎么解决?

写在开头补充&#xff1a; 1.如果出现“您连接的不是私密连接”请点击【高级】或者【详细】&#xff1b;&#xff08;针对火狐浏览器与谷歌浏览器&#xff09; 2.如果是访问“http://www.baidu.com”不行&#xff0c;请替换“https://www.baidu.com”试试&#xff1b; 打不开百…

网站被黑形式以及挂马病毒特征大全(附解决方案)

原文标题&#xff1a;Yandex搜索网站被黑形式挂马病毒特征大全&#xff08;附首页被篡改杀毒解决方案&#xff09; 原文地址&#xff1a;https://www.o0310o.com/yandex/143.html 如果下面的列表不包含您需要的判断&#xff0c;请使用Yandex 的通用说明对受感染的站点进行杀毒…

百度站长平台网站验证图文教程

原文标题&#xff1a;百度站长平台&#xff1a;如何验证网站&#xff1f;&#xff08;网站验证图文教程&#xff09; - 百度 - 0oD三一o0博客 原文链接&#xff1a;https://www.o0310o.com/baidu/21.html 目录 为什么要验证网站 如何验证网站 网站验证常见错误及解决办法 …

python计算机语言有哪些_自学python编程语言都有哪些免费网站值得收藏?

python是未来人工智能最好的编程语言&#xff0c;很多程序员在有其她编程基础的情况选择学习python是比较容易的&#xff0c;当然现在很多想进入编程界的新手选择python开始接触学习编程&#xff0c;但是由于经费有限&#xff0c;只能选择最便宜的学习方式就是自学成才&#xf…

博客网站模板分享

这是我制作的一个博客网站模板&#xff0c;网站已经制作完成。 如果喜欢的可以看看&#xff0c;或者下载使用&#xff0c;下边是地址 个人博客网站模板&#xff1a;http://www.jufanshare.com/content/30.html 内容页支持响应式&#xff0c;并且集成了代码高亮工具。 下边是…