【发布时间】:2011-01-12 06:32:07
【问题描述】:
我正在构建一个基本的分析服务,理论上基于 Google Analytics 的工作原理,但我不是请求实际图像,而是将图像请求路由到接受数据然后输出图像的脚本。由于浏览器会在每次加载时请求此图像,因此每毫秒都很重要。
我正在寻找文件从 PHP 脚本输出 gif 文件的最有效方式。到目前为止,我已经建立了 3 个主要方法。
有没有更有效的方法可以从 PHP 脚本中输出 1x1 GIF 文件?如果不是,哪些是最高效和可扩展的?
三种识别方法
PHP 图像构建库
$im = imagecreatetruecolor(1, 1);
imagefilledrectangle($im, 0, 0, 0, 0, 0xFb6b6F);
header('Content-Type: image/gif');
imagegif($im);
imagedestroy($im);
file_get_contents图片从服务器端出来并输出
$im = file_get_contents('raw.gif');
header('Content-Type: image/gif');
echo $im;
base64_decode图片
header('Content-Type: image/gif');
echo base64_decode("R0lGODdhAQABAIAAAPxqbAAAACwAAAAAAQABAAACAkQBADs=");
(我的直觉是 base64 会是最快的,但我不知道该函数的资源密集程度如何;而且 file_get_contents 的扩展性可能不太好,因为它增加了另一个文件系统操作。)
作为参考,我使用的 GIF 在这里:http://i.stack.imgur.com/LQ1CR.gif
编辑
所以,我提供这张图片的原因是我的分析库构建了一个查询字符串并将其附加到这张图片请求中。我不是解析日志,而是将请求路由到处理数据并以图像响应的 PHP 脚本,这样最终用户的浏览器就不会挂起或抛出错误。我的问题是,如何在脚本范围内最好地提供该图像?
【问题讨论】:
-
如果您的目的是提供一个 1x1 像素的 GIF,只需让您的网络服务器静态地提供它。如果您真的想提供更大的、动态构建的图像,您也应该使用代表性数据进行基准测试。
-
@Savetheinternet 很难模拟成百上千次查询的效果,但是是的,一些基准测试可能是有序的。我也在问是否还有其他可能更好的方法。
-
@Thomas 1x1 图像只是为了使请求不会挂起;我将分析信息附加到请求的查询字符串中,并将其用作我的数据收集的基础。我实际上并没有使用页面中的图像。这是 Google Analytics 使用的方法,它比其他一些选项(即隐藏的 iframe)更加优雅和高效。
-
@yc: 好吧,你还是可以通过网络服务器来服务它并在后台分析日志
-
哦……我现在明白了。我以为你在画图表什么的。没关系!
标签: php javascript image performance analytics