PHP - Readfile速度慢,有哪些解决方法?

4

我第一次尝试使用PHP(以前使用经典ASP),测试加载远程图片并使用READFILE显示它。在测试过程中,我注意到与我的旧ASP脚本相比,返回时间有很大差异,基本上是做完全相同的事情。PHP版本实际上需要两倍的加载时间。

这是我的PHP代码,仅有三行:

<?php
$url = "https://s3.amazonaws.com/bucket/file.jpg";
header("Content-Type: image/jpeg"); 
readfile($url);
?>

这是我的ASP版本:

<%
Set objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "GET", "https://s3.amazonaws.com/bucket/file.JPG"
objHTTP.Send
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.OpenBinary(objHTTP.responseBody)
Jpeg.SendBinary
%>

为什么我旧的、完成的、过时的、老派的Classic ASP版本比老旧的PHP表现要好得多?ASP版本实际上比PHP版本做得更多。除了READFILE之外,还有其他可以更快的东西吗?我是否正确地使用了READFILE?我不是说我在看时间等待,它们都在一瞬间加载,但PHP有一个非常明显的延迟。


1
你应该确保输出缓冲被禁用。 - NikiC
2
@BurningtheCodeigniter:真的吗?我必须升级PHP 5.2.17才能获得更快的READFILE结果,而我正在将其与12年前最后更新的Classic ASP进行比较-这没有意义,但可能是吧。 - TheCarver
我想升级它,但我的应用程序中使用了AWS S3存储,并且在他们的文档中建议使用5.2.17版本是高度优先的。 - TheCarver
@NikiC:关于输出缓冲很有趣。在查看配置文件以检查输出缓冲之前,我可以在readfile之后立即使用**ob_flush()**吗? - TheCarver
1
我已删除我的回答,因为第二个投票者没有留下评论。希望您有时间测试它。Stackoverflow 应该要求对投票进行解释! - huysentruitw
显示剩余6条评论
1个回答

0
首先:您指的是PHP 5.2。
请注意,5.2已不再受支持;您应该升级(如果是第三方ISP提供的,则应从他们那里升级;没有ISP应该提供不受支持的PHP版本--这是一个明显的安全风险)。
升级的另一个原因是PHP 5.3比5.2快得多。而5.4比5.3快得多。如果您担心速度,那么您必须使用最新版本。
其他想法?
您的PHP和ASP代码可能不在同一台服务器上,对吧?两个服务器之间有什么区别吗?处理器速度、内存、网络速度?并且是否有关于这些项目中分配给您程序资源的限制?
考虑到您正在从远程URL获取文件,我建议服务器或网络性能更可能是问题所在,而不是程序性能。

我的PHP和ASP都在同一台Windows 2008服务器上。不过关于版本的评论很有意思,谢谢。 - TheCarver
1
一个简单脚本不会受到PHP版本差异的影响——大部分执行时间都会被后台readfile执行的HTTP开销所占用,以及所有元开销,例如DNS查询。 - Marc B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接