ajax预加载html seo,前端性能优化 — JS预加载和懒加载

JS预加载

需求:有时我们需要实现例如快速快速切换页面、图片之类的功能时,能尽快的加载出我们所需的图片会极大提升用户体验,这时用预加载将图片先缓存到浏览器,用户使用需显示图片时无疑会顺畅很多。

核心:当一个图片在其它地方被加载过,那么它就会存在于浏览器缓存中,用到它时可直接从本地缓存中渲染。

特点:增强用户的体验,但会加载服务器的负担。

实现方式:

1. CSS方式

通过css中设置background的方式将图片加载进缓存,写在任意标签下,设置background-position使其不可见

background: url("img.jpg") no-repeat -9999px -9999px;

2. JS方式

实现图片预加载

3. AJAX方式

实现CSS和JS预加载

window.onload = function() {

setTimeout(function() {

var xhr = new XMLHttpRequest();

xhr.open('GET', 'http://domain.tld/preload.js');

xhr.send();

xhr = new XMLHttpRequest();

xhr.open('GET', 'http://domain.tld/preload.css');

xhr.send();

// preload image

new Image().src = "http://domain.tld/preload.png";

}, 1000);

};

JS懒加载

需求:试想当一个网页有非常多的图片时,那么加载整个页面的时间就会大量增加,对用户而言需要好几秒的时间加载一个页面无疑是不友好的。然而更多时候用户并不会浏览到全部加载进来的图片,所以当用户浏览到当前视口时再去加载相应的图片无疑是两全其美的选择。

核心:将当前可视区域的图片加载进来,监听滚动显示图片。

特点:页面加载速度快、可以减轻服务器的压力、节约了流量,用户体验好。

实现方式:

1. 动态设置img的src属性

1) 首先,不要将图片地址放到src属性中,而是放到其它属性(data-original)中。

2) 页面加载完成后,根据scrollTop判断图片是否在用户的视野内,如果在,则将data-original属性中的值取出存放到src属性中。

3) 在滚动事件中重复判断图片是否进入视野,如果进入,则将data-original属性中的值取出存放到src属性中。

这里有一个细节,当img的src为空时,仍然会对服务器发起一次请求,详情可参看:http://youngae520.lofter.com/post/28e9e5_a67a8a,因此使用此种方式往往会默认在src中写入一个小的图片作为默认图片。

页面懒加载

79d2748998b9f222177e8d8c5e8b9213.png

ac3c27104f880a38b41874d2c931ccec.png

1f47f68dbf13d7266cf4f1bc68b55705.png

7ebcb014bbd8ccf1318ee86dbfeaacaf.png

8e69867da42907de8f77730688d00906.png

8d21b16aae405d1e48acf2bdeaac2da2.png

79d2748998b9f222177e8d8c5e8b9213.png

ac3c27104f880a38b41874d2c931ccec.png

1f47f68dbf13d7266cf4f1bc68b55705.png

7ebcb014bbd8ccf1318ee86dbfeaacaf.png

8e69867da42907de8f77730688d00906.png

8d21b16aae405d1e48acf2bdeaac2da2.png

79d2748998b9f222177e8d8c5e8b9213.png

ac3c27104f880a38b41874d2c931ccec.png

1f47f68dbf13d7266cf4f1bc68b55705.png

7ebcb014bbd8ccf1318ee86dbfeaacaf.png

8e69867da42907de8f77730688d00906.png

8d21b16aae405d1e48acf2bdeaac2da2.png

emmm......有没有发现这样写的问题......

好多代码啊~用户不一定会滚动到下面,而且JS中频繁的DOM操作仍然会影响性能~

2. innerHtml

考虑到上述问题,我就去京东主页上去偷学了一下他们咋实现的~

首先我们来看“频道广场”的下面有好多空的div(现在还没有滚动到那里~):

34e0f5c3468a3fbab9ca6dcb9e924deb.png

而当我滚动到对应的地方时,再查看源代码:

1ef6002ceb0207f5b20bb20098d2dc1c.png

