PHP Performance-單雙引號 與 concatenate

網路上關於PHP Performance的tips很多~
很常看到的像字串用單引號跟雙引號的差別(用雙引號括起來的字串PHP會去解譯裡面的變數~單引號不會)~
還有盡量少做concatenate(字串連接)之類的~

比如說像這篇文章就有提到~

"SELECT id FROM tabell WHERE id = $_SESSION[id] LIMIT 1" //雙引號+沒concatenate

會比

"SELECT id FROM tabell WHERE id = ".$_SESSION['id']." LIMIT 1" //雙引號+有concatenate

來得快~

而要concatenate的話

'SELECT id FROM tabell WHERE id = '.$_SESSION['id'].' LIMIT 1' //單引號+有concatenate

會比

"SELECT id FROM tabell WHERE id = ".$_SESSION['id']." LIMIT 1" //雙引號+有concatenate

來得快~

今天心血來潮想說試一下到底彼此之間差多少~結果卻跑出很詭異的結果~
節錄部份測試程式如下:

1
2
3
4
5
6
7
8
9
$test1=$test2=$test3=100;
 
$time1=microtime_float();
for($i=1;$i<1000000;$i++) $str="SELECT id FROM tbl WHERE id=$test1 LIMIT 1";
$time2=microtime_float();
for($i=1;$i<1000000;$i++) $str="SELECT id FROM tbl WHERE id=".$test2." LIMIT 1";
$time3=microtime_float();
for($i=1;$i<1000000;$i++) $str='SELECT id FROM tbl WHERE id='.$test3.' LIMIT 1';
$time4=microtime_float();

紀錄三種做法各跑一百萬遍所花的時間~
然後再重覆一百遍上面的程式來取時間平均值~這樣算一次測試~

結果~第一次測試的結果~
"SELECT id FROM tbl WHERE id=$test1 LIMIT 1" (雙引號+沒concatenate) 跑一百萬次花了0.694124732018秒~
"SELECT id FROM tbl WHERE id=".$test2." LIMIT 1" (雙引號+有concatenate) 跑一百萬次花了0.588629484177秒~
'SELECT id FROM tbl WHERE id='.$test3.' LIMIT 1' (單引號+有concatenate) 跑一百萬次花了0.592728836536秒~

咦?
居然最快的是[雙引號+有concatenate], 第二快的是[單引號+有concatenate], 最慢的是[雙引號+沒concatenate]~
好奇怪阿~

不甘心~再調換三句的先後順序~重跑了七次上面的實驗~
結果六次的結果都差不多~快慢順序都像上面說的一樣~
只有一次是[單引號+有concatenate]比[雙引號+有concatenate]快~不過最慢的還是[雙引號+沒concatenate]~
到底是怎麼回事勒?????

2 則迴響

本篇文章的迴響 RSS 訂閱。

  1. 跟他用的php版本、作業系統版本,甚至其他系統設定都可能有關係吧?他其實也沒有把他測試的環境說得很清楚?

    Comment 由 Dowlin — 六月 19, 2009 #

  2. concatenate跟去解譯變數到底哪個快的確很難說~
    可是理論上~單引號應該是要比雙引號快的~
    應該不管PHP用什麼版本或系統怎麼設定都一樣吧~

    Comment 由 admin — 六月 19, 2009 #

抱歉,本篇的迴響表單已關閉。

Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds. Valid XHTML and CSS.