PHP面試題之優化,php面試題
* PHP性能問題
* 1.PHP語法使用的不恰當
* 2.使用PHP語言做了它不擅長的事
* 3.使用PHP語言鏈接的服務不給力
* 4.PHP自身做不了的事情
*
* PHP的性能問題的解決方向
* 1.PHP語言級的性能優化(代碼優化)
* 2.PHP周邊問題的性能優化(linux,mysql,磁盤等)
* 3.PHP語言性能的優化(c層)
*
* 使用ab壓力測試(-n請求數 -c並發數 url目標壓測地址)
* ./ab -n1000 -c100 http://www.baidu.com
* Request per second每秒接受的請求數(越大越好)
* Time per request一個請求需要的時間(越小越好)
*
* time php test.php 測試代碼執行時間
*
* vld- PHP Opcode查看擴展
* php -dvld.active=1 -dvld.execute=0 test.php
*
* PHP代碼運行流程
* *.php(PHP文件)->Scanner(掃描代碼,分析)->Exprs(保存成zend引擎可以識別的文件)->Parser(解析)->Opcodes(能被執行的文件)->Exec(執行)->Output(輸出結果)
* 多使用PHP內置變量,常量,函數
* php內置函數也存在差異,多使用時間復雜度低的.例isset()和array_key_exists()存在差異
* 盡可能規避使用PHP魔法函數
* 禁用@錯誤抑制符,會產生額外的開銷
* 合理使用內存,利用unset()及時釋放不使用的內存
* 盡量少使用正則表達式
* 避免在循環內做運算for($i=0;strlen($str);$i++){}
* 減少計算密集型業務(php語言特性決定了PHP不適合做大數據量運算)
* 務必使用帶引號字符串做鍵值(key)
* 減少文件類操作 內存<<數據庫<磁盤<讀寫網絡數據
* 優化網絡:1.設置超時時間 連接超時200ms 讀超時800ms 寫超時500 2.將串行請求並行化:使用curl_multi_*() ,使用swoole擴展
* 壓縮PHP接口輸出:Gzip 好處:client更快獲取數據 壞處:額外的cpu開銷
* PHP緩存復用
* 時間窗口重疊方法
* PHP旁路方案
* xhprof (php -ri xhprof)