• 图片请求分析


    图片的http请求,有很多种情况,那么究竟什么情况下会请求,什么情况下不会请求呢? 下面我们一探究竟!

    1. 正常图片的请求

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>imgLoad</title>
    </head>
    <body>
      <p>图片请求测试</p>
      <img src="http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg" alt="">
    </body>
    </html>

    请求结果如下:

    2. display:none情况下的请求(即DOM中存在只是不占位置)

      <img src="http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg" alt="" style="display: none">

    请求结果如下:

    3. visibility: hidden情况下的请求(即DOM中存在并且占位置)

      <img src="http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg" alt="" style="visibility: hidden;">

    同样的,还是会发出请求。

    4. 多处请求同一图片

    <p>图片请求测试</p>
      <img src="http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg" alt="">
      <p>图片请求测试</p>
      <img src="http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg" alt="">

    同样的,只请求一次。

    5. 多处背景请求同一图片

     <style>
        .test1 {
          background: url("http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg");
        }
        .text2 {
          background: url("http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg");
        }
      </style>
    </head>
    <body>
      <div class="test1">图片请求测试</div>
      <div class="test2">图片请求测试</div>

    同样地,只请求一次。

    6. css下某个不存在的元素设置了背景。

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>imgLoad</title>
      <style>
        .test1 {
          display: none;
          background: url("http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg");
        }
        .test2 {
          display: none;
          background: url("http://imgsrc.baidu.com/imgad/pic/item/caef76094b36acaf0accebde76d98d1001e99ce7.jpg");
        }
      </style>
    </head>
    <body>
      <div class="test1">图片请求测试</div>
    </body>
    </html>

    即这里.test2在DOM中是不存在的。 结果就是,不请求这个不存在元素的背景。

    7. 隐藏元素的背景

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>imgLoad</title>
      <style>
        .test1 {
          display: none;
          background: url("http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg");
        }
        .test2 {
          visibility: hidden;
          background: url("http://imgsrc.baidu.com/imgad/pic/item/caef76094b36acaf0accebde76d98d1001e99ce7.jpg");
        }
      </style>
    </head>
    <body>
      <div class="test1">图片请求测试</div>
      <div class="test2">图片请求测试</div>
    </body>
    </html>

    结果是都发出了http请求:

    8. 多重背景

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>imgLoad</title>
      <style>
        .test1 {
          background: url("http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg"), url("http://imgsrc.baidu.com/imgad/pic/item/caef76094b36acaf0accebde76d98d1001e99ce7.jpg");
        }
      </style>
    </head>
    <body>
      <div class="test1">图片请求测试</div>
    </body>
    </html>

    全部请求。

    9. script添加的

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>imgLoad</title>
      <style>
      </style>
    </head>
    <body>
      <div class="test1">图片请求测试</div>
      <script type="text/javascript">
          var el = document.createElement('div');
          el.innerHTML = '<img src="http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg" />';
          //document.body.appendChild(el);
      </script>
    </body>
    </html>

    无论是否添加到DOM中,都会发出http请求。

    10. 图片预加载

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>imgLoad</title>
      <style>
      </style>
    </head>
    <body>
      <div class="test1">图片请求测试</div>
      <script type="text/javascript">
          new Image().src = "http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg";
          new Image().src = "http://imgsrc.baidu.com/imgad/pic/item/caef76094b36acaf0accebde76d98d1001e99ce7.jpg";
      </script>
    </body>
    </html>

    这时当然会发出http请求。 如果没有js支持,可以采用隐藏元素预加载。

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>imgLoad</title>
      <style>
      </style>
    </head>
    <body>
      <div class="test1">图片请求测试</div>
      <img src="http://mingxingku.com/Data/Images/Articles/2016-03-21/3298438204.jpg" style="visibility: hidden; height: 0;  0" />
    </body>
    </html>

    可以看到,只要图片img有一个有效的src属性,那么就可以成功请求了,无论display属性如何设置,无论src属性如何设置,当然,如果请求了多个同样的图片,那么只会请求一次,另外,如果你css有背景,但是没有相应的dom,说明DOM和CSSROM是没有结合成功的,这样,就不会发出请求了。

  • 相关阅读:
    Arduino mega 2560驱动安装失败(没有建立对验证码(TM)签名的目录的发布者信任)的解决方法
    Submile text3 安装使用技巧
    window.onload
    JS简单示例
    python类和对象的底层实现
    python类中方法加单下划线、双下划线、前后双下滑线的区别
    linux下json工具jq
    Django使用自定义的authentication登录认证
    django admin
    linux网卡桥接问题与docker网卡桥接问题
  • 原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6942992.html
Copyright © 2020-2023  润新知