用new Image加载的图片如果不加载到页面上和加载到页面上缓存方式是否会有区别?

发布于 2022-09-07 16:18:15 字数 2492 浏览 24 评论 0

  var img = new Image();
            img.onload = () => {
                console.log('loaded')
            }
            img.src = 'https://b-ssl.duitang.com/uploads/item/201807/06/20180706150531_zFhZJ.thumb.700_0.jpeg'

用如上代码缓存的图片为什么会在背景图片用到同样图片时重新请求?

首先贴下部分实验代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .world{
            background: url('https://b-ssl.duitang.com/uploads/item/201807/06/20180706150531_zFhZJ.thumb.700_0.jpeg');
            width: 200px;
            height: 200px;
            background-size: 100% 100%;
        }
        .box{
            display: none;
        }
        .a{
            display: none;
        }
        .btn{
            background: white;
        }
    </style>
</head>
<body>
    <div class="hello " id="div">
    </div>
    <div class="a" id="a">
    </div>
    <button id="btn">Click</button>
    <script>
        window.onload = () => {
            var btn = document.getElementById('btn');
            var div = document.getElementById('div')
            btn.addEventListener('click', () => {
                div.classList.toggle('world')
            })
            var img = new Image();
            img.onload = () => {
                console.log('loaded')
            }
            img.src = 'https://b-ssl.duitang.com/uploads/item/201807/06/20180706150531_zFhZJ.thumb.700_0.jpeg'
            
        }
    </script>
</body>
</html>

以下是该代码的http包

clipboard.png
理论上来讲预加载缓存后只有一个http请求
但是连续几次的实验结果居然不一样

实验方式如下:
抓包开preserve log
清缓存
刷新然后等一段时间点click 再刷新再等一会儿事件点click 反复多次

————————分割线————————————————————————————————————————

说明:我发现用这种方式加载图片,之后的相同图片还是会向服务器重新请求
我的操作方式如下:
1、new Image进行图片预加载
2、预加载之后给一个div添加类,该类代码如下:

.world{
            background: url('https://b-ssl.duitang.com/uploads/item/201807/06/20180706150531_zFhZJ.thumb.700_0.jpeg');
            width: 200px;
            height: 200px;
            background-size: 100% 100%;
        }

为什么背景图片不直接读取new Image预加载的图片呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你好,陌生人 2022-09-14 16:18:15

这个其实要看服务器设置和浏览器设置,如果设置是不缓存,则每次请求都还会去请求。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文