zoukankan      html  css  js  c++  java
  • 图片的懒加载和预加载

    预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。

    懒加载:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。

    两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。

    懒加载对服务器前端有一定的缓解压力作用,预加载 则会增加服务器前端压力。

    懒加载:

        img的data-src属性及懒加载:当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需要请求一次),当图片出现在浏览器的可视区域内时,才设置图片真正的路径,让图片显示出来。这就是图片懒加载。

    通俗一点:

    1、就是创建一个自定义属性data-src存放真正需要显示的图片路径,而img自带的src放一张为1*1px的图片路径。

    2、当页面滚动直至此图片出现在可视区域时,用js取到该图片的data-src的值赋给src。

    ps:自定义属性可以去任何名字

    场景:对于图片过多的页面,为了加快页面加载速度,需要将页面内未出现的可视区域内的图片先不做加载,等到滚动可视区域后再去加载。

    原理:img标签的src属性用来表示图片的URL,当这个属性值不为空时,浏览器就会根据这个值发送请求,如果没有src属性就不会发送请求。所以,在页面 加入时将img标签的src指向为空或者指向一个小图片(loading或者缺省图),将真实地址存在一个自定义属性data-src中,当页面滚动时,将可视区域的图片的src值赋为真实的值。

    参考:https://www.cnblogs.com/moxiaowohuwei/p/7908877.html

    预加载:

    简单理解:就是在使用该图片资源前,先加载到本地来,真正到使用时,直接从本地请求数据就行了。

     var arr = [
              '../picture/1.jpg',
              '../picture/2.jpg',
              '../picture/3.jpg',
          ];
    
          var imgs =[]
          preLoadImg(arr);
    
          //图片预加载方法
          function preLoadImg(pars){
              for(let i=0;i<arr.length;i++){
                  imgs[i] = new Image();
                  imgs[i].src = arr[i];
              }
          }

     可以看到图片已经加载完毕了,到本地了

    现在在页面放一个img标签

    <body>
    <img src="" alt=""  id="pic"/>
     //存放图片路径的地址
       <script>
          var arr = [
              '../picture/1.jpg',
              '../picture/2.jpg',
              '../picture/3.jpg',
          ];
    
          var imgs =[]
          preLoadImg(arr);
    
          //图片预加载方法
          function preLoadImg(pars){
              for(let i=0;i<arr.length;i++){
                  imgs[i] = new Image();
                  imgs[i].src = arr[i];
              }
          }
           // 5s之后显示出该图片
          setInterval(function(){
              var pic = document.querySelector('#pic');
              pic.src = '../picture/1.jpg'
          },5000);
    
       </script>
        

    5s之后并没有重复请求1.jpg这个图片,因为之前已经请求下来了,这就是预加载

     参考:https://blog.51cto.com/11871779/2404689

  • 相关阅读:
    lombok注解详细介绍
    基于注解的SpringMVC大致开发流程
    Thymeleaf知识点总结
    thymeleaf相关知识
    Windows 命令行查看占用端口,并关闭操作
    身份证号码的正则表达式及验证详解
    mysql的查询过程和SQL语句优化
    MySQL数据库知识点整理
    MySQL数据库
    MySQL数据库
  • 原文地址:https://www.cnblogs.com/psxiao/p/11542930.html
Copyright © 2011-2022 走看看