PHP效率計:從引號開始(單引號、雙引號效率區別)

一直以來,程序的執行效率就是人們所關注的,在PHP中也不例外,從最簡單的引號,也在思考他的效率。
咱們特別作了實驗,咱們自稱這個實驗可能前無古人,後無來者。
咱們的實驗是藉助最初級的實驗方法:累積法和屢次實驗求平均值。

實驗一:在普通狀況下的效率
咱們的實驗是5000次執行10000個字節的文件,得到解析過程當中的速度。
首先,本實驗特別規定一個單位,這是爲了更好地表示以及排除計算機自己效率的差別。
時間單位 TT,表示約 7.2×10[sup]-8[/sup]s 。
咱們得到四組實驗數據,可理解爲表示 'a' 比 "a" 快的時間:
         0.29 TT,大概0.0000000206s
         0.46 TT,大概0.0000000328s
         0.38 TT,大概0.0000000275s
         0.41 TT,大概0.0000000292s
平均值:0.39 TT ('aaaa....(139個)' 的效率接近於 "aaa...(100個)" 
結論:在數據量相同,而且在普通狀況下(不借助轉義),使用單引號速度更快。

實驗二:單引號轉義的效率
咱們的實驗是5000次分別以「單引號、雙引號」執行兩份數據相同,但其中一份特別用'表示單引號。
時間單位 TT,表示約 7.2×10[sup]-8[/sup]s 。
咱們得到四組實驗數據,可理解爲表示 " ' " 比 ' ' ' 快的時間:
         0.19 TT,大概0.0000000138s
         0.15 TT,大概0.0000000110s
         0.23 TT,大概0.0000000162s
         0.24 TT,大概0.0000000173s
spa

平均值:0.2 TT (」 ''''...(12個) " 的效率接近於 ' ''...(10個)" 
結論:若是字符串中須要表示單引號(MySQL查詢),應儘量避免轉義,因此應使用雙引號。orm

實驗三:花括號的效率
咱們的實驗是1000次執行含有數量必定的變量標記的文件,得到解析過程當中的速度。
時間單位 TT,表示約 1.581×10[sup]-7[/sup]s~1.666×10[sup]-7[/sup]s 。(TT 變化)
獲得三組數據,表示 "{$abc}" 比 "$abc" 快。
       15.3 TT,大概0.0000024186s
       14.5 TT,大概0.0000024093s
       15.3 TT,大概0.0000024152s
這數據是十分驚人的,平均結果 15 TT
這意味着:使用花括號的解析速度,大約是不使用花括號的16倍。
結論:在雙引號中表示變量,儘量使用花括號。

實驗四:連續與非連續的效率
咱們的實驗是1000次執行含有數量必定的變量標記的文件,得到解析過程當中的速度。
時間單位 TT,表示約 1.581×10[sup]-7[/sup]s~1.666×10[sup]-7[/sup]s 。(TT 變化)
第一組實驗數據,表示 "{$abc}{$abc}{$abc}..." 比 $abc.$abc.$abc 平均每一個變量解析快
       22.45 TT,大概0.0000035498s
       21.03 TT,大概0.0000035037s 
       22.12 TT,大概0.0000034930s
       花括號(連續)比單引號(非連續)快的時間,平均結果 22 TT
       這意味着:使用花括號的解析速度,大約是使用不連續的單引號的23倍。
       結論:在單引號中表示多個變量(或數據總量少),儘量換用雙引用,並使用花括號。
第二組實驗數據,表示 "...$abc$abc$abc..." 比 ‘...’.$abc.$abc.$abc.'...' 平均每一個變量解析快
       7.15 TT,大概0.0000011311s 
       6.57 TT,大概0.0000010943s
       6.83 TT,大概0.0000010777s
       雙引號(連續)比單引號(非連續)快的時間,平均結果 7 TT。(該數據變化)
       這意味着:變量多時,使用雙引號(不使用花括號)的解析速度,大約是使用不連續的單引號的8倍。
       結論:在雙引號中表示多個變量(或數據總量少),比使用單引號而須要用「鏈接運算符」要快。
結論:表示多個變量時(或數據總量少),應可能範圍內使用雙引號,並使用花括號。
(附:做者推測,這可能和內存空間的分配有關係,連續符可能會使內存不斷調整)

最終結論:
首先,表示簡單的數據時(不須要轉義),儘可能用單引號。
   'Cal: Are you good at long jump?'
但若是由於使用單引號,而須要進行轉義(即包含單引號),考慮使用雙引號。
   'Cal: Yes. But, you know, it's written.' => "Cal: Yes. But, you know, it's written."
若是須要表示變量,應儘可能使用花括號。
   "Cal: $to" => "Cal: {$to}, you shouldn't go shopping."
儘可能使其連續:
   'Cal: '.$calsaid => "Cal: $calsaid" => "Cal: {$calsaid}"內存

相關文章
相關標籤/搜索