这些天我们可以在我们网站的主题部分指定特定于不同设备的图标,启动图像,平铺图像等的船载。几乎每个版本都需要自己的元标记来指定其目标和分辨率,例如
<link rel="icon" type="image/png" href="/icons/icon-32.png" sizes="32x32" />
<link rel="apple-touch-icon-precomposed" href="/icons/icon-152.png" sizes="152x152"/>
<link rel="apple-touch-icon-precomposed" href="/icons/icon-180.png" sizes="180x180"/>
<meta name="msapplication-TileImage" content="/icons/tile-270x270.png"/>
这是一个模板,但模板可以解决这个问题。但是,让我们假设我使用的网络服务器稍微复杂一些,实际上需要所有这些路由的代码。也许我想动态地对图像做一些事情,比如第一次请求它们时懒得生成图标分辨率,或者计算它们被请求的频率或任何有点像这样的东西。最简单的方法是使用一个只通过get-parameters获取详细信息的处理程序。所以链接现在看起来像这样:
<link rel="icon" type="image/png" href="/icon.png?h=32&w=32" sizes="32x32" />
<link rel="apple-touch-icon-precomposed" href="/icon.png?h=152&w=152" sizes="152x152"/>
<link rel="apple-touch-icon-precomposed" href="/icon.png?h=180&w=180" sizes="180x180"/>
<meta name="msapplication-TileImage" content="/icon.png?h=270&w=270&s=tile"/>
从后端程序员的角度来看,这个解决方案看起来非常优雅。但是,如果没有重写规则,以这种方式公开实现细节实际上是个好主意吗?
从我读过的所有内容看来,主要浏览器中的网址解析代码处理元标记的方式与处理所有其他链接的方式相同,因此额外的参数在那里不应该成为问题。但也许我忽略了一个有不同哲学的人?
缓存怎么样?从理论上讲,参数不会改变,因此图标仍然可以缓存 - 但我可以理解为什么浏览器会选择不这样做。另一方面,也许图标缓存有不同的规则,因为它非常重要?
当然我可以尝试一下,但如果你对这种方法有任何经验,它可能会让我盲目地走错了轨道。
答案 0 :(得分:1)
TL; DR 您的解决方案可行,但它有一些缺点。你可能不应该这样做。
你打算做什么(即icon.png?h=32&w=32
和朋友)应该有效。浏览器支持图标的这种路径。实际上,添加后缀(例如icon.png?v=2
)是一种文档化的技术,可以强制浏览器重新加载图标,例如在网站改版过程中更新图标时。关于缓存,我没有明确的答案。虽然众所周知,浏览器往往不刷新图标(这是在选择最终版本之前使用图标的Web开发人员的经典麻烦来源),但这并不意味着浏览器真的可以很好地使用图标和缓存。
这就是说,我看到这种技术存在一些缺点:
/apple-touch-icon.png
。 /favicon.ico
是另一个经典之作。不要误会我的意思:如果你把所有事情都搞定了(按照你的计划),一切都会奏效。您只会在日志中注意到404。什么都没有害。如果您不想简单地获取一些HTML代码和相应的图像并将它们直接放入项目中,我建议您使用Gulp或Grunt等工具在“编译时”生成这些资源,以便您的项目不是一团糟。