php性能優化

1, 多用php提供的內置函數


php解釋成 opcode來執行,內置函數使代碼更少


2,不同的內置函數的機制不一樣,性能也不一樣, 比如 isset array_has_key

如何來測試,php腳本執行的時間呢?用 time 命令, time php 11.php


3,php的執行過程

*.php ->通過zend引擎scanner後,保存爲zend引擎可以識別的語法exprs

然後解析(parser)成opcodes, 然後執行,最後輸出


掃描 轉碼 解析 執行 


直接用內置函數,在掃描的階段,就省了很多, 在zend引擎識別語法,,的時候,內置的也是比自己寫的快, 最後生成的


opcodes 也是比自己實現的opcodes要少。


4,少用魔術方法,能不用就不用


5,php -dvld.active=1 -dvld.execute=0 11.php

安裝完php的 dvld擴展後,可以用這個命令,來查看,php解釋後生成的opcode代碼。


例如 @ 忽略錯誤,這個是在代碼執行前,生成把錯誤提示忽略,代碼執行後,把錯誤提示再打開,增加了多餘的開銷,所以盡


量少用。


6,合理使用內存,建議大的數組用unset()及時釋放不適用的內存(注:unset()出現註銷不掉的情況)。


7,減少計算密集型業務


8,數組的key必須用引號括起來,否則或先去查找defind的變量



9,常見php場景的開銷次序

讀寫內存  讀寫數據庫 讀寫磁盤 讀寫網絡數據

儘量避免從磁盤寫入 讀寫一個文件,或者網絡不穩定的數據。 儘量多的用讀寫數據庫 讀寫內存


10,減少php發起的網絡請求

(1),對方接口的不確定因素

(2),網絡穩定性

優化方法:

(1),設置超時事件

a),鏈接超時,不超過200毫秒

b),讀超時,800毫秒

c),寫超時,500ms

(2),將串行請求並行化

a),使用curl_multi_*(),雖然並行了,但是多個並行請求的中間有一個慢了,那就需要等帶最慢的請求完


b),使用swoole擴展(開源的並行網絡請求框架)



11,壓縮php輸出的利與弊

用Gzip即可

利:利用我們的數據輸出,client端能更快的獲取數據

弊:額外的服務端cpu , client的cpu的開銷


12,php緩存複用

多次請求,內容不變的情況


13,smarty 調優和重疊時間窗口思想

開啓smarty開啓caching


14,串行方案最慢, 重疊時間窗口思想  旁路方案

類似,初中課文中說的,統籌方法。


15,XHPorf 工具,facebook的php性能分析工具


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章