浏览器中图片的请求情况

浏览器渲染页面顺序

浏览器渲染

  • 浏览器通过网络请求,获取到请求页面;
  • 上从到下开始解析页面,生成DOM树和CSSOM树;
    (这两个树的生成可以同步进行,当解析页面遇到<link>标签时,就会加载直接加载link标签,生成CSSOM树;
  • 遇到<script>标签则停止DOM树和CSSOM树的加载,等到js代码执行完,再继续加载DOM树和CSSOM树;
  • 等到DOM树和CSSOM树加载完成后,就开始构建渲染树。
  • 最后,对页面进行布局、绘制

浏览器中图片的请求情况(本文以Google浏览器为例子)

  • 不管如何引入,如果是重复引用一个图片都只会请求一次

在html中引入,<img src="xxx" />

重复请求情况

<img src="'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F1114%2F113020142315%2F201130142315-1-1200.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655975129&t=166bb67bd62967b96cb6e550c9a3fe3d" />  
 // 首次请求图片时,浏览器会查一遍缓存,发现没有该图片的缓存,所以会向发起图片请求,然后将图片缓存起来
<img src="'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F1114%2F113020142315%2F201130142315-1-1200.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655975129&t=166bb67bd62967b96cb6e550c9a3fe3d" /> 
 // 第二次请求时,浏览器会先查一遍缓存,直接用缓存中的图片

用display:none的情况

<img style=“display: none;” class="img-one" src="https://baidu.com/img1.png" />  
// 在Google浏览器中,会直接请求图片

在css中引入,background-image:url('imgUrl')

重复请求情况
两个div的背景图片链接一样,用的是同一个,所以浏览器没有重发请求


<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
<title>hello world</title>
<style>
  .img{
    width: 200px;
    height: 200px;
    background-image: url('https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F1114%2F113020142315%2F201130142315-1-1200.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655975129&t=166bb67bd62967b96cb6e550c9a3fe3d');
  }
  .img1{
    width: 200px;
    height: 200px;
    background-image: url('https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F1114%2F113020142315%2F201130142315-1-1200.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655975129&t=166bb67bd62967b96cb6e550c9a3fe3d');
  }
</style>
</head>
<body>
  <div class="img"></div>
  <div class="img1"></div>
</body>
</html>

未被使用请求情况
css属性未被使用时,图片不会加载


<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
<title>hello world</title>
<style>
  .img{
    display: none;
    width: 200px;
    height: 200px;
    background-image: url('https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F1114%2F113020142315%2F201130142315-1-1200.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655975129&t=166bb67bd62967b96cb6e550c9a3fe3d');
  }
  .img2{
    width: 200px;
    height: 200px;
    background-image: url('https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F4k%2Fs%2F02%2F2109242306111155-0-lp.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655976272&t=ddbc2cc42acbbdad8c3f0d46206cb206');
  }
</style>
</head>
<body>
  <div class="img"></div>
</body>
</html>

display:none
disoplay为none时,图片也不会加载


<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
<title>hello world</title>
<style>
  .img{
    display: none;
    width: 200px;
    height: 200px;
    background-image: url('https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F1114%2F113020142315%2F201130142315-1-1200.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655975129&t=166bb67bd62967b96cb6e550c9a3fe3d');
  }
  .img2{
    width: 200px;
    height: 200px;
    background-image: url('https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F4k%2Fs%2F02%2F2109242306111155-0-lp.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655976272&t=ddbc2cc42acbbdad8c3f0d46206cb206');
  }
</style>
</head>
<body>
  <div class="img"></div>
  <div class="img2"></div>
</body>
</html>

在js中引入

<!DOCTYPE html>
<html>

<head>
    <title>test</title>
    <style></style>
    <script>
        window.onload=function () {
            var boxDom = document.getElementById('box')
            // 创建一个img元素引入
            var img = document.createElement("img");
            img.src = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F4k%2Fs%2F02%2F2109242332225H9-0-lp.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655995650&t=50fe8b4e89d901518bc750f8b4cdb80f';
            boxDom.appendChild(img);

			// new一个Image对象
            var newImage = new Image();
       		newImage.src = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F4k%2Fs%2F02%2F2109242332225H9-0-lp.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655995650&t=50fe8b4e89d901518bc750f8b4cdb80f';
        	boxDom.appendChild(newImage)
        }
    </script>
</head>

<body>
    <div id="box"></div>
</body>

</html>

未被使用的情况
创建了一个Image对象,但是没有引入页面,会缓存

<!DOCTYPE html>
<html>

<head>
    <title>test</title>
    <script>
        window.onload=function () {
        // 该图片被缓存
        var newImage = new Image();
       	newImage.src = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F4k%2Fs%2F02%2F2109242332225H9-0-lp.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655995650&t=50fe8b4e89d901518bc750f8b4cdb80f';
        }
    </script>
</head>
<body>
    <div id="box"></div>
</body>
</html>

预加载&懒加载

预加载:在页面生成前,提前加载图片,等到图片需要用到的时候就不需要在加载了;
懒加载:在页面生成后,等到需要用到图片的时候,在对图片进行加载;

预加载的方法
  • dom:在<img>标签中,将display设为true
  • js:用new Image()方法,将需要的图片先缓存下来
    • img:img标签的loadind =“ eager”(不推荐,兼容性不好)
懒加载的方法
  • dom:通过页面监听,当滑动到指定位置时再加载图片
  • css:通过赋值不同的css样式,达到懒加载的效果。因为css 中的background:url(),当样式未被使用或是display:noe时,不会立刻加载图片
  • img:img标签的loadind =“lazy”(不推荐,兼容性不好)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 浏览器在以下情况下可能不会发送图片请求: 1. 图片已经被缓存,浏览器会直接从缓存加载图片而不发送请求。 2. 图片的链接错误或者图片不存在,浏览器会放弃发送请求。 3. 网络连接异常或者服务器出现错误,导致浏览器无法发送请求。 4. 浏览器的安全设置拦截了图片请求,例如浏览器禁止加载非安全来源的图片等。 5. 用户手动取消了图片请求,例如在图片还未加载完成时主动刷新页面或者关闭了页面等。 ### 回答2: 浏览器在以下情况下可能不会发送图片请求: 1. 图片请求已经被浏览器缓存:浏览器会对经常访问的图片进行缓存,如果之前已经请求过并且没有过期,浏览器会直接从缓存获取图片,而不会再发送请求。 2. 图片链接错误或无效:如果在页面引用的图片链接错误或者无效,浏览器将无法加载该图片,因此也不会发送请求。 3. 图片加载被用户取消:在图片加载过程,如果用户手动取消了图片加载或者禁用了图片加载功能,浏览器将不会发送该图片请求。 4. 图片请求被服务器拒绝:有时服务器可能会限制对特定图片资源的访问,例如通过IP地址屏蔽或者需要进行身份验证等,这时浏览器发送的图片请求可能会被服务器拒绝。 5. 图片请求浏览器阻止:浏览器在某些情况下会对图片请求进行安全性检查,如果发现请求图片存在恶意行为或者违反浏览器的安全规定,浏览器会阻止发送该请求。 总之,浏览器不会发送图片请求情况主要涉及缓存、链接错误、用户取消加载、服务器限制和浏览器安全性检查等方面。 ### 回答3: 在以下情况下,浏览器可能不会发送图片请求: 1. 用户设置了浏览器的图像加载选项为“不显示图片”或“仅显示文本”,此时浏览器不会主动发送图片请求,而只会加载网页的文本内容。 2. 当网页代码没有包含图片标签或没有正确的图片URL时,浏览器无法获取图片的地址,因此也就无法发送图片请求。 3. 网络连接异常或服务器故障时,浏览器无法正常与服务器通信,因此无法发送图片请求。 4. 图片请求被网页设计者手动禁止。有时,网页设计者可能会使用特定的技术手段(如JavaScript代码)来阻止浏览器发送图片请求,以达到某种特定的设计目的。 5. 浏览器在缓存找到了该图片的副本,并且判断缓存的图片版本是最新的,那么它可以直接从缓存读取图片,而不需要发送图片请求。 需要注意的是,根据浏览器的不同,具体的情况会有所不同。以上只是一些常见的情况,实际情况可能因浏览器版本、用户设置、网页设计等因素而有所差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值