如何提高PHP而不是HTML的速度?

如何提高PHP而不是HTML的速度?,php,html,performance,memcached,scalability,Php,Html,Performance,Memcached,Scalability,我有一个PHP文件,从中获取HTML并提供给用户。当我这样测试它时: ab-n 1000-c 100 它每秒处理22个请求 但当我将相同的HTML放入HTML文件并执行此测试时: ab-n 1000-c 100 我每秒收到4500个请求 我需要坚持使用PHP,因为第一次我需要生成HTML,下一次我只需要从Memcached获取生成的HTML。此外,我显示的HTML对于其他每个用户都是不同的(根据$\u GET['user\u id']值识别)。有没有办法提高RPS?更接近于提供纯HTML 我使用

我有一个PHP文件,从中获取HTML并提供给用户。当我这样测试它时:

ab-n 1000-c 100

它每秒处理22个请求

但当我将相同的HTML放入HTML文件并执行此测试时:

ab-n 1000-c 100

我每秒收到4500个请求

我需要坚持使用PHP,因为第一次我需要生成HTML,下一次我只需要从Memcached获取生成的HTML。此外,我显示的HTML对于其他每个用户都是不同的(根据$\u GET['user\u id']值识别)。有没有办法提高RPS?更接近于提供纯HTML

我使用作为web服务器。

思想链(待续):
首先,我要测试问题是由并发触发的还是由并发显著恶化的。在你的
-n1000-c100测试中,你的比率是22/4500。那么
-n1000-c10
-n1000-c1

然后,我会再次尝试同样的方法+跟踪内存消耗、磁盘I/O和CPU使用情况。这显然是限制因素吗

然后我将测试简单的PHP脚本:

  • 空文
  • 您可以尝试(psuedo代码):


    文件系统使其成为一个相当好的缓存,lightpd将完成提供页面的实际工作

    比脚本快吗

    尝试编写简单的HTML文件并提供这些文件。并制作一个“更新程序”脚本,可以随时更新HTML文件,如果您真的需要这样的速度,也可以在某个特定事件上更新

    在某些地方尝试使用,看看效果如何()

    尝试使用Eaccelerator()或APC()来加快脚本解析器的速度,但这在PHP5上并不会带来奇迹

    确保物理服务器有足够的可用资源(高速硬盘、大量RAM、多处理器)


    脚本比HTML页面慢是很正常的:)提供HTML页面意味着通过网络简单复制文件。PHP脚本意味着初始化脚本引擎、缓存、解析类、函数、内存分配、会话锁定/解锁以及保存、从Memcached服务器读取、读取配置文件。对于每个请求,

    您可能还想考虑在您的PHP服务器前面放置一个HTTP缓存。这将减少web服务器上的负载,并为您重新发送以前呈现的页面

    例如,见。另一个选择是


    显然,如果您使用的是共享主机,那么这些都不是选项-在这种情况下,呈现到.html文件是一个很好的解决方案。

    您确定这些响应来自缓存吗?“
    $\u GET['user\u id']
    页面的相关部分需要多少”PHP?速度的提高有多重要?”?您是否也只测试了memcache部分的服务-仅此而已?当你进行
    ab-c100
    测试时,有多少个PHP进程/后端在运行?@VolkerK我不明白你所说的“多少,有多重要”是什么意思。你能给我解释一下吗?当我运行ab-C100时,我有10个lighttpd进程和100个php cgi进程。在对你之前的问题()的评论中,你说“因为上次我发布这个应用时,我有10k个并发请求”,我只是想知道你愿意做些什么来提高性能。也许(只是也许,我想我们还没有做到;-))甚至像是从php切换到lighthttpd的C插件?@VolkerK这是一个关于C插件的想法。所以你认为这是php解析器的问题?我使用APC操作码缓存。这应该会有帮助。可能是糟糕的PHP、Memcached甚至Lighttpd配置?如何诊断?谢谢你的回答。以下是结果:“-C10”给出22转/秒,“-C1”都给出21转/秒。CPU使用率最高为60%,2 GB可用内存最高为300 MB。我不知道如何测量磁盘I/o使用情况。在公布的所有4个测试场景中,我也得到了22个RPS。谢谢你的帮助。你说得对:这似乎是php/lighttpd的问题。所以,在我重新编译php之前,当您编写代码时,我想检查它是否是用fastcgi编译的。如何检查?在PHP5.3中,FastCGI始终处于启用状态,不能禁用。使用-v参数从shell调用php可执行文件,例如
    phpcgi-v
    。如果启用了fastcgi支持,它将打印
    cgi fcgi
    ,否则只打印
    cgi
    。@VolkerK在您编写时,我仔细查看了fcgi。它没有启用,但在我的系统中可用。所以我用这个:来更新配置。接下来,它使用/etc/php.ini而不是/home/domain.com/httpdoc/php.ini。所以我更新了第一个,使之与第二个相似。接下来我检查了它是否有效。它成功了。我已经测试了test.php,现在有1500个RPM。它快68倍。非常感谢!太好了。我很高兴能得到专家的帮助。问候你,祝你有一个美好的一天!!!在'-c1000-n1000'我有3000个RPS:)请参阅VolkerK的答案-它甚至适用于空PHP
    if file myfilecache/$user_$request_$today.html does not exist 
    then do
         format page 
         write page to myfilecache/$user_$request_$today.html
    done
    redirect to myfilecache/$user_$request_$today.html