关注PHP的性能
我一直在Unix命令行中运行一些测试PHP脚本(使用关注PHP的性能,php,performance,unix,Php,Performance,Unix,我一直在Unix命令行中运行一些测试PHP脚本(使用PHP命令),我注意到它们的运行速度非常慢。平均每12行左右的代码运行一个脚本大约需要半秒钟。这是非常令人担忧的。我的意思是,我知道PHP是一种解释性语言,它显然会比C之类的东西运行得慢,但我没想到它会这么慢。想象一下,如果我有一个几百行长的脚本,它将运行得有多慢。或者如果我必须通过TCP连接发送该脚本的输出 我想了解为什么PHP在Unix命令行中运行得如此缓慢。这是Unixphp命令特有的吗?如果由Apache这样的web服务器进行解释,它会
PHP
命令),我注意到它们的运行速度非常慢。平均每12行左右的代码运行一个脚本大约需要半秒钟。这是非常令人担忧的。我的意思是,我知道PHP是一种解释性语言,它显然会比C之类的东西运行得慢,但我没想到它会这么慢。想象一下,如果我有一个几百行长的脚本,它将运行得有多慢。或者如果我必须通过TCP连接发送该脚本的输出
我想了解为什么PHP在Unix命令行中运行得如此缓慢。这是Unixphp
命令特有的吗?如果由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编写了这样的代码,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";
?>
运行代码很可能不需要半秒钟。生成PHP进程并编译代码需要花费大部分时间。你是怎么计时的?你打算用PHP做什么 第一次在命令行PHP上运行脚本时,将:
- 产生一个进程
- 从磁盘读取代码
- 将PHP代码编译为操作码
- 运行代码
$PHP-v
。您可以使用以下命令检查是否正在运行opcache:php-r'phpinfo();'|grep opcache
(还要检查opcache.enable_cli的值)
在PHP版本5.5之前,您必须安装。您可以使用php-r'phpinfo();'检查安装情况grep apc
让你更加放心;我正在使用PHP5.5.9运行一个PHP脚本,它每秒能够从消息队列接收和处理大约一千条复杂的json消息。这些消息在几毫秒内被解码、转换、重新编码并存储在NoSQL数据库中。PHP不是高度优化的C语言,但除非您正在执行资源密集型任务,否则您不必担心速度。只是:
- 使用最新的PHP版本
- 确保您正在使用操作码缓存
0.0005秒
;第二个示例需要运行0.0001秒
(在我的服务器上计时),并四舍五入到4位小数,即Apache不解释任何内容。。。。。无论是通过Apache SAPI还是CLI运行,其核心都是相同的引擎。。。。。如果您只需说“Odd”,那么服务器设置似乎有问题。为什么在我的Macbook上运行要花这么长时间?PHP是设计在具有真正快速CPU的服务器上运行的吗?这就是为什么它可以承受像调用函数这样的巨大性能损失的原因吗?好的,我使用的是PHP5.3.13。这也许可以部分解释为什么它这么慢。我还注意到,我的脚本在第二次运行时往往运行得更快,但如果我在两次运行之间等待很长时间(可能字节码在一段时间后被删除),情况就不会如此了。