代码之家  ›  专栏  ›  技术社区  ›  Andy E

关于CSS精灵和内存使用的快速问题

  •  15
  • Andy E  · 技术社区  · 14 年前

    一般来说,这更多的是与图像和内存有关。如果我在一个页面上多次使用同一个图像,那么每个图像都会合并到内存中吗?还是每个图像都使用单独的内存量?

    我对此很担心,因为我正在为Windows桌面小工具构建一个剥皮系统,我正在查看以默认皮肤显示图像,以便保持文件系统的整洁。同时,我想尽量减少内存占用。如果我最终得到一个包含100个图像的文件,并在整个小工具中重复使用该图像100次,我不希望出现性能问题。

    干杯。

    3 回复  |  直到 14 年前
        1
  •  14
  •   GmonC    14 年前

    测试一下怎么样?创建一个带有或不带有spriting的简单应用程序,并监视Windows内存以查看哪种方法更好。

    因为这个我要你测试一下 interesting post from Vladimir ,甚至由 Mozilla "use sprites wisely" 条目:

    (…)将此图像用作sprite。请注意,这是一个1299x15000 PNG。 它压缩得很好,实际下载量约为26K,但是浏览器 不呈现压缩图像数据。当下载此图像时, 解压缩后,它将使用几乎 75毫巴 内存(1299*15000*4)。

    (在弗拉基米尔的文章末尾,还有一些很好的参考资料需要检查)

    因为我不知道Windows是如何渲染它的小工具的(如果它不处理压缩图像数据的话),所以在没有测试的情况下很难确切地说出哪种方法更好。

    编辑: 官员 Windows Desktop blog (自2007年以来未更新)说 the HTML runtime used for Windows Gadgets is MSHTML 因此,我认为真正需要一个测试来了解应用程序如何处理CSS精灵。

    但是,如果你读到一些官方的 Windows Desktop Gadgets Windows sidebar 文件,你决定 不使用 CSS精灵,在 The GIMAGE Protocol 章节:

    此协议可用于添加 图片到小工具dom更多 比标准HTML有效 标签。这种效率的结果 从改进的缩略图处理和 图像缓存(它将尝试使用 来自Windows缓存的缩略图,如果 请求的大小小于256 像素乘以256像素)。 使用 文件或http://protocols。添加的 Gimage协议的好处是 标准图像以外的任何文件 文件可以指定为源,并且 与该文件关联的图标 显示类型。

    我会尝试使用这个协议而不是CSS精灵,并做一些测试。

    如果这些信息都不能帮到你,我想问一下 Windows Desktop Gadgets official forums .

    祝你好运!

        2
  •  5
  •   Isley Aardvark    14 年前

    图像将在缓存中显示一次(只要URL相同,并且文件名中没有附加查询字符串)。喷水是最好的方法。

        3
  •  1
  •   BalusC    14 年前

    WebBrowser通过其 ETag 响应头。如果它不存在或请求之间存在差异,则可以多次下载图像并将其存储在缓存中。如果您(实际上是Web服务器)提供唯一的 埃塔格 对于每个唯一的资源,那么任何一个合适的WebBrowser都足够聪明,可以将一个资源保存在缓存中,并在其 Expires 头允许。

    任何像样的网络服务器都会提供 埃塔格 对于静态资源,它通常是根据本地文件名、文件长度和最后修改的时间戳的组合自动生成的。但他们经常不加 到期 标题,所以您需要自己添加它。在StackOverflow上判断了您的后历史之后,我可以放心地假设您熟悉ApacheHTTPD作为Web服务器,所以我建议您看看 mod_expires documentation 学习如何自己配置到最佳状态。

    简言之,将sprite图像与 埃塔格 还有一个遥远的未来 到期 头,一切都会好起来的。