PHP性能如何实现全面优化?
? 性能是網站運行是否良好的關鍵因素, 網站的性能與效率影響著公司的運營成本及長遠發展,編寫出高質高效的代碼是我們每個開發人員必備的素質,也是我們良好的職業素養。
? ?? ?如何優化PHP性能呢?
一、變量(重要)? ?? ??
? ?? ? 1)、 變量大小,注意變量大小是節約內存的最有效手段,對于來自用戶表單、數據庫和文件緩存的數據都需要控制變量的大小。 因為cpu要處理的數據是來源于內存
? ?? ? 2)、 變量有效期,使用unset()函數注銷不需要的變量是一種良好的習慣,將一些不需要的變量立即注銷可提高內存的使用率。
? ?? ? 3)、 復制變量,盡量不要復制變量,否則就會帶來1倍的內存消耗,即使復制變量也應該要立即注銷原有變量。
? ?? ? 4)、 變量類型,初始化變量請注意其變量類型,一個變量在執行過程中最好只有一種類型狀態。對于數組變量,請初始化聲明,如下: $a = array();
? ?? ? 5)、 臨時變量,是處理業務邏輯的臨時存儲,這些都是需要消耗內存的。如果臨時變量使用結束請立即注銷,特別是在一些過程式代碼的執行流程中,對于一些函數,如果業務非常復雜,同樣需要立即注銷臨時變量
? ?? ? 6)、 靜態變量,對于一些需要由復雜業務產生的變量,如果在程序的執行過程中多次產生并使用,可考慮使用靜態變量,減少程序的cpu執行次數
? ?? ? 7)、 變量的性能:局部變量>全局變量>類屬性>未定義的變量。
二、循環(重要)
? ?? ? 1)、 盡量減少循環的次數。
? ?? ? 2)、 盡量減少循環的潛逃的層次,不要超過三層。
? ?? ? 3)、 避免在循環內有過多的業務邏輯。
? ?? ? 4)、 不要循環包含文件
? ?? ? 5)、 不要循環執行數據庫操作。
? ?? ? 6)、 優先使用foreach,它比for/while效率高
? ?? ? 7)、 不要把 count/strlen/sizeof 放到 for 循環的條件語句中 For($i=0,$count=count($array);$i<$count;$i++){} 不要使用for($i=0;$i<count($array);$i++){};
? ?? ? 8)、 for($i=$total;$i>0;$i–){}性能好于for($i=0;$i<$total;$–){}
? ?? ? 9)、 保持循環體內的業務邏輯清晰
三、 函數(重要)
? ?? ?2)、 函數代碼體不要超過20行,反之,考慮拆分。
? ?? ?3)、 優先使用php內置函數
? ?? ?4)、 常量與函數同時能干一件事,優先使用常量。
? ?? ?? ?? ?? ?例如:
? ?? ?? ?? ?? ?? ?· phpversion() < PHP_VERSION
? ?? ?? ?? ?? ?? ?· get_class() < __CLASS__
? ?? ?? ?? ?? ?? ?· is_null() < NULL ===
? ?? ?5)、 echo 的性能好于print,輸入多個變量的時候用echo $str,$str1,不用.連接符
? ?? ?6)、 $_SERVER[REQUEST_TIME]替換time();
? ?? ?7)、 字符串替換strtr()->str_replace()->preg_replace()->epreg();
? ?? ?8)、 發揮trim最大功效,替換substr。$filepath=trim($filename,’/’).’/’;
? ?? ?9)、Isset/empty 雖然兩個函數功能有所差異,但在同樣的情況下推薦使用 empty()
? ? 10)、isfile/file_exist 兩個函數的功能有所不同,file_exist既可判斷文件是否存在,也可以判斷目錄是否存在,在同樣的情況下推薦使用is_file
四、文件(重要)
? ?? ? 2)、 使用完整路徑,或者容易轉換的相對路徑。避免在 include_path 查找
? ?? ? 3)、 文件的代碼行數不要超過 2000 行
? ?? ? 4)、Require_once/include_once 效率低于 require/include, 需要額外的去查看系統是否已經調用過這個文件. 因為它們在一個 opcode 緩存下的調用非常慢
? ?? ? 5)、程序執行文件用 requie/require_once,緩存文件用include/include_once。Include 效率好于 require
? ?? ? 6)、優化 spl 中的文件自動加載機制,可參靠 yii
? ?? ? 7)、類庫文件加載,是否考慮類是否已經實例化,可考慮采用設計模式之單例模式
? ?? ? 8)、文件讀寫的并發性
五、面向對象(重要)
? ?? ? 2)、 優先使用常量、類常量
? ?? ? 3)、 優先例用靜態變量,靜態屬性
? ?? ? 4)、 類的結構合理
? ?? ? 5)、 面象接口編程
? ?? ? 6)、 封裝變化點
? ?? ? 7)、 依賴于抽象,不依賴于細節
? ?? ? 8)、 優先使用靜態成員
? ?? ? 9)、 類的接口清晰穩定,類的職責單一,類與類的通信合理
? ???10)、 使用常量的好處 編譯時解析,沒有額外開銷 雜湊表更小,所以內部查找更快 類常量僅存在于特定「命名空間」,所以雜湊名更短 代碼更干凈,使除錯更方便
六、字符串
? ?? ???1)、 用單引號替代雙引號引用字符串;避免檢索字符串中的變量
七、運算
? ?? ? 1)、 用 i+=1 代替i=i+1。符合c/c++的習慣,效率還高
? ?? ? 2)、 ++$i 的效率高于$i++,–$i 同理[/hide]
八、數組
? ?? ?1)、 多維數組盡量不要循環嵌套賦值;
? ?? ?2)、 使用$array[‘name’]方式訪問數組,禁止$array[name]/$array[“name”]
九、判斷(重要)
? ???2)、 盡量控制if/else判斷的個數,如果太多請考慮功能優化或代碼優化
? ???3)、 盡量使用恒等用于比較判斷,恒等的效率高于等于,而且還能避免一些類型強制轉換的錯誤
? ???4)、 if/else與_&&,單條語句判斷請選擇&&的形式, &&的效率高于if/else,如下 :
? ?? ?? ?? ?? ? if ($a == 1) {
? ?? ?? ?? ?? ?? ???$b = 2;
? ?? ?? ?? ?? ???}
? ?? ?? ?? ?? ?可選擇為($a == 1) && $b = 2;
十、緩存
? ?? ?1)、 使用php加速器,緩沖opcode
? ?? ?2)、 例用memcache/nosql
? ?? ?3)、 使用內存數據庫、
? ?? ?4)、 使用文件緩存
? ?? ?5)、 緩沖功能?
十一、其它
? ???1)、 少用@符號,嚴重影響性能
? ???2)、 適時關閉遠程資源連接如數據庫,ftp、socket等,適時的清理這些資源
十二、 數據庫優化(重要)
? ???2)、 數據庫 schema 架構優化
? ???3)、 垂直與水平分庫分表
? ???4)、 索引優化,查詢優化
? ???5)、 第三方開源檢索工具(sphinx)
? ???6)、 主從數據庫服務器的使用。
? ???詳情可查看傳智PHP公開視頻《大型網站優化核心技術-mysql》
十三、 前端優化
? ???1)、合理的 html 結構
? ???2)、合理 html 與css 的同時,考慮 Css 設計合理,減少 http 請求
? ???3)、合理 html 與java script 的同時,考慮拆分是否合理,減少 http 請求
? ???4)、優化 java script 代碼,讓用戶有良好的體驗
? ???5)、根據 http 協議,優化高并發請求
十四、性能檢測工具(重要)
? ???1)、Web Server
? ???2)、ab
? ???3)、http_load
? ???4)、PHP
? ???5)、apd
? ???6)、xdebug
? ???7)、Mysql
? ???8)、explain
? ???9)、profiler 此文章轉載至傳智播客:http://bbs.itcast.cn/thread-82934-1-1.html?xhw
轉載于:https://www.cnblogs.com/bieanju/p/5062883.html
總結
以上是生活随笔為你收集整理的PHP性能如何实现全面优化?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows上PHP扩展的实现,部署及
- 下一篇: phpcms v9中模板标签和联动菜单的