PHP效能優化

2021-08-09 22:53:08 字數 3036 閱讀 4689

在做效能優化之前,我們必須會用工具來測試我們的php服務的效能。

ab命令最主要有兩個引數

引數說明

-n請求數

-c併發數

使用方法如下:

ab -n 100 -c 10

可以得到測試結果:

壓測結果中最重要的是:

requests per second : 每秒能夠處理的請求數

time per request : 處理每個請求所用時間

我們可以在不斷地優化後,通過不斷地壓測,觀測這兩個值的變化,來評估優化效果。

xhprof是faccbook推出的效能測試工具,具體使用請參考使用xhprof查詢php效能瓶頸

優化php效能,最根本的就是從我們所寫的**上進行優化,主要有以下幾點:

在平時開發過程中,要盡量少寫**,能夠用php自帶的函式,常量和變數解決問題時,就不要自己寫。因為在請求量很大時,大量的編譯過程會影響php的效能。

自己寫php**,要經過上圖所示的流程,而使用內建的函式,至少可以省去從php**掃瞄轉化為zend引擎可識別的語法這一步驟。

<?php 

$start = microtime(true);

$i = 0;

$arr = range(1,500000);

while($i

<500000)

$end = microtime(true);

echo

'用時'.($end - $start)*1000 . "ms\n";

上面一段**,我們建立了50w個元素的陣列,分別用isset方法和array_key_exists方法來判斷鍵是否存在,並用microtime來記錄用時,測試發現使用isset方法更快,大約快幾十毫秒。

有人說這點差別無所謂的,沒錯,一般情況下這點效能差異是無所謂的,但是如果是在大專案,億級訪問的專案中,每一處一絲絲的效能差異,累計起來也是不可小覷的。

魔法函式的使用為開發者帶來了很多的便利,但是它有一定的效能開銷,在使用的時候,應當權衡利弊,不可盲目使用。

大家都知道,使用@符號,可以讓php**不報錯,不丟擲異常,這樣開發者可以不用處理錯誤,但是這是懶人的做法,實際上這是有效能開銷的。

@符號的作用原理是:在有@符號這一行**前面和後面分別加上一段opcode, 先將報錯級別設為不報錯,再改回來。相當於使用了error_reporting

為了證明@符號的作用原理,我們可以借助php的乙個擴充套件vld來檢視相關的opcode(安裝vld過程不在此說明)

先準備一段** test.php :

<?php 

file_get_contents('hehe.log');

使用vld檢視opcode:

php -dvld.active=1 -dvld.execute=0 test.php

結果如下:

可以看到,這段**有三段opcode。如果加上@符號@file_get_contents('hehe.log');,再次檢視opcode,可以看到多了兩行opcode:

除了上述原因外,@符號還有麻痺開發者,讓開發者很容易忽視一些需要處理的錯誤,因此盡量少用@符號。

雖然php有記憶體**機制,但是我們開發者也要注意,建議使用完的變數及時unset,尤其是大陣列。

正規表示式,匹配的字串越多越長,回溯的開銷越大,能用字串處理函式處理的,就不要用正規表示式。

如:

for($i = 0;$i

$arr);$i++)

這段**中使用了strlen計算資料長度,每次迴圈的時候都會重複計算,多了很多不必要的開銷,建議提取出來計算。

php語言特性決定了php不適合做密集型運算業務,也就是不適合做大資料運算

所謂周邊問題,是指php執行的環境,作業系統,硬碟,記憶體,資料庫等問題。

操作檔案是對磁碟進行io操作,相比於記憶體操作和資料庫操作來說,磁碟io操作開銷較大。

發起網路請求有一些影響因素,如對方介面穩定性問題,網路穩定問題。

建議:設定超時時間(連線超時200ms,讀超時800ms,寫超時500ms)

序列請求並行化(使用curl_multi_*()或swoole擴充套件)

gzip壓縮雖然可以減小傳輸資料,但是會增加cpu的額外開銷,在使用壓縮的時候,要平衡利弊,不可盲目使用

多次訪問,且內容不變的頁面,請使用快取

一般我們處理業務都是序列執行,假設有4個步驟分別是p1,p2,p3,p4,依次執行。執行時間為四個步驟時間總和。

而時間視窗重疊就是在p1還沒處理完時,就開始處理p2,而不是序列執行。p3和p4也是同理。前提是p2不強依賴於p1,p3和p4同理。模型如下:

這樣一來就能減少整個業務處理的時間。

時間視窗重疊是一種思想,而不是具體的技術手段,我們應當根據業務,合理的使用這種思想去解決問題

旁路方案和時間視窗重疊是類似的。

旁路方案: 在處理業務過程中,從某個節點分出乙個或多個分支來並行執行,從而減少整個業務處理的時間。

優化php效能

優化php效能的五個實用技巧 以下是五個優化技巧,熟練掌握後對於開發還是很有幫助的。1.對字串使用單引號 php 引擎允許使用單引號和雙引號來封裝字串變數,但是這個是有很大的差別的!使用雙引號的字串告訴 php 引擎首先去讀取字串內容,查詢其中的變數,並改為變數對應的值。一般來說字串是沒有變數的,所...

php 效能優化

1 使用 優化工具 zend optimizer,原理是通過檢測zend引擎產生的中間 並且優化他 來提高速度 安裝 zend optimizer,在php.ini裡新增 zend optimizer.optimization level 15 zend extension path to zend...

PHP效能優化

php效能優化 程式優化 1 最好是使用字串連線與單引號,而不是雙引號字串。2 不要隨便複製變數。3 盡量使用echo輸出字串。4 盡量不要使用連線符,輸出多個變數時可以用逗號分開。5 盡量使用switch代替if else。6 不做無畏的替換,先用strpos查詢再做替換,不要做替換效率高200 ...