图像精灵比单独的图像更高效吗?

16

我大约两年前开始使用图像精灵,因为我看到苹果和Facebook等网站在其网站上使用它们。

毫无疑问,如果您下载一个60kb的图像,而不是三个20kb的图像,则加载页面更快,但是,最近有人告诉我,尽管精灵在加载时速度更快,但实际上在客户端方面会消耗更多内存。

在我的眼中:

  1. 精灵的加载速度更快,使用的带宽更少
  2. 从开发者的角度来看,它们更易于维护,因为所有图形都在一个地方

然而,在我的同事看来:

  1. 每次在页面上引用精灵时,图像会在内存中创建,这反过来会减慢客户端浏览器的速度
  2. 加载速度的差异不足以证明浏览器增加的内存使用量的合理性
  3. 互联网设计为以小数据包传输,因此加载较小的图像比加载较大的图像更好

这让我提出了一个问题:精灵是否真的值得使用,还是我的同事想法完全错误?


1
每次在页面上引用精灵时,图像都会在内存中创建,这反过来会减慢客户端浏览器的速度。【需要引用】 - BoltClock
1
每次写background-image:url('imageaddress');时,图片都会被缓存在计算机的内存中,从而导致浏览器变慢。这样说清楚了吗?:-) - Ben Carey
1
https://dev59.com/Cmsz5IYBdhLWcg3wNVER - Kyle
我刚刚尝试过寻找一篇我最近读到的很棒的文章,它实际上测试了精灵图理论,并发现精灵确实可以节省内存。如果我能再次找到这篇文章,我会回来发布它... - zenkaty
2
为什么浏览器需要在内存中多次存储同一张图片?这毫无意义。 - BoltClock
@BoltClock 正是我所说的,这就是为什么我要向您这些专家请教。我想确保我的理论是正确的。 - Ben Carey
3个回答

15

在同一页中多次使用同一张图片并不意味着该图片会为每个使用它的位置都复制一遍。

如果是这样的话,像这个演示例子这样的页面将会使用大约7 GB的内存。但实际上并不会。


加载一张图片总比加载多张图片快。减少请求数量对于优化网站性能非常重要。事实上,互联网只设计用于传输小数据包,因此加载多张小图片所造成的影响比可能的影响要小得多。


1
天啊,我喜欢那些会让 Firefox 崩溃的小提琴 :) - David Barker
2
@DavidBarker - 什么是Firefox? :P - Rafael Herscovici
1
@Dementic 一个崩溃的程序破坏了一切 :P - David Barker
如果在页面的多个位置使用同一张图片,它只会被请求一次(或从缓存中加载)。 - Guffa
@user2826111:你可以使用像Firebug或IE F12开发者工具这样的工具,查看网络流量。如果图像从缓存中加载,它根本不会显示为网络流量。 - Guffa
显示剩余4条评论

0

它们的价值取决于使用环境。对于我不再关注的设备,为了节省客户端处理开销。

这也可能取决于您使用的图像类型以及是否需要透明度,以及何种透明度。我读过一篇论文(链接如下!),介绍了不同类型的图像如何影响移动Web的电池寿命 - 与JPG相比,PNG具有显着的渲染开销。

另一个考虑因素是图像在页面上的用途,以及它们在页面外的用途。我曾经为一个大型网站开发了一个模板,该模板仅使用一个图像作为页面上所有精灵的图像,加载开销也很小。网站标志很好地适合精灵中,这很好,直到人们开始在Facebook上分享该网站,我们就会看到每个小图标、按钮状态等都出现在链接缩略图选择中。


0

使用精灵会消耗更多的内存。考虑到您的精灵由40帧组成。即使一次只需要显示其中几个,浏览器仍然需要解码整个精灵并将其保存在内存中。

话虽如此,这真的取决于上下文。如果您将精灵用于始终可见的按钮图标,则内存使用与使用多个图像没有区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接