今天無意見在網上看到有人發布的關于對 php 的優化建議,感覺非常的實用,就轉載過來了。

php 處理字符串的優化建議

1、少用正則表達式

能用PHP內部字符串操作函數的情況下,盡量用他們,不要用正則表達式, 因為其效率高于正則。

沒得說,正則最耗性能。

str_replace() 函數要比 preg_replace() 快得多,strtr() 函數又比 str_replace() 來得快。

国产视频app還有一些其它的函數,例如:strpbrk()、strncasecmp()、strpos()、strrpos()、stripos()、strripos()。

2、字符替換

如果需要轉換的全是單個字符,用字符串作為 strtr() 函數完成替換,而不是數組:

<?php
$addr = strtr($addr, "abcd", "efgh");       // 建議
$addr = strtr($addr, array('a' => 'e', ));  // 不建議
?>

国产视频app第一行代碼要比第二行代碼,效率提升:10 倍。

str_replace() 字符替換比正則替換 preg_replace() 快,但 strtr() 比 str_replace() 又快1/4。

另外,不要做無謂的替換,即使沒有替換,str_replace也會為其參數分配內存。很慢!

国产视频app用 strpos 先查找(非常快),看是否需要替換,如果需要,再替換。

如果需要替換,效率幾乎相等,差別在 0.1% 左右。

国产视频app如果不需要替換:用 strpos 快 200%。

3、壓縮大的字符串

使用 gzcompress() 和 gzuncompress() 對容量大的字符串進行壓縮和解壓,再存入和取出數據庫。

這種內置的函數使用gzip算法,能壓縮字符串90%。

4、echo 輸出

国产视频appecho 字符串用逗號代替點連接符更快些。

<?php
echo $str1, $str2;       // 速度快
echo $str1 . $str2;      // 速度稍慢
?>

5、盡量用單引號

国产视频appPHP 引擎允許我們可以使用單引號和雙引號來封裝字符串和變量,但是他們的解析速度是有差別的。使用雙引號,php會首頁讀取字符串,再查找里面的變量就會消耗時間!

<?php
echo "feiniaomy.com";  // 不推薦
echo 'feiniaomy.com';  // 推薦
 
$host = "feiniaomy.com";
echo "my homepage {$host}"; //不推薦
echo 'my homepage'.$host;   // 推薦         
?>

6、使用isset代替strlen

在檢驗字符串長度時,我們第一想法會使用 strlen() 函數。

此函數執行起來相當快,因為它不做任何計算,只返回在zval結構(C的內置數據結構,用于存儲PHP變量)中存儲的已知字符串長度。

但是,由于strlen()是函數,多多少少會有些慢,因為函數調用會經過諸多步驟,如字母小寫化、哈希查找,會跟隨被調用的函數一起執行。

国产视频app在某些情況下,你可以使用 isset() 技巧加速執行你的代碼。例如:

<?php
if (strlen($foo) < 5) {
    echo "Foo is too short";
}
 
// 使用isset()
if (!isset($foo{5})) {
    echo "Foo is too short";
}
?>

7、用split分割字符串

国产视频app在分割字符串時,split()要比explode()快。

split()
0.001813 - 0.002271 seconds (avg 0.002042 seconds)
explode()
0.001678 - 0.003626 seconds (avg 0.002652 seconds)

8、echo效率高于print

因為 echo 沒有返回值,print 返回一個整型。

注意:echo 輸出大字符串的時候,如果沒有調整就會嚴重影響性能。

国产视频app打開 Apache 的 mod_deflate 進行壓縮,或者打開 ob_start 將內容放進緩沖區,可以改善性能問題。

php 語句優化建議

1、盡量不用要 @

国产视频app用 @ 掩蓋錯誤會降低腳本運行速度,并且在后臺有很多額外操作。

用 @ 與不用 @ 相比效率相差3倍,特別是在循環中使用

2、避免使用魔術方法

對于__開頭的函數就命名為魔術函數,它們都在特定的條件下觸發。

這些魔術函數包括:__construct()、__get()、__call()、__autoload()等等。

以__autoload() 為例,如果不能將類名與實際的磁盤文件對應起來,將不得不做大量的文件存在判斷。

而判斷文件存在需要磁盤 I/O 操作,眾所周知,磁盤 I/O 操作的效率很低,因此這才是使得 autoload 機制效率降低的原因。

国产视频app因此,在系統設計時,需要定義一套清晰的、將類名與實際磁盤文件映射的機制,這個規則越簡單越明確,__autoload()機制的效率就越高。autoload機制并不是天然的效率低下,只有濫用 autoload、設計不好的自動裝載函數,才會導致其效率的降低.

国产视频app所以說,盡量避免使用__autoload等魔術方法,有待商榷。

3、不要在循環里用函數

例:

<?php
for($x=0; $x < count($array); $x++) {
}
?>
這種寫法在每次循環的時候都會調用 count() 函數,效率大大降低,建議這樣:
<?php
$len = count($array);
for($x=0; $x < $len; $x++) {
}
?>

4、使用三元運算符

在簡單的判斷語句中,三元運算符 ?: 更簡潔高效。

5、使用選擇分支語句

国产视频appswitch、case好于使用多個if、else if語句,并且代碼更加容易閱讀和維護。

6、屏蔽敏感信息

国产视频app使用 error_reporting() 函數來預防潛在的敏感信息顯示給用戶。

国产视频app理想的錯誤報告應該被完全禁用在php.ini文件里。

如果用的是共享虛擬主機,php.ini不能修改,最好添加 error_reporting() 函數。

放在每個腳本文件的第一行,或者用require_once()來加載,能有效的保護敏感的SQL查詢和路徑,在出錯時不被顯示。

7、不使用短標簽

不要使用開始標志的縮寫形式,你正在使用這樣的符號嗎,應該用完整的<?php 開始標簽。

国产视频app當然,如果是輸出變量,用 = $value ?>這種方式是鼓勵的,可以是代碼更加簡潔。

8、 純PHP代碼不加結束標記

如果文件內容是純 PHP 代碼,最好在文件末尾刪除 PHP 結束標記 " ?> "

這可以避免在 PHP 結束標記之后萬一意外加入了空格或者換行符,會導致 PHP 開始輸出這些空白,而腳本中此時并無輸出的意圖。

php 函數優化建議

1、盡量使用PHP內部函數

內置函數使用C語言實現,并且經過PHP官方優化,效率更高。

2、使用絕對路徑引用文件

在 include 和 require 中盡量使用絕對路徑。

如果包含相對路徑,PHP 會在 include_path 里面遍歷查找文件,而使用絕對路徑就會避免此類問題,解析路徑所需的時間會更少。

3、包含文件

盡量不要用 require_once 和 include_once 包含文件,它們多一個判斷文件是否被引用的過程,能不用盡量不用。

而使用 require、include方法代替。

4、函數快于類方法

調用只有一個參數、并且函數體為空的函數,花費的時間等于 7-8 次 $localvar++ 運算。

而同一功能的類方法大約為 15 次 $localvar++ 運算。

5、用子類方法

国产视频app基類里面只放能重用的方法,其他功能盡量放在子類中實現,子類里方法的性能優于在基類中。

6、類的性能和其方法數量沒有關系

国产视频app新添加10個或多個方法到測試的類后,性能沒什么差異。

php 變量優化建議

1、 及時銷毀變量

數組、對象和 GLOBAL 變量在 PHP 中特別占內存的,這個由于 PHP 的底層的 zend 引擎引起的。

一般來說,PHP 數組的內存利用率只有 1/10。也就是說,一個在C語言里面100M 內存的數組,在PHP里面就要1G。特別是,在PHP作為后臺服務器的系統中,經常會出現內存耗費太大的問題。

2、使用$_SERVER變量

如果你需要得到腳本執行的時間,$_SERVER['REQUSET_TIME']優于time(),一個是現成就可以直接用,一個還需要函數得出的結果。

3、 方法里建立局部變量

国产视频app在類的方法里建立局部變量速度最快,幾乎和在方法里調用局部變量一樣快。

4、局部變量比全局變量快

由于局部變量是存在棧中的。當一個函數占用的棧空間不是很大的時候,這部分內存很有可能全部命中cache,CPU訪問的效率是很高的。

相反,如果一個函數同時使用全局變量和局部變量,當這兩段地址相差較大時,cpu cache需要來回切換,效率會下降。

5、局部變量而不是對象屬性

国产视频app建立一個對象屬性(類里面的變量,例如:$this->prop++)比局部變量要慢3倍。

6、提前聲明局部變量

建立一個未聲明的局部變量,要比建立一個已經定義過的局部變量慢9-10倍。

7、謹慎聲明全局變量

聲明一個未被任何一個函數使用過的全局變量,也會使性能降低。

国产视频app這和聲明相同數量的局部變量一樣,PHP可能去檢查這個全局變量是否存在。

8、使用 ++$i 遞增

當執行變量$i的遞增或遞減時,$i++ 會比 ++$i 慢一些。這種差異是PHP特有的,并不適用于其他語言!

国产视频app++$i 更快是因為它只需要3條指令(opcodes),$i++ 則需要4條指令。后置遞增實際上會產生一個臨時變量,這個臨時變量隨后被遞增。而前置遞增直接在原值上遞增。

php 數組優化建議

1、用字符串而不是數組作為參數

如果一個函數既能接受數組,又能接受簡單字符做為參數,那么盡量用字符作為參數。

例如,字符替換函數,參數列表并不是太長,就可以考慮額外寫一段替換代碼。

使得每次傳遞參數都是一個字符,而不是接受數組做為查找和替換參數。

2、數組元素加引號

$row['id'] 比 $row[id]速度快7倍。

如果不帶引號,例如 $a[name],那么PHP會首先檢查有沒有define定義的name常量。如果有,就用這個常量值作為數組鍵值。如果沒有,再查找鍵值為字符串'name'的數組元素。多了一個查找判斷的過程,所以建議養成數組鍵名加引號的習慣。正如上面字符串部分所述,用'又比用"速度更快。

3、多維數組操作

多維數組盡量不要循環嵌套賦值。

4、循環用foreach

盡量用 foreach 代替 while 和 for 循環,效率更高。

php 架構優化建議

1、 壓縮輸出

幾乎所有的瀏覽器都支持Gzip的壓縮方式,gzip可以降低80%的輸出.付出的代價是,大概增加了10%的cpu計算量。

国产视频app在php.ini中開啟gzip壓縮:

zlib.output_compression = On
zlib.output_compression_level = (level)

//level可能是1-9之間的數字,你可以設置不同的數字。

2、靜態化頁面

Apache/Nginx 解析一個 PHP 腳本的時間,要比解析一個靜態HTML頁面慢2至10倍。

国产视频app所以盡量使頁面靜態化,或使用靜態HTML頁面。

3、利用PHP的擴展

一直以來,大家都在抱怨PHP內容太過繁雜。最近幾年來,開發人員作出了相應的努力,移除了項目中的一些冗余特征。即便如此,可用庫以及其它擴展的數量還是很可觀。甚至一些開發人員開始考慮實施自己的擴展方案。

4、PHP緩存

一般情況下,PHP腳本被PHP引擎編譯后執行,會被轉換成機器語言,也稱為操作碼。如果PHP腳本反復編譯得到相同的結果,為什么不完全跳過編譯過程呢?

国产视频appPHP加速器緩存了編譯后的機器碼,允許代碼根據要求立即執行,而不經過繁瑣的編譯過程。

對PHP開發人員而言,目前提供了兩種可用的緩存方案。

国产视频appAPC(Alternative PHP Cache,可選PHP緩存),它是一個可以通過PEAR安裝的開源加速器。

国产视频app另一種流行的方案是OPCode,也就是操作碼緩存技術。

5、使用NoSQL緩存

Memchached 或者 Redis 都可以。

国产视频app這些是高性能的分布式內存對象緩存系統,能提高動態網絡應用程序性能,減輕數據庫的負擔。

国产视频app這對運算碼 (OPcode)的緩存也很有用,使得腳本不必為每個請求重新編譯。

PS:版權聲明

国产视频app本文來自網絡,因為找不到出處了,所以未能標注!如果您是原作者,可以聯系本站進行版權標注或刪除!