我正在为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查找)?
我没有特定数量的图片 - 因为这是开源和公开的代码我想实现通用解决方案,而不是针对我的特定需求进行优化。
答案 0 :(得分:1)
考虑:
如您所希望这样制作组件,我建议您可以使用多种策略来查找要使用的主机名。这不仅可以让您有不同的策略,还可以相互测试。
此外,您可能希望添加对可以在将来呈现页面上的数据的javascript库的支持,因此您可能希望保持模块化。
变体:
http://chart.googleapis.com
http://#.chart.googleapis.com
然后您可以将库配置为可配置,因此您不需要在代码中对代码进行硬化处理,但是您提供了默认配置。
然后,您可以将策略添加为配置,以便实施的人可以决定它。
然后你可以让组件提供从外部加载配置,所以让我们说,如果你创建一个Wordpress插件,插件可以存储配置并为插件用户提供一个管理界面来更改设置。
由于配置已包含要遵循的策略,因此您已完全承担组件使用者的责任,并且您可以更轻松地为不同的网站或应用程序集成不同的使用方案。
答案 1 :(得分:0)
我不完全理解旋转域的请求。我想在上下文中你的浏览器可能只允许同时对给定域提供X个开放请求是有意义的,所以如果你有来自chart.googleapis.com的10个图像,你可能需要等待第一个完成下载在开始收到第五个之前,等等。
随机旋转域的问题是你完全失败了浏览器缓存。如果图片是从1.chart.googleapis.com在一个页面上加载,然后从7.chart.googleapis.com在下一页加载时提供的,则缓存的图表无效,用户需要等待它被请求,生成,并重新下载。
我能想到的最佳解决方案是以某种方式确定要从算法请求的域。如果它在函数中,你可以以某种方式md5参数,转换为整数,然后从{$result % 10}.chart.googleapis.com
提供图像。
可能有点矫枉过正,但至少可以保证给定的图像始终从同一台服务器提供。