我對PHP很新,我對IF語句有個疑問。if的用法更快嗎?
實施例1:
<?php
if($a == 1){
if($b == 1){
echo 'test';
}
}
?>
實施例2:
<?php
if($a == 1 && $b ==1){
echo 'test';
}
?>
都具有相同的結果,但其中一個是快?它甚至重要嗎?
我對PHP很新,我對IF語句有個疑問。if的用法更快嗎?
實施例1:
<?php
if($a == 1){
if($b == 1){
echo 'test';
}
}
?>
實施例2:
<?php
if($a == 1 && $b ==1){
echo 'test';
}
?>
都具有相同的結果,但其中一個是快?它甚至重要嗎?
這是不成熟的優化&微基準測試,你真的需要閱讀Don't be STUPID: GRASP SOLID!理解爲什麼我這麼說
但是,如果你想知道if($a == 1 && $b ==1)
似乎更快,最PHP版本
如果你想知道真正的區別,請看opcodes
第一個代碼:
line # * op fetch ext return operands
---------------------------------------------------------------------------------
2 0 > IS_EQUAL ~0 !0, 1
1 > JMPZ ~0, ->7
3 2 > IS_EQUAL ~1 !1, 1
3 > JMPZ ~1, ->6
4 4 > ECHO 'test'
5 5 > JMP ->6
6 6 > > JMP ->7
7 > > RETURN 1
謝勝利代碼
line # * op fetch ext return operands
---------------------------------------------------------------------------------
2 0 > IS_EQUAL ~0 !0, 1
1 > JMPZ_EX ~0 ~0, ->4
2 > IS_EQUAL ~1 !1, 1
3 BOOL ~0 ~1
4 > > JMPZ ~0, ->7
3 5 > ECHO 'test'
4 6 > JMP ->7
7 > > RETURN 1
你能看到如何用很小的差異相似。這就是爲什麼它沒有意義去擔心這個問題,但寫出了好的和可讀的代碼。
他們是一樣的 - 在這兩種情況下,如果第一個條件是錯誤的,第二個將不會被測試。
不,沒關係。運行環境通常會克服這種小小的性能調整。比如低效的算法或客戶端最佳實踐被忽略。
兩者都是一樣的,因爲PHP解釋器是「足夠聰明」來弄清楚的。
使用案例: 1. a == 1 b == 1 - 兩個條件都將被測試 2. a == 1 b == x - 先測試,然後測試失敗 3. a == 2 b = = x - 第一個將被測試,這是條件b的結束將不會被考慮 –
Preoptimization爲根,一切邪惡。
也就是說,您的第一段代碼速度要快一點(但同樣是最低限度的 - 不要費心去將代碼更改爲此 - 可讀性比通過更改您的代碼獲得的微小速度增量更重要條件
3,000,000 iterations of the first piece of code:〜0.9861679077秒
3,000,000 iterations of the second piece of code:〜1.0684559345秒
差異:〜0.0822880268秒每次迭代
差異:〜0.0000000274秒(或274納秒)
如果你問「什麼是更快」,你通常可以自己測試它。只需大量(數十萬,數百萬等)並測量時間。 – Voitcus
最終,對於這樣的細微事情,可讀性比任何輕微的優化都更重要。即使你正在處理一個需要優化的大型項目,你也可能在其他地方找到它,而不是輕微的語法。 – BLaZuRE