我已经在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";
?>
答案 0 :(得分:1)
最有可能的是,运行代码并不需要半秒钟。产生PHP进程并将代码编译为opcodes确实需要花费大部分时间。你是怎么计时的?你有什么打算用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,但除非您正在执行非常耗费资源的任务,否则您不必担心速度。只是: