关注PHP的性能

时间:2015-12-08 16:29:58

标签: php performance unix

我已经在Unix命令行中运行了一些测试PHP脚本(使用php命令)并且我发现它们的运行速度非常慢。对于每12行左右的代码行,平均脚本似乎需要大约半秒才能运行。这非常令人担忧。我的意思是,我知道PHP是一种解释型语言,它显然比C之类的运行速度慢,但我没想到它会慢慢运行。想象一下,如果我有一个长达数百行的脚本,那么它的运行速度会有多慢。或者,如果我必须通过TCP连接发送该脚本的输出。

我想了解为什么PHP在Unix命令行中运行得如此之慢。这是Unix php命令特有的东西吗?如果像Apache这样的Web服务器解释它会运行得更快吗?如果是这样,为什么?我不明白为什么PHP的性能似乎存在这么大的滞后,至少在Unix实现中是这样。

修改 好的,这是我的一些代码运行缓慢的示例:

<?php
$counter = 0;
function update_counter(){
    global $counter;
    $counter++;
}
update_counter();
echo "\$counter = $counter\n";
function update_local(){
    $local_num = 0;
    $local_num++;
    echo "\$local_num = $local_num\n";
}
function update_static(){
    static $static_num = 0;
    $static_num++;
    echo "\$static_num = $static_num\n";
}
update_local();
update_local();
update_static();
update_static();
?>

我知道这段代码可能会慢一点,因为它会进行多次函数调用,但是我在Javascript中编写了这样的代码,这也是一种解释型语言,没有看到任何性能滞后。我不认为代码的质量是问题所在。我应该能够在我的脚本中使用函数而不会遭受性能损失。

编辑:此代码运行大约半秒钟:

<?php
$x = 2;
$y = 5;
if( $x + $y < 5 )
    echo "less than 5\n";
elseif( $x + $y > 5 )
    echo "greater than 5\n";
else
    echo "equal to 5\n";
?>

1 个答案:

答案 0 :(得分:1)

最有可能的是,运行代码并不需要半秒钟。产生PHP进程并将代码编译为opcodes确实需要花费大部分时间。你是怎么计时的?你有什么打算用PHP?

第一次在PHP命令行上运行脚本:

  • 产生一个过程
  • 从磁盘中读取代码
  • 将PHP代码编译为操作码
  • 运行代码

生成PHP进程的时间是不变的,并且不会随着更长的脚本而增加。运行Web服务器时,可以在FastCGI中运行PHP,并将请求从Web服务器传递到PHP-FPM。在这种情况下,PHP已经在运行,您不必等待PHP进程启动。

此外,第一次运行脚本(在创建或更改后),PHP会将代码编译为操作码。这些操作码是缓存的。因此,当您第二次运行脚本时,它将运行得更快。

最后,PHP很慢,但每次发布都会越来越快。新的PHP7版本确实带来了巨大的性能提升,但您也会注意到5.3 to 5.4的性能提升。

另请注意,版本5.5之前的PHP默认情况下不启用Opcache。

您可以使用以下代码检查您的PHP版本:$ php -v。您可以检查是否正在运行带有php -r 'phpinfo();' | grep opcache的opcache(同时检查opcache.enable_cli的值)

在PHP 5.5之前,您必须安装APC extention。您可以使用php -r 'phpinfo();' | grep apc

检查安装

进一步向你保证;我正在使用PHP 5.5.9运行PHP脚本,它能够每秒从消息队列接收和处理大约一千条复杂的json消息。这些消息在几毫秒内被解码,转换,重新编码并存储在NoSQL数据库中。 PHP不是高度优化的C,但除非您正在执行非常耗费资源的任务,否则您不必担心速度。只是:

  • 使用最新的PHP版本
  • 确保使用操作码缓存