PHP效能全面優化分享

2021-10-09 01:20:40 字數 3106 閱讀 5553

在上篇博文中分享了php的開發規範,這次給大家分享下在php開發中應該注意的一些關於影響最終**效能相關的開發規範。希望大家多多支援,相互交流完善。

一、規範說明

效能是**執行是否良好的關鍵因素, **的效能與效率影響著公司的運營成本及長遠發展,編寫出高質高效的**是我們每個開發人員必備的素質,也是我們良好的職業素養。

二、影響效能的因素

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;$i8、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、檔案讀寫的併發性

PHP效能全面優化分享

一 規範說明 效能是 執行是否良好的關鍵因素,的效能與效率影響著公司的運營成本及長遠發展,編寫出高質高效的 是我們每個開發人員必備的素質,也是我們良好的職業素養。二 影響效能的因素 a 商業需求 1.需求合理性 2.需求與系統的整合 3.需求所帶來的商業利益是否與需求開發的成本成正比 4.需求所帶來...

塔防類遊戲效能優化分享

最近因為新冠肺炎的關係,公司做了很多預期相關的內容。其實乙個就是塔防遊戲,大概就是在固定的路線上建立炮台以抵擋病毒,防止乙個個病毒進入體內的。那做就好了,為什麼還要有優化這麼一說呢?要求只是在一些高階的pc機上執行正常即可,而且時間要求非常緊。乙個人完成,包括策劃 美術 程式 數值等工作,只有兩天。...

Facebook優化分享後記

pagecache優化場景 使用者行為在多個熱點頁面中反覆切換。優化方式 基於quickling的流程,在客戶端做資料快取。優點 熱點頁面渲染快,服務端壓力下降。缺點 資料即時性問題。當前可以模擬單客戶自己的操作行為,保證顯示及時性,但是如果服務端狀態變更,訊息無法通知,頁面資料較老 思考 其實就是...