1. 程式人生 > >PHP Performance Optimization

PHP Performance Optimization

4月的時候, 做了一個關於PHP效能優化的技術交流.

今天把當時交流的PPT放到slideShare了.

順便談一下對PHP效能優化的一些看法.

1. 優化建議目的不是為了優化, 而是為了防微杜漸..

在PPT中羅列的編碼時候的優化建議, 不是為了讓大家在出現效能問題的時候, 以這些作為準則去對程式碼進行優化. 而是希望能在大家最初寫程式碼的時候, 就有一個心理的認知, 應該怎麼寫會更好.

2. 優化的建議不是準則

當我把PPT分享給公司的同事的時候, 會有人質疑, 魔術方法都不讓用?

優化的建議, 是建議, 是防止大家濫用, 肆無忌憚的用. 如果你能在寫程式碼的時候, 能意識到, 什麼慢, 什麼快, 從而避免一些沒有必要的對魔術方法的呼叫, 那就是這個優化建議所追求的效果了

比如, 我在Yaf中, 為檢視引擎定義了魔術方法__set, 於是就有些朋友這麼來用:

$this->getView()->user =  "laruence";
$this->getView()->age  = 28;
$this->_view->desc      = "PHP engineer";

如果是寫C, 那麼沒有問題, 但是在PHP中, 每一個set都是一個函式呼叫, 所以看過了效能優化建議, 大家能意識到, 其實這個完全可以通過:

$this->getView()->assign(array(
      "user" => "laruence",
      "age"  => 28,
      "desc" => "PHP engineer",
));;

來替代, 那就是優化建議所希望達到的效果.

3. 優化建議不是通用的, 是和語言相關的

有很多PHPer以前是寫C的, 也可能是寫Java的, 雖說語言只是工具, 但是要想用的好, 你還是應該瞭解工具的特點, 為不同的工具做不同的優化策略.

比如, 對於C來說, 它有一個很強大的編譯”優化”器, 可以為你做很多優化, 而PHP是解釋型指令碼語言, 它只會重視的執行你的程式碼, 不會做任何優化, 所以, 你寫的程式碼的風格, 直接影響到最終的執行風格.

還有, 對於C來說, 符號在執行器都會變成地址(絕大部分), 而對於PHP來說, 符號都需要經過查詢(Hash Lookup)才能使用, 於是我也看到了類似下面的程式碼:

for ($i=0; i<10;i++) {
   $arr[1][2][3][4][5] = $i;
}

每一次迴圈, 都會帶來6次的Hash Lookup…..

4. 要知根究底
PHP是一個很高階的語言, 使用它可以很方便, 很簡潔的完成一些功能.

但是, 追根究底, 它也是最終通過c程式碼, 繼而彙編, 機器碼去執行的. 也許看似簡單的一條PHP語句, 最終可能需要數十條, 上百條的C語言程式碼來完成.

而我們, 只有理解到這個過程, 才能真正做到, 在高階語言層面, 做出對底層有正面影響的優化.

最後, 如果slideshare被”擋”了,, 點選這裡下載看吧: PHP Performance PPT