发现不仅仅是这些显示图片的item里多了内容,其他的地方也多了很多东西,让我们随意看一个item:

5af058db154aead6fbb58817eb2871d2.png

多么熟悉的lazyimg出现了~~~~~~ 所以我怀疑这种做法是通过直接写innerHtml实现的,相比于第一种设置src属性的方法,首先刚开始加载的html就少了很多,那么页面渲染就会更快~ 其次直接写html也就避免了频繁的DOM操作。

相关参考:

https://www.jianshu.com/p/5456a52e73e9

https://www.jianshu.com/p/c8a7c2019c09

https://www.cnblogs.com/leyan/p/6085148.html

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

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

相关文章

和平精英显示服务器人数太多,和平精英到底有多差 导致玩家纷纷国际服

原标题:和平精英到底有多差 导致玩家纷纷国际服和平精英上线以来争议不断,百分之九十九是对和平精英的各种不满,还有百分之一是喜欢和平精英,认为刺激战场已经免费给我们玩,让腾讯亏了很多钱,现在和平精英上…

python中的wx_配置 Python的wxWidgets可视开发环境 | 学步园

注:转载请注明出处 一、下载 Python 2.5.1 这一步是必须做的,下载 Python 语言的 SDK 下载地址(直接复制到迅雷):点击下载 下载完成后安装 Python 2.5.1,注意安装路径中不要有空格,不然会引起一些问题。 二、下载 wxPy…

的write方法有哪些参数_向子进程传递大量数据的方法

如何传递大型数据给子进程昨天的一篇文章中,我们说到如果想向一个子进程传输多于32767个字符的数据,我们需要寻找其他的方法(而不是命令行参数)来实现。我们能想到的第一个方法是:WM_COPYDATA。当子进程创建并进入消息循环后,我们…

厉害了!中关村软件园人工智能军团有料有看点

人工智能已成为当下全球科技界的新热点,中外竞相攀登这座划时代的科技高峰。上月,国务院印发《新一代人工智能发展规划》,明确将人工智能作为未来国家重要的发展战略。《规划》提出前瞻布局新一代人工智能重大科技项目,到2030年中…

Hive的使用之hwi

概述 hwi是hive开发的网页形式查看数据。方便非专业人士使用。 安装步骤 1、下载hive源码包 地址:http://apache.fayea.com/hive/ apache-hive-2.1.0-src.tar.gz 2、打包war 解压apache-hive-2.1.0-src.tar.gz源码包,进入到 C:\Users\zengmg\Deskto…

c 服务器传输大文件,cend.me:不须经过服务器,直接点对点的文件传输免费服务...

要传送文件给远程的手机、平板、电脑等设备,通常的做法就是先将文件上传到服务器存放,然后再从服务器下载,这样的做法看似合理,但如果上传的同时就由远程的设备来接收,不要经过服务器,这样就能更节省上、下…

Thrift源码学习二——Server层

Thrift 提供了如图五种模式:TSimpleServer、TNonblockingServer、THsHaServer、TThreadPoolServer、TThreadSelectorServer ​​ TSimpleServer、TThreadPoolServer 属于阻塞模型 TNonblockingServer、THsHaServer、TThreadedSelectorServer 属于非阻塞模型 TServer…

base64是哪个jar包的_涨知识 | 用maven轻松管理jar包

前言相信只要做过 Java 开发的童鞋们,对 Ant 想必都不陌生,我们往往使用 Ant 来构建项目,尤其是涉及到特别繁杂的工作量,一个 build.xml 能够完成编译、测试、打包、部署等很多任务,这在很大的程度上解放了程序员们的双…

JMS(Java消息服务)与消息队列ActiveMQ基本使用(一)

最近的项目中用到了mq,之前自己一直在码农一样的照葫芦画瓢。最近几天研究了下,把自己所有看下来的文档和了解总结一下。 一. 认识JMS 1.概述 对于JMS,百度百科,是这样介绍的:JMS即Java消息服务(Java Message Service&…

hive复合数据类型之struct

概述 STRUCT:STRUCT可以包含不同数据类型的元素。这些元素可以通过”点语法”的方式来得到所需要的元素,比如user是一个STRUCT类型,那么可以通过user.address得到这个用户的地址。 操作实例 1、创建表 create table student_test(id int,in…

hive复合数据类型之array

概述 ARRAY:ARRAY类型是由一系列相同数据类型的元素组成,这些元素可以通过下标来访问。比如有一个ARRAY类型的变量fruits,它是由[apple,orange,mango]组成,那么我们可以通过fruits[1]来访问元素orange,因为ARRAY类型的…

hive复合数据类型之map

概述 MAP:MAP包含key->value键值对,可以通过key来访问元素。比如”userlist”是一个map类型,其中username是key,password是value;那么我们可以通过userlist[username]来得到这个用户对应的password; 操…

Beego框架使用

为什么80%的码农都做不了架构师&#xff1f;>>> Beego Web项目目录结构 new 命令是新建一个 Web 项目&#xff0c;我们在命令行下执行 bee new <项目名> 就可以创建一个新的项目。但是注意该命令必须在 $GOPATH/src 下执行。最后会在 $GOPATH/src 相应目录下…

oracle下lag和lead分析函数

Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。 这种操作可以代替表的自联接&#xff0c;并且LAG和LEAD有更高的效率。 语法&#xff1a; [sql] view plaincopy /*语法*/ lag(exp_str,offset,defval) over() Lead(…

jtessboxeditorfx 界面显示不出来_macOS 使用 XQuartz 支持 X11 实现 Linux 图形化界面显示...

更多奇技淫巧欢迎订阅博客&#xff1a;https://fuckcloudnative.io前言在 Windows 中相信大家已经很熟悉使用 Xmanager(Xshell), MobaXterm, SecureCRT 通过 X11 实现 Linux 图形化界面显示&#xff0c;我的需求是在 macOS 下使用 iTerm2 作为 Terminal 实现 X11 图形化界面显示…

EntityFramework Core 2.0 Explicitly Compiled Query(显式编译查询)

前言 EntityFramework Core 2.0引入了显式编译查询&#xff0c;在查询数据时预先编译好LINQ查询便于在请求数据时能够立即响应。显式编译查询提供了高可用场景&#xff0c;通过使用显式编译的查询可以提高查询性能。EF Core已经使用查询表达式的散列来表示自动编译和缓存查询&a…

.net 导出excel_Qt编写的项目作品18-数据导出到Excel及Pdf和打印数据

一、功能特点原创导出数据机制&#xff0c;不依赖任何office组件或者操作系统等第三方库&#xff0c;尤其是支持嵌入式linux。10万行数据9个字段只需要2秒钟完成。只需要四个步骤即可开始急速导出大量数据到Excel。同时提供直接写入数据接口和多线程写入数据接口&#xff0c;不…

图像增强_Keras 常用的图像增强方式

欢迎关注 “小白玩转Python”&#xff0c;发现更多 “有趣”在使用神经网络和深度学习模型时&#xff0c;需要进行数据准备。对于更复杂的物体识别任务&#xff0c;也越来越需要增加数据量。数据增加意味着增加数据量。换句话说&#xff0c;拥有更大的数据集意味着更健壮的模型…

Facebook产品经理的三年叙事与协作思考

产品经理和研发工程师的关系经常被大家调侃&#xff0c;可偏偏就有同时受到研发和设计都喜欢的“别人家的产品经理”&#xff0c;沟通协调、对接需求、项目把控面面俱到还有好人缘。有没有人天生就是产品经理&#xff1f;产品经理的工作就是写需求写需求和写需求么&#xff1f;…

sis新地址_坚若磐石不掉速,老平台升级新选择,入手昱联Asint 500G SSD

我是文章的原作者&#xff0c;文章首发于&#xff1a;什么值得买爱折腾的老狐狸​zhiyou.smzdm.com首发文章链接&#xff1a;坚若磐石不掉速&#xff0c;老平台升级新选择&#xff0c;入手昱联Asint 500G SSD _值客原创_什么值得买​post.smzdm.com虽然说&#xff0c;现在越来越…