我的项目中的任何HTML页面都包含两种类型的图像:
在列表页面上,通常会呈现两种类型图像的组合。现在我想要的是,使用Rails,所有图像都在运行时编译到一个或两个大精灵上,具体取决于用户图像列表或给定页面中呈现的图标/徽标列表。通过这样做,我可以避免使用img标签和深度嵌套的锚点,这些锚点传统上会出现在传出的html中。
通过后台CSS发送用户图像比img标签快X倍,让我保持html / haml干净。如果有人也可以在运行时sprite时建议我缓存问题,那会很棒吗? (如果这个东西存在,首先。)
答案 0 :(得分:1)
我不知道在Ruby中以编程方式创建sprite的方法。您可能可以使用库进行图像处理(可能是FreeImage),但这似乎相当低级别。如果您发现任何可以执行此操作的内容,请随时发布。
CSS精灵是一个图像,因此动态创建图像的常用缓存规则适用。如果你不小心,浏览器将继续使用缓存副本,用户将永远不会看到精灵的新版本。解决这个问题的几种方法是:
使用cache-control HTTP标头字段为图像设置合理的超时值。我尝试过这种方法,但无法使其正常工作。
每次重新创建时,为图像指定一个唯一的名称。在这种情况下,图像设置为永不过期。如果重建,则会为其指定一个新名称,从而导致浏览器对其发出新请求。我成功地使用了它。 Rails对您的样式表和javascript文件做了同样的事情。
另一种选择可能是使用ETags。每个版本都有一个新的,唯一的ETag,浏览器使用它来确定它是应该使用缓存副本还是获取最新版本。我以前没用过这个,但看起来它可能适合你的问题。