我的网页使用Google图表生成五个图表。如果图形尚未缓存,我有以下代码行来检索图像。
$ image = file_get_contents(“http://chart.apis.google.com/chart?”。$ query);
当代码在循环中执行时,每个图像需要10秒钟。但是,如果我更改代码使用Google的IP地址而不是网址:
$ image = file_get_contents(“http://74.125.93.100/chart?”。$ query);
检索图像只需不到一秒钟。所以我最初的想法是DNS没有解析URL,延迟是通过指定的DNS服务器循环?所以我尝试从服务器ping map.apis.google.com,它立即返回了合理的回复。
所以我的问题是:是否有任何我可能忽略的PHP(或Apache2)配置设置可能导致此延迟,或者这听起来像服务器配置问题?
答案 0 :(得分:7)
您的DNS解析速度很慢(您的服务器使用的DNS可能是一个问题,然后大多数其他域可能很慢),或者您的服务器在使用DNS缓存时遇到问题。
在任何情况下,如果您没有特定的理由来操纵从谷歌图表收到的图像,为什么不将它打印为img标签?如果需要,您可以使用css覆盖文本或透明png-s。
答案 1 :(得分:4)
在这里遇到同样的问题。它可能是一个DNS问题......也许是apache服务器 使用速度太慢的DNS服务器。
我尝试了不同的方法:CURL,WGET(shell exec)......并且仍然遇到了相同的性能问题。
我的生产服务器大约需要15秒。但是在我的本地服务器(使用IP)上使用我的脚本只需不到1.5秒。
试试/etc/resolv.conf或/etc/named.conf?也许。我正在努力寻找解决方案。
答案 2 :(得分:2)
这是与您的托管服务提供商放入/etc/resolv.conf
的IP相关的问题。你无法修复它。这是您的托管服务提供商的问题。
但您可以使用google public dns:8.8.8.8
。打开/etc/resolv.conf
,然后删除所有数据并写入:
nameserver 8.8.8.8
然后保存。重启dns和apache。然后再试一次。
答案 3 :(得分:1)
为什么不在开始加载图像之前解析ip?
$ip = gethostbyname($name);
$image = file_get_contents($ip."/chart?".$query);