当前位置: 首页 > 面试题库 >

为什么要使用精灵表而不是单个图像?

陈季
2023-03-14
问题内容

我在某些站点上注意到的一件事是,它们使用一个包含大量小图像的BIIIIIIIG图像,然后使用CSS background- position定义每个图像的坐标,而不是使用单个图像。

我在这里:

使用大精灵表的缺点

  • 需要加载一张大图像以仅显示一个小图像
  • 需要为每个图像编写(或生成)带有类的长样式表
  • CSS杂乱无章,可能会影响性能
  • 如果更改了一个图像(或添加了另一个图像),则图像和与之关联的CSS都可能会遇到缓存问题
  • 需要一个<div>具有适当样式(display: inline-block; width: 32px; height: 32px; background-image: url('spritesheet.png');)的样式,该样式为混合添加了另一个类别。
  • 我现在不记得要输入的更多内容了。

使用大精灵表的优点

  • …呃…还没有。

实际上,这里最接近专业人士的是,当我将工作表切成单个图像时,结果文件夹 在磁盘上 占用了3Mb
(由于每个文件小于100字节,而我的分配大小为4k)。实际文件本身的大小不到工作表和CSS的一半,因此,
即使HTTP请求的开销很大,也可以节省大量空间

基本上,我的问题是:有人在使用大张纸而不是单个图像上有任何优点吗?


问题答案:

目的是减少HTTP请求。另外,有时压缩后的精灵的重量会小于原始图像。

最近,我有一个网站,网站上有很多透明的渐变色(从白色到透明,从灰色到透明),在透明图像上有一些黑白。通过将它们全部放置在一个精灵中并将png中的颜色减少到8,我可以使精灵在文件大小上小于原始图像(只是…节省了约0.5%)。通过将HTTP请求的数量从10个减少到1个,虽然意味着站点加载速度更快(如果测量从第一次连接到传输的所有数据的时间)。

在这种情况下,发现可测量的增加。

我同意,尽管有可能使事情搞砸,最终产生比所需大的精灵,特别是如果您不使用PNG压缩。

请注意,在发布此文档后的两年内–如果您使用的是SSL,则应研究SPDY(我再过两年的笔记将提到HTTP 2.0而不是SPDY!)。
SPDY消除了拼写的好处。



 类似资料:
  • 问题内容: 我不确定为什么列出项目时为什么需要使用ul-li而不是简单地使用div。我可以使两者看起来完全一样,因此与创建div相比,创建无序列表的功能优势在哪里? 问题答案: 为了语义正确。HTML具有表达事物列表的功能,它可以帮助Google机器人,屏幕阅读器以及所有不仅仅关心网站外观的用户更好地了解您的内容。

  • 问题内容: 目前使用jQuery,当我需要在发生点击时做一些事情时,我会像这样… 我正在看别人在项目上有的代码,他们这样做是… 请注意,就我所知,它似乎在做相同的事情,除了它们使用的是live()函数(现在已弃用并且jQuery文档说要使用live()函数),但是无论哪种方式,为什么要使用live / on()而不是我的第一个示例? 问题答案: 因为您可能具有动态生成的元素(例如,来自AJAX调用

  • 问题内容: 在selenium.webdriver.common.by中使用By代替常规的find_element_by _…方法的目的和好处是什么?例如: vs: 问题答案: 据documentatio ñ 似乎是一种“ 私人 所使用的”法的方法和还可以使用页面对象 因此,使用Page Object模式是您可能需要+ 而不是的原因。 例如,您有一些包含元素值的变量 然后用它来定位元素为 如果由于

  • 问题内容: 我一直在阅读Go,并为这个基本问题感到困惑。 在Go中,很明显,切片更灵活,并且在需要一系列数据时通常可以代替数组使用。 阅读了大多数文档,他们似乎鼓励开发人员只使用切片而不是数组。我得到的印象是,创建者可以简单地将数组设计为可调整大小的,而无需整个切片部分即可完成。实际上,这样的设计会使该语言更易于理解,甚至鼓励使用更多惯用的代码。 那么,为什么创建者首先要允许数组呢?什么时候可以使

  • 我正在使用libgdx,我有一个平铺的地图,我想把精灵画在上面。然而,精灵被绘制到实际的窗口上,所以当我移动相机时,精灵保持在原来的位置?我想让精灵在地图上移动。 这就是我当前渲染对象的方式 它总是在屏幕的中间,但是我想能够像移动相机一样移动它们(例如,W,A,S,D),并用方向键移动我的播放器。然后,如果我想把相机锁定在播放器上,但从另一方面来说,它是免费的。 我是libgdx的新手,所以请容忍

  • 我有什么理由使用 而不是 输出应该是相同的,我所做的基准测试似乎表明稍微快一点(需要评估所有非标准评估输入)。 那么,对于如此简单的情况,有什么理由让我考虑切换到< code>purrr::map呢?我在这里不是问你喜欢或不喜欢purrr提供的语法和其他功能。,但严格来说是关于< code>purrr::map与< code>lapply的比较,假设使用标准评估,即< code>map(