我刚刚开始使用内联 SVG 在资源密集的网站上显示图像。但是,我也有一个使用 switch 和 foreignobject 标签的后备,这样旧的浏览器应该只在它的位置显示一个 png 图像。
这是最基本的 - 在 html 中的内联 svg 中有更多细节- 如何优雅地降级?
<svg xmlns:xlink="http://www.w3.org/1999/xlink" xml:space='preserve'
width="100" height="100">
<switch>
<g>
<!-- the svg goes here -->
</g>
<foreignObject width="100" height="100">
<img src="/some_image.png"/>
</foreignObject>
</switch>
</svg>
我认为这会减轻服务器上的负载——例如,对于一个有 4 个图像的页面,浏览器可以一次性获取所有内容,而不是 5 次访问服务器,1 次访问页面,1 次访问每个 img 标记。
然而,现在我已经部署了这个解决方案,我发现(通过检查服务器日志)浏览器实际上正在处理外来对象标签内的 img 请求,无论它们是否可以处理 SVG。
换句话说,它增加了服务器的负载,因为页面更大(充满了 SVG)并且无论如何都下载了图像,即使它们从未显示。
这看起来很疯狂——我认为切换的想法是浏览器应该处理它理解的第一个标签(在我的例子中,g 标签)并忽略其余的(在我的例子中的外来对象)。
我已经在 Firefox 17.0.1、Chrome 23.0.1271.95、Safari 5.1.7 和 Opera 12.10 中对此进行了测试,他们都做到了。
有什么办法可以说服浏览器他们真的不需要下载图像?
谢谢
克里斯