PHP Performance-單雙引號 與 concatenate
Posted by admin - 18/06/09 at 07:06:58 下午網路上關於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 則迴響
抱歉,本篇的迴響表單已關閉。
Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds.
Valid XHTML and CSS.
跟他用的php版本、作業系統版本,甚至其他系統設定都可能有關係吧?他其實也沒有把他測試的環境說得很清楚?
Comment 由 Dowlin — 六月 19, 2009 #
concatenate跟去解譯變數到底哪個快的確很難說~
可是理論上~單引號應該是要比雙引號快的~
應該不管PHP用什麼版本或系統怎麼設定都一樣吧~
Comment 由 admin — 六月 19, 2009 #