Php 加载随机图像需要很长时间

Php 加载随机图像需要很长时间,php,performance,Php,Performance,我有一个随机图像发生器为我的网站。问题是,这需要很长时间。。我想知道是否有人能以任何方式帮助加快速度。网站是,以下是脚本: header('Content-type: image/jpeg;'); $images = glob("images/" . '*.{jpg,jpeg,png,gif}', GLOB_BRACE); echo file_get_contents($images[array_rand($images)]); 这是一种非常耗费资源的方法,因为您通过PHP传递图像数据,而不指

我有一个随机图像发生器为我的网站。问题是,这需要很长时间。。我想知道是否有人能以任何方式帮助加快速度。网站是,以下是脚本:

header('Content-type: image/jpeg;');
$images = glob("images/" . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
echo file_get_contents($images[array_rand($images)]);

这是一种非常耗费资源的方法,因为您通过PHP传递图像数据,而不指定任何缓存头,因此每次打开页面时都必须重新加载图像

更好的方法是让
glob()
列出HTML页面中用于嵌入图像的文件。然后随机化该列表,并发出一个
”;

分析代码并找出瓶颈。我只能猜测

$images = glob("images/" . '*.{jpg,jpeg,png,gif}', GLOB_BRACE); 

# Randomize order
shuffle ($images);

# Create URL
$url = "images/".basename($images[0]);

echo "<img src='$url'>";
这将首先将整个文件读取到内存中,然后将其发送到输出缓冲区。如果文件直接进入输出缓冲区会更好。是您的朋友。最好避免完全缓冲。这将有助于您


下一个候选对象是图像目录。如果搜索一个图像需要花费大量时间,则必须对其进行优化。这可以通过索引(例如,使用数据库)来实现。

yes。去掉该全局框,从数据库列表中读取图像,或者至少解析文本文件。@Kai
glob()
通常不是一个巨大的瓶颈,除非你在一个目录中找到成千上万个文件。脚本的总体架构是一个更严重的问题。你分析了你的代码吗?然后告诉我们哪种方法需要花费大量的时间。你能举个例子吗?仍然很滞后。我只使用颜色。@Tayler可能还有其他问题s在发挥作用-图像有多大?@Markus我没有这么说。我说他目前没有这么做。你可以从PHP来做,但整个传递方法毫无意义。@Markus请告诉我是哪句话为你创建了这种外观。“你没有指定任何缓存头”!=“PHP无法指定缓存头。”“如何缓存始终具有相同名称,但在每次请求时设计包含不同映像的资源?同样,通过PHP传递这些图像的想法一开始是空洞的,但是每个响应都是为了服务不同的随机图像而设计的。我看不出ETag有什么帮助(除了极少数情况下随机化器碰巧在一行中显示两个相同的值)。唯一明智的方法是指向具有不同URL的随机资源。没错,HTTP缓存根本没有任何意义。
echo file_get_contents($file);