当前位置:网站首页>DOM之预加载和懒加载
DOM之预加载和懒加载
2022-07-22 03:10:00 【前端小草籽】
目录
加载:把资源的编码请求过来。
一个页面的显现是有很多的加载资源组合而成的。
预加载
1.什么是预加载?
提前加载图片,当用户需要查看时可直接从本地缓存中渲染
里面有一个技术支撑,叫:同源加载的优化
就是:相同地址的资源,只加载一次,加载后放到浏览器的某个缓存文件中,下次需要用到该地址的资源时,浏览器直接从缓存文件中调取(很快),就不用再去重新加载(慢)。
2.为什么要使用预加载?
图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度。这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速、无缝地发布,也可帮助用户在浏览你网站内容时获得更好的用户体验。
3.实现预加载的方法有哪些?
方法一:用CSS和JavaScript实现预加载
方法二:仅使用JavaScript实现预加载
方法三:使用Ajax实现预加载
预加载的应用:精灵图,把小图标们都放到一张图片上,然后预加载。到程序需要用到小图标时,直接就调用加载好的精灵图进行操作进行,不用再多次去加载小图标了。
懒加载
1.什么是懒加载?
懒加载也就是延迟加载。
当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次,俗称占位图),只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来。这就是图片懒加载。
2.为什么要使用懒加载?
很多页面,内容很丰富,页面很长,图片较多。比如说各种商城页面。这些页面图片数量多,而且比较大,少说百来K,多则上兆。要是页面载入就一次性加载完毕。估计大家都会等到黄花变成黄花菜了。
3.懒加载的原理是什么?
页面中的img元素,如果没有src属性,浏览器就不会发出请求去下载图片,只有通过javascript设置了图片路径,浏览器才会发送请求。
懒加载的原理就是先在页面中把所有的图片统一使用一张占位图进行占位,把正真的路径存在元素的“data-url”(这个名字起个自己认识好记的就行)属性里,要用的时候就取出来,再设置;
4.懒加载的实现步骤?
1)首先,不要将图片地址放到src属性中,而是放到其它属性(data-original 自定义属性)中。
2)页面加载完成后,根据scrollTop判断图片是否在用户的视野内,如果在,则将data-original属性中的值取出存放到src属性中。
3)在滚动事件中重复判断图片是否进入视野,如果进入,则将data-original属性中的值取出存放到src属性中。
5.懒加载的优点是什么?
页面加载速度快、可以减轻服务器的压力、节约了流量,用户体验好
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!-- 懒加载: 先不加载 等条件成立时再加载-->
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p id="p1">hello66666666666</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<script>
// 当滚动条 滚到id="p1"的p元素时,才加载后面的资源
window.onload = function () {
document.onscroll = function (e) {
let top = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop
// console.log(p1.offsetTop,top, 6666)
let h = cHeight = window.innerHeight || document.body.clientHeight;
console.log(top, img2.offsetTop - h - 100)
if (top >= (img2.offsetTop - h - 100)) {
console.log(33333333333)
img2.src = img2.dataset.src1
}
}
}
</script>
<img id="img2"
data-src1="https://img1.baidu.com/it/u=1966616150,2146512490&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1658422800&t=f99225a791b634226dcd5ee47c8b5f3f">
</body>
</html>
分析:等滚动条向下滑动到某个位置才开始加载 #img2这张图片。
预加载和懒加载的对比
1)概念:
懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。
预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。
2)区别:
两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力。
3)懒加载的意义及实现方式有:
意义:
懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。
实现方式:
1.第一种是纯粹的延迟加载,使用setTimeOut或setInterval进行加载延迟.
2.第二种是条件加载,符合某些条件,或触发了某些事件才开始异步下载。
3.第三种是可视区加载,即仅加载用户可以看到的区域,这个主要由监控滚动条来实现,一般会在距用户看到某图片前一定距离遍开始加载,这样能保证用户拉下时正好能看到图片。
4)预加载的意义及实现方式有:
意义:
预加载可以说是牺牲服务器前端性能,换取更好的用户体验,这样可以使用户的操作得到最快的反映。
实现方式:
实现预载的方法非常多,比如:用CSS和JavaScript实现预加载;仅使用JavaScript实现预加载;使用Ajax实现预加载。
常用的是new Image();设置其src来实现预载,再使用onload方法回调预载完成事件。只要浏览器把图片下载到本地,同样的src就会使用缓存,这是最基本也是最实用的预载方法。当Image下载完图片头后,会得到宽和高,因此可以在预载前得到图片的大小(方法是用记时器轮循宽高变化)。
边栏推荐
- 牛客2022暑期集训第一场C题 Grab the Seat! 题解
- Pull daily activities, use cloud functions to send wechat applet subscription messages
- 面试刁钻问题应对思路
- Niuke 2022 summer training session I chiitoitsu solution
- golang语言cli库
- The simple use of ADB command combined with monkey is super detailed
- Zero basic learning canoe panel (2) -- control layout
- C语言实现通讯录详细教学
- [07] function call: why does stack overflow happen?
- [error] solution: not creating XLA devices, TF_ xla_ enable_ xla_ devices not set
猜你喜欢
随机推荐
[medical image segmentation] using deep learning: a survey
[06] instruction jump: it turns out that if... Else is goto
Upload pictures to the IIS server of this machine, and the results are returned in the form of web address, which can be accessed directly
mysql安装失败,不知道什么原因
LeetCode 0814. 二叉树剪枝
Bannertext (watermark text)
Record a summary of JMeter pressure test practice
Check for degenerate boxes
Can you still find records in browser traceless browsing, and how to turn on traceless mode
单调栈框架
小乌龟上传远程仓库
Comparison between deep convolution and ordinary convolution
img.shape[-2:]/len(img.shape[-2:]):GeneralizedRCNN:original_ image_ Torch in sizes_ assert
18.redis的持久化机制是什么?各自的优缺点?
AutoComplete(自动完成)
Wechat applet realizes PDF preview function - pdf.js (including source code analysis)
2022.7.21 special matrix compression
Cron expression explanation
9个好习惯提高你的幸福感
Tensorboard安装与使用