溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP開發(fā)規(guī)范中性能優(yōu)化的方法是什么

發(fā)布時間:2021-11-30 11:28:33 來源:億速云 閱讀:118 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹“PHP開發(fā)規(guī)范中性能優(yōu)化的方法是什么”,在日常操作中,相信很多人在PHP開發(fā)規(guī)范中性能優(yōu)化的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP開發(fā)規(guī)范中性能優(yōu)化的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、規(guī)范說明

性能是網(wǎng)站運行是否良好的關鍵因素,網(wǎng)站的性能與效率影響著公司的運營成本及長遠發(fā)展,編寫出高質高效的代碼是我們每個開發(fā)人員必備的素質,也是我們良好的職業(yè)素養(yǎng)。

二、影響性能的因素

A、 商業(yè)需求

需求合理性
需求與系統(tǒng)的整合
需求所帶來的商業(yè)利益是否與需求開發(fā)的成本成正比
需求所帶來的風險
B、 Web 服務器

并發(fā)處理能力
高負載的能力
負載均衡的能力
動態(tài)內容與靜態(tài)內容的處理能力
Web 服務器部署
C、 DataBase 服務器

并發(fā)訪問
數(shù)據(jù)庫服務器的部署
數(shù)據(jù)庫的 shema 架構與的表設計是否合理
數(shù)據(jù)檢索
D、 操作系統(tǒng)

E、 客戶端請求
F、 程序/語言


三、分析性能的指標

程序的運行時間 2
程序的運行所消耗的內存
單位時間內的并行處理
磁盤 IO 的處理
四、優(yōu)化性能的目標
快速、并發(fā)、資源消耗低(內存、磁盤 IO、CPU 負載)

五、優(yōu)化性能的原則

服務器配配置最優(yōu)化
服務器部署合理化
商業(yè)需求合理并與產(chǎn)出的商業(yè)價值成正比
架構可用、可維護、可擴展
程序的正確性、簡單性、邏輯的合理性。
不斷的分析性能的的瓶頸
不斷的重構已有的代碼
優(yōu)化的優(yōu)先級:program->database->web sersver->os->client
六、優(yōu)化

A、 程序優(yōu)化

變量
1、 變量大小,注意變量大小是節(jié)約內存的最有效手段,對于來自用戶表單、數(shù)據(jù)庫和文件緩存的數(shù)據(jù)都需要控制變量的大小。因為cpu要處理的數(shù)據(jù)是來源于內存

2、 變量有效期,使用unset()函數(shù)注銷不需要的變量是一種良好的習慣,將一些不需要的變量立即注銷可提高內存的使用率。

3、 復制變量,盡量不要復制變量,否則就會帶來1倍的內存消耗,即使復制變量也應該要立即注銷原有變量。

4、 變量類型,初始化變量請注意其變量類型,一個變量在執(zhí)行過程中最好只有一種類型狀態(tài)。對于數(shù)組變量,請初始化聲明,如下: $a = array();

5、臨時變量,是處理業(yè)務邏輯的臨時存儲,這些都是需要消耗內存的。如果臨時變量使用結束請立即注銷,特別是在一些過程式代碼的執(zhí)行流程中,對于一些函數(shù),如果業(yè)務非常復雜,同樣需要立即注銷臨時變量

6、靜態(tài)變量,對于一些需要由復雜業(yè)務產(chǎn)生的變量,如果在程序的執(zhí)行過程中多次產(chǎn)生并使用,可考慮使用靜態(tài)變量,減少程序的cpu執(zhí)行次數(shù)

7、變量的性能:局部變量>全局變量>類屬性>未定義的變量。

循環(huán)
1、 盡量減少循環(huán)的次數(shù)。
2、 盡量減少循環(huán)的潛逃的層次,不要超過三層。
3、 避免在循環(huán)內有過多的業(yè)務邏輯。
4、 不要循環(huán)包含文件
5、 不要循環(huán)執(zhí)行數(shù)據(jù)庫操作。
6、 優(yōu)先使用foreach,它比for/while效率高
7、 不要把 count/strlen/sizeof 放到 for 循環(huán)的條件語句中 For($i=0,$count=count($array);$i<$count;$i++){} 不要使用for($i=0;$i<count($array);$i++){};

8、 for($i=$total;$i>0;$i&ndash;){}性能好于for($i=0;$i<$total;$&ndash;){}
9、 保持循環(huán)體內的業(yè)務邏輯清晰

函數(shù)
1、 函數(shù)職責清晰,一個函數(shù)只干一件事,不要雜揉過多的業(yè)務邏輯
2、 函數(shù)代碼體不要超過20行,反之,考慮拆分。
3、 優(yōu)先使用php內置函數(shù)
4、 常量與函數(shù)同時能干一件事,優(yōu)先使用常量。

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、 發(fā)揮trim最大功效,替換substr。$filepath=trim($filename,&rsquo;/&rsquo;).&rsquo;/&rsquo;;
9、Isset/empty 雖然兩個函數(shù)功能有所差異,但在同樣的情況下推薦使用 empty()
10、isfile/file_exist 兩個函數(shù)的功能有所不同,file_exist既可判斷文件是否存在,也可以判斷目錄是否存在,在同樣的情況下推薦使用is_file

文件
1、 減少文件包含數(shù),減少磁盤 IO
2、 使用完整路徑,或者容易轉換的相對路徑。避免在 include_path 查找
3、 文件的代碼行數(shù)不要超過 2000 行
4、Require_once/include_once 效率低于 require/include, 需要額外的去查看系統(tǒng)是否已經(jīng)調用過這個文件. 因為它們在一個 opcode 緩存下的調用非常慢

5、程序執(zhí)行文件用 requie/require_once,緩存文件用include/include_once。Include 效率好于 require
6、優(yōu)化 spl 中的文件自動加載機制,可參靠 yii

7、類庫文件加載,是否考慮類是否已經(jīng)實例化,可考慮采用設計模式之單例模式
8、文件讀寫的并發(fā)性

面向對象
1、 控制實例的創(chuàng)建的數(shù)量
2、 優(yōu)先使用常量、類常量
3、 優(yōu)先例用靜態(tài)變量,靜態(tài)屬性
4、 類的結構合理
5、 面象接口編程
6、 封裝變化點
7、 依賴于抽象,不依賴于細節(jié)
8、 優(yōu)先使用靜態(tài)成員
9、 類的接口清晰穩(wěn)定,類的職責單一,類與類的通信合理
10、 使用常量的好處 編譯時解析,沒有額外開銷 雜湊表更小,所以內部查找更快 類常量僅存在于特定「命名空間」,所以雜湊名更短代碼更干凈,使除錯更方便

字符串
1、 用單引號替代雙引號引用字符串;避免檢索字符串中的變量

運算
1、 用 i+=1 代替i=i+1。符合c/c++的習慣,效率還高
2、 ++$i 的效率高于++$i,&ndash;$i 同理

數(shù)組
1、 多維數(shù)組盡量不要循環(huán)嵌套賦值;
2、 使用$array[&lsquo;name&rsquo;]方式訪問數(shù)組,禁止$array[name]/$array[&ldquo;name&rdquo;]

判斷
1、 邏輯判斷請優(yōu)先使用switch 的方式,對于業(yè)務邏輯相對較多的情況請選擇if/else,提高代碼的可讀性
2、 盡量控制if/else判斷的個數(shù),如果太多請考慮功能優(yōu)化或代碼優(yōu)化
3、 盡量使用恒等用于比較判斷,恒等的效率高于等于,而且還能避免一些類型強制轉換的錯誤
4、 if/else與_&&,單條語句判斷請選擇&&的形式, &&的效率高于if/else,如下 :
if ($a == 1) {
$b = 2;
}可選擇為($a == 1) && $b = 2;

緩存
1、 使用php加速器,緩沖opcode
2、 例用memcache/nosql
3、 使用內存數(shù)據(jù)庫、
4、 使用文件緩存
5、 緩沖功能 5

其它
1、 少用@符號,嚴重影響性能
2、 適時關閉遠程資源連接如數(shù)據(jù)庫,ftp、socket等,適時的清理這些資源

B、 數(shù)據(jù)庫優(yōu)化
1、 合理的商業(yè)需情
2、 數(shù)據(jù)庫 schema 架構優(yōu)化
3、 垂直與水平分庫分表
4、 索引優(yōu)化,查詢優(yōu)化
5、 第三方開源檢索工具(sphinx)
6、 主從數(shù)據(jù)庫服務器的使用。
C、 Web 服器優(yōu)化(暫未整理,有相應的 Web 服務器優(yōu)化手冊)

D、 操作系統(tǒng)優(yōu)化(暫未整理,有相應的 OS 優(yōu)化手冊)

E、 前端優(yōu)化
1、合理的 html 結構
2、合理 html 與css 的同時,考慮 Css 設計合理,減少 http 請求
3、合理 html 與javascript 的同時,考慮拆分是否合理,減少 http 請求
4、優(yōu)化 javascript 代碼,讓用戶有良好的體驗
5、根據(jù) http 協(xié)議,優(yōu)化高并發(fā)請求

七、性能檢測工具

Web Server

 ab
 http_load
PHP

 apd
 xdebug
Mysql

 explain

profiler 

到此,關于“PHP開發(fā)規(guī)范中性能優(yōu)化的方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

php
AI