Browser 跨域传播图像下载的策略?

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个图像更改

我正在为谷歌图像图表API服务开发PHP包装器。它支持服务来自多个域的图像,例如:

http://chart.googleapis.com
http://0.chart.googleapis.com
http://1.chart.googleapis.com
...
数值范围为0-9,因此总共有11个域可用

我想自动跟踪生成的图像数量,并在浏览器中旋转域以获得最佳性能。然而,谷歌本身只是:

…只有当您在一个页面上加载五个或更多图表时,才需要此功能

  • 我的策略应该是什么?我是否应该每N个图像更改一个域,在现代浏览器的上下文中,好的N值是多少

  • 是否有必要重用域而不是引入新域(以节省DNS查找)

我心中没有特定数量的图像-由于这是开源和公开可用的代码,我希望实现通用解决方案,而不是针对我的特定需求进行优化。

注意事项:

  • 一台主机比另一台主机快吗
  • 浏览器是否限制每个主机的连接
  • 浏览器解析DNS名称需要多长时间
因为您希望它成为一个组件,所以我建议您能够使用多种策略来查找要使用的主机名。这不仅可以让你有不同的策略,还可以互相测试

此外,您可能希望添加对javascript库的支持,以便将来能够在页面上呈现数据,因此您可能希望保持模块化

变体:

  • 选择一个域名并坚持使用,硬编码:
    http://chart.googleapis.com
  • 从众多域名中选择一个,坚持使用:例如
    http://#chart.googleapis.com
  • 类似于2,但在一些图像后开始旋转名称
  • 与3类似,但在页面末尾添加一些javascript块,该块将在后台解析丢失主机名的DNS,以便为下一个请求缓存该主机名(提供尚未使用的主机名数据)
  • 然后,您可以使库可配置,因此不需要在代码中对值进行编码,而是提供默认配置

    然后,您可以将该策略添加为配置,以便实现该策略的人员可以对其进行决策

    然后你可以让组件提供从外部加载配置,比如说,如果你创建一个Wordpress插件,插件可以存储配置并为插件用户提供一个管理界面来更改设置


    由于配置已经包括了要遵循的策略,您已经将责任完全交给了组件的消费者,并且您可以更轻松地为不同的网站或应用程序集成不同的使用场景。

    我不完全理解轮换域的请求。我想这在你的浏览器一次只允许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个图表,然后以这种方式在域中移动。