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

时间:2012-03-03 20:28:52

标签: browser download google-visualization

我正在为Google Image Charts API服务开发PHP包装器。它支持从多个域提供图像,例如:

http://chart.googleapis.com
http://0.chart.googleapis.com
http://1.chart.googleapis.com
...

数字范围是0-9,因此共有11个域可用。

我想自动跟踪生成的图像数量并旋转域以在浏览器中获得最佳性能。但Google本身只有vaguely recommends

  

...如果你在页面上加载五个或更多图表,你应该只需要这个。

  • 我的策略应该是什么?我应该只更改每N个图像的域名,以及在现代浏览器的上下文中有什么好的N值?

  • 有没有意义重用域而不是引入新域(以保存DNS查找)?

我没有特定数量的图片 - 因为这是开源和公开的代码我想实现通用解决方案,而不是针对我的特定需求进行优化。

2 个答案:

答案 0 :(得分:1)

考虑:

  • 一个主机比另一主机快吗?
  • 浏览器是否限制每台主机的连接?
  • 浏览器解析DNS名称需要多长时间?

如您所希望这样制作组件,我建议您可以使用多种策略来查找要使用的主机名。这不仅可以让您有不同的策略,还可以相互测试。

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

变体:

  1. 选择一个域名并坚持使用,硬编码:http://chart.googleapis.com
  2. 从众多域名中挑选一个域名,坚持下去:例如: http://#.chart.googleapis.com
  3. 喜欢2但在某些图片后开始旋转名称。
  4. 与3相似,但在页面末尾添加一些javascript块,将在后台解析丢失的主机名的DNS,以便为下一个请求缓存它(提供未使用的主机名数据,远)。
  5. 然后您可以将库配置为可配置,因此您不需要在代码中对代码进行硬化处理,但是您提供了默认配置。

    然后,您可以将策略添加为配置,以便实施的人可以决定它。

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

    由于配置已包含要遵循的策略,因此您已完全承担组件使用者的责任,并且您可以更轻松地为不同的网站或应用程序集成不同的使用方案。

答案 1 :(得分:0)

我不完全理解旋转域的请求。我想在上下文中你的浏览器可能只允许同时对给定域提供X个开放请求是有意义的,所以如果你有来自chart.googleapis.com的10个图像,你可能需要等待第一个完成下载在开始收到第五个之前,等等。

随机旋转域的问题是你完全失败了浏览器缓存。如果图片是从1.chart.googleapis.com在一个页面上加载,然后从7.chart.googleapis.com在下一页加载时提供的,则缓存的图表无效,用户需要等待它被请求,生成,并重新下载。

我能想到的最佳解决方案是以某种方式确定要从算法请求的域。如果它在函数中,你可以以某种方式md5参数,转换为整数,然后从{$result % 10}.chart.googleapis.com提供图像。

可能有点矫枉过正,但至少可以保证给定的图像始终从同一台服务器提供。