2011-09-01 109 views
1

我剛剛使用dotdeb.org的apt源碼升級到了php 5.3.8。爲什麼php5.3.8比5.3.7慢10倍?

php性能測試結果非常糟糕。

我用這個腳本測試,安裝php5.3.8之前和之後。它似乎運行相同的代碼將花費10倍於php5.3.8的時間比在php5.3.7。

測試PHP腳本:

<?php 
//test float 
function test_float() { 
    $t = pi(); 
    $timeStart = gettimeofday(); 

    for($i = 0; $i < 3000000; $i++) { 
     sqrt($t); 
    } 

    $timeEnd = gettimeofday(); 
    $time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"]; 
    $time = round($time, 3)."s"; 
    return $time; 
} 

echo "php version:" , phpversion(), "\n"; 
echo "call sqrt() 3,000,000 times will cost ", test_float(), "\n"; 

?> 

測試結果:

php version:5.3.3-7+squeeze3 
call sqrt() 3,000,000 times will cost 1.369s 
php version:5.3.3-7+squeeze3 
call sqrt() 3,000,000 times will cost 1.095s 
php version:5.3.3-7+squeeze3 
call sqrt() 3,000,000 times will cost 1.072s 
php version:5.3.8-1~dotdeb.2 
call sqrt() 3,000,000 times will cost 10.644s 
php version:5.3.8-1~dotdeb.2 
call sqrt() 3,000,000 times will cost 10.567s 
php version:5.3.8-1~dotdeb.2 
call sqrt() 3,000,000 times will cost 10.343s 
+1

dotdeb版本是如何編譯的?鑑於它來自完全不同的來源,你可以比較蘋果和橘子。 –

回答

5

的5.3.8版本可能已被編譯調試選項,或者沒有編譯器的優化。

,或者您可能添加在PHP 5.3.8有些慢擴展,這不是在PHP 5.3.7啓用,像Xdebug的了Suhosin

我敢打賭第二種解決方案。

  • 比較輸出php -m。 (加載的模塊。)
  • 嘗試用php -n運行基準測試(運行PHP不加載任何INI設置文件)
+0

謝謝阿諾。它確實是由xdebug引起的,當使用php -n運行時,php 5.3.8的速度與之前一樣快。看來,xdebug應該跟上新版本的php。 – leon

0

基準和性能分析應始終真正的代碼完成,非誠勿擾試圖優化性能

事實上,也許只有sqrt()函數更慢,所有函數的99%速度要快3倍。我認爲問題來自你的基準。

另外,請檢查你的PHP編譯兩個版本,以同樣的方式,在同一臺機器上,同樣的php.ini等

2

這並不怎樣都無所謂,因爲是在一個5.3.7 critical security bug。功能crypt只返回salt。因此,不管是更慢還是更快,都不推薦使用5.3.7

+0

只有使用'crypt'時才重要。相信我,不是每個應用都需要它;) – Mchl

相關問題