一、規範說明
效能是**執行是否良好的關鍵因素, **的效能與效率影響著公司的運營成本及長遠發展,編寫出高質高效的**是我們每個開發人員必備的素質,也是我們良好的職業素養。
二、影響效能的因素 a
、 商業需求 1.
需求合理性 2.
需求與系統的整合 3.
需求所帶來的商業利益是否與需求開發的成本成正比 4.
需求所帶來的風險 b
、 web 伺服器 1.
併發處理能力 2.
高負載的能力 3.
負載均衡的能力 4.
動態內容與靜態內容的處理能力 5.
web
伺服器部署 c
、 database 伺服器 1.
併發訪問 2.
資料庫伺服器的部署 3.
資料庫的 shema 架構與的表設計是否合理 4.
資料檢索 d
、 作業系統 e
、 客戶端請求
f、 程式/語言
三、分析效能的指標 1.
程式的執行時間 2 2.
程式的執行所消耗的記憶體 3.
單位時間內的並行處理 4.
磁碟 io 的處理
四、優化效能的目標
快速、併發、資源消耗低(記憶體、磁碟 io、cpu 負載)
五、優化效能的原則 1.
伺服器配配置最優化 2.
伺服器部署合理化 3.
商業需求合理並與產出的商業價值成正比 4.
架構可用、可維護、可擴充套件 5.
程式的正確性、簡單性、邏輯的合理性。 6.
不斷的分析效能的的瓶頸 7.
不斷的重構已有的** 8.
優化的優先順序:program->database->web sersver->os->client
六、優化 a
、 程式優化 ·
變數 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 8
、 for($i=$total;$i>0;$i–){}效能好於for($i=0;$i<$total;$–){}
9、 保持迴圈體內的業務邏輯清晰 ·
函式 1、 函式職責清晰,乙個函式只幹一件事,不要雜揉過多的業務邏輯
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 ·
檔案 1、 減少檔案包含數,減少磁碟 io
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、檔案讀寫的併發性
phpmysql
PHP效能全面優化分享
在上篇博文中分享了php的開發規範,這次給大家分享下在php開發中應該注意的一些關於影響最終 效能相關的開發規範。希望大家多多支援,相互交流完善。一 規範說明 效能是 執行是否良好的關鍵因素,的效能與效率影響著公司的運營成本及長遠發展,編寫出高質高效的 是我們每個開發人員必備的素質,也是我們良好的職...
塔防類遊戲效能優化分享
最近因為新冠肺炎的關係,公司做了很多預期相關的內容。其實乙個就是塔防遊戲,大概就是在固定的路線上建立炮台以抵擋病毒,防止乙個個病毒進入體內的。那做就好了,為什麼還要有優化這麼一說呢?要求只是在一些高階的pc機上執行正常即可,而且時間要求非常緊。乙個人完成,包括策劃 美術 程式 數值等工作,只有兩天。...
Facebook優化分享後記
pagecache優化場景 使用者行為在多個熱點頁面中反覆切換。優化方式 基於quickling的流程,在客戶端做資料快取。優點 熱點頁面渲染快,服務端壓力下降。缺點 資料即時性問題。當前可以模擬單客戶自己的操作行為,保證顯示及時性,但是如果服務端狀態變更,訊息無法通知,頁面資料較老 思考 其實就是...