Browser 跨域传播图像下载的策略?
我正在为谷歌图像图表API服务开发PHP包装器。它支持服务来自多个域的图像,例如:Browser 跨域传播图像下载的策略?,browser,download,google-visualization,Browser,Download,Google Visualization,我正在为谷歌图像图表API服务开发PHP包装器。它支持服务来自多个域的图像,例如: http://chart.googleapis.com http://0.chart.googleapis.com http://1.chart.googleapis.com ... 数值范围为0-9,因此总共有11个域可用 我想自动跟踪生成的图像数量,并在浏览器中旋转域以获得最佳性能。然而,谷歌本身只是: …只有当您在一个页面上加载五个或更多图表时,才需要此功能 我的策略应该是什么?我是否应该每N个图像更改
http://chart.googleapis.com
http://0.chart.googleapis.com
http://1.chart.googleapis.com
...
数值范围为0-9,因此总共有11个域可用
我想自动跟踪生成的图像数量,并在浏览器中旋转域以获得最佳性能。然而,谷歌本身只是:
…只有当您在一个页面上加载五个或更多图表时,才需要此功能
- 我的策略应该是什么?我是否应该每N个图像更改一个域,在现代浏览器的上下文中,好的N值是多少
- 是否有必要重用域而不是引入新域(以节省DNS查找)
- 一台主机比另一台主机快吗
- 浏览器是否限制每个主机的连接
- 浏览器解析DNS名称需要多长时间
http://chart.googleapis.com
http://#chart.googleapis.com
由于配置已经包括了要遵循的策略,您已经将责任完全交给了组件的消费者,并且您可以更轻松地为不同的网站或应用程序集成不同的使用场景。我不完全理解轮换域的请求。我想这在你的浏览器一次只允许X个打开请求进入给定域的情况下是有意义的,因此如果你有10个来自chart.googleapis.com的图像,你可能需要等待第一个图像完成下载,然后开始接收第五个图像,依此类推 随机旋转域的问题是,这样会完全破坏浏览器缓存。如果在一次页面加载时从1.chart.googleapis.com提供图像,然后在下一次页面加载时从7.chart.googleapis.com提供图像,则缓存的图表将无效,用户需要等待再次请求、生成和下载 我能想到的最好的解决方案是通过算法从请求中确定要请求的域。如果它在一个函数中,您可以以某种方式md5参数,转换为整数,然后从
{$result%10}.chart.googleapis.com
提供图像
可能有点过火,但您至少可以保证给定的映像始终从同一台服务器提供。考虑因素(1)我认为这些主机是别名,性能相同(2)我知道浏览器有限制,但不知道实际通用限制是什么(这是问题的一部分)(3)我认为这会随着环境的变化而剧烈波动,但可以肯定的是,解决以前未知的域需要一些时间(如非零时间)。编辑:(1)声音。(2) 根据RFC 2每个主机名的并发连接数,浏览器现在通常会进行更多的连接和其他类型的连接,请参阅。(3) 根据这些文章和你的答案,我选择了可配置选项,默认情况下每6个图像更改一个域,并且只在3个域中循环。DNS查找需要时间。我只是想指出这一点。这是我所知道的,但我更喜欢链接谷歌文档,因为它们的工作非常科学。当前windows XP工作站(使用底层windows API)上的示例DNS查找时间约为250-500毫秒,因此每个主机名的DNS查找时间为半秒。WAN连接相当好,一些其他来源甚至说大约2-3秒。您可能需要考虑提供一些接口,前端发电机可以“缓存”所有主机的DNS解析(关于变体4)。精确的想法是绕过连接限制,使浏览器从不同域并行下载。我同意“随机”似乎不是个好主意。逻辑应该是持久的,以便以相同顺序生成的相同图像每次都会得到相同的URL。校验和几乎是随机的,让它去碰运气,可能会让事情变得更糟。。。将10个图像分布在10个域中可能没有意义-DNS查找的损失可能大于域分布的收益。真的。我不认为任何现代浏览器默认设置的comcurrent请求限制低于4,因此可能更好的方法是保留一个静态计数器,从一个域提供前4个图表,然后以这种方式在域中移动。