亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

php性能優(yōu)化的理論知識講解

來源:不言 發(fā)布時間:2019-03-23 15:16:47 閱讀量:1277

本篇文章給大家?guī)淼膬?nèi)容是關(guān)于php性能優(yōu)化的理論知識講解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

什么情況下,遇到了PHP性能問題?

1 PHP語法使用的不恰當(dāng)
2 使用PHP語言做不了它不擅長做的事
3 用php語言連接的服務(wù)不給力
4 PHP自身的短板
5 我也不知道的問題

性能問題解析

PHP的性能問題,占整個項(xiàng)目性能問題的比例 不到50%

性能優(yōu)化項(xiàng)目,不要局限于僅優(yōu)化PHP

php語言級的性能優(yōu)化
|
|
|
php周邊問題的性能優(yōu)化
|
|
|
php語言自身分析,優(yōu)化

PHP 壓力測試工具ab簡介

Apache Benchmark(ab)(可以自行下載)
ab是由Apache提供的壓力測試軟件,安裝apache服務(wù)器時會自帶該壓測軟件。

如何使用?

./ab -n1000 -c100 http://www.baidu.com/
-n請求數(shù)
-c并發(fā)數(shù)

url目標(biāo)壓測地址

PHP-壓力測試工具使用演示

主要關(guān)注 每秒并發(fā)盡可能的多

請求耗時盡可能的少

多使用PHP自身能力

優(yōu)化:少寫代碼,多用PHP自身能力

性能問題: 自身代碼冗余較多,可讀性不佳,并且性能低

為甚性能低?

PHP代碼需要編譯解析為底層語言,這一過程每次請求都會處理一遍,開銷大。

好的方法:

多使用PHP內(nèi)置變量\常量\函數(shù)

PHP自身能力性能測試之代碼準(zhǔn)備

php代碼運(yùn)行流程

*.php ---Scanner---> Exprs -----Parser--->Opcodes---Exec--->Output

php內(nèi)置函數(shù)之間的性能測試

優(yōu)化點(diǎn):php內(nèi)置函數(shù)的性能優(yōu)劣

情況描述: php內(nèi)置函數(shù),之間依然存在塊慢差異
好的建議: 多去了解PHP內(nèi)置函數(shù)的時間復(fù)雜度

php內(nèi)置函數(shù)之間的性能測試之代碼測試

1

2

isset($arr[$i]); //平均50ms

array_key_exists($i,$arr);//平均85ms

減少PHP魔法函數(shù)的使用

情況描述: PHP提供的魔法函數(shù),性能不佳

為什么性能低 為了給PHP程序猿省事 PHP語言為你做了很多

好的方法:盡可能規(guī)避使用PHP魔法函數(shù)

PHP 禁用錯誤抑制符

@的實(shí)際邏輯

在代碼開始前 結(jié)束后 增加 Opcode 忽略報錯

1

php -dv|d.active=1 -dv|d.execute=0 at.php

只是想查看并不是真的想執(zhí)行

PHP-合理的使用內(nèi)存和正則表達(dá)式

優(yōu)化點(diǎn):合理使用內(nèi)存

PHP有內(nèi)存回收機(jī)制保底,但也請小心使用內(nèi)存

好的建議

利用unset() 及時釋放不使用的內(nèi)存(注:unset()出現(xiàn)注銷不掉的情況)

盡量少的使用正則表達(dá)式

正則表達(dá)式的回溯開銷較大,

好的建議:

利用字符串處理函數(shù),實(shí)現(xiàn)相同邏輯

PHP-避免在循環(huán)內(nèi)做運(yùn)算

優(yōu)化點(diǎn):避免在循環(huán)內(nèi)做運(yùn)算

情況描述:

循環(huán)內(nèi)的計算式將會被重復(fù)計算

代碼示例:

1

2

3

4

5

6

<?php

$str = "hello world";

for($i=0;$i<strlen($str);$i++)

{

    //do something

}

PHP-減少計算密集型業(yè)務(wù)

PHP不適合密集型運(yùn)算的場景

PHP語言特性決定了PHP不適合做大數(shù)據(jù)量運(yùn)算

PHP適合場景

適合銜接Webserver與后盾服務(wù),UI呈現(xiàn)

PHP-務(wù)必使用帶引號字符串做鍵值

PHP會將沒有引號的鍵值當(dāng)做常量,產(chǎn)生查找常量的開銷

嚴(yán)格使用引號的字符串作為鍵值

PHP周邊問題的分析與闡述

PHP周邊都有什么?

linux運(yùn)行環(huán)境 php 硬盤(文件存儲) 數(shù)據(jù)庫(例如mysql) 緩存 網(wǎng)絡(luò)

php周邊對PHP程序的影響分析

減少文件類的操作

常見PHP場景的開銷次序:

讀寫磁盤 讀寫數(shù)據(jù)庫 讀寫內(nèi)存 讀寫網(wǎng)絡(luò)數(shù)據(jù)

讀寫內(nèi)存 << 讀寫數(shù)據(jù)庫 < 讀寫磁盤 < 讀寫網(wǎng)絡(luò)數(shù)據(jù)

減少PHP發(fā)起網(wǎng)絡(luò)請求

網(wǎng)絡(luò)請求的坑:

1 對方接口的不確定因素
2 網(wǎng)絡(luò)穩(wěn)定性

優(yōu)化網(wǎng)絡(luò)請求

1 設(shè)置超時時間

連接超時 200ms
讀超時 800ms
寫超時 500ms

2 將串行請求并行化

1 curl_multi_*()
2 使用swoole擴(kuò)展

1

2

3

4

5

6

7

8

9

10

curl_multi_*()不是很好,因?yàn)樗前醋铋L的一個返回的時間來定的

curl_multi_add_handle 向curl批處理會話中添加單獨(dú)的curl句柄

curl_multi_close 關(guān)閉一組cURL句柄

curl_multi_exec 運(yùn)行當(dāng)前cURL句柄的子連接

curl_multi_getcontent 如果設(shè)置了CURLOPT_RETURNTRANSFER,則返回獲取的輸出的文本流

curl_multi_info_read 獲取當(dāng)前解析的cURL的相關(guān)傳輸信息

curl_multi_remove_handle 移除curl批量處理句柄資源中的某個句柄資源

curl_multi_select 等待所有cURL批處理中的活動連接

curl_multi_setopt Set an option for the cURL multi handle

curl_multi_strerror - Return string describing error code

推薦swoole擴(kuò)展來做

壓縮PHP輸出的利與弊

壓縮php接口的輸出

如何壓縮?

使用Gzip即可

利 利于我們的數(shù)據(jù)輸出,Client端能更快獲取數(shù)據(jù)
弊 額外的CPU開銷

PHP緩存復(fù)用

什么情況下做輸出內(nèi)容的緩存?

多次請求,內(nèi)容不變情況

Smarty調(diào)優(yōu)和重疊時間窗口思想

Smarty開啟 caching

重疊時間窗口思想

串行:

Process1 Process2 Process3 Process4

重疊時間窗口:

process1
process2
process3
process4

后一個任務(wù)不強(qiáng)依賴前一個任務(wù)的時候,可以使用重疊時間

PHP旁路處理方案

一般普通的:x.php -> Process1 ->process2 ->process3 -> process4->

旁路方案: x.php -> Process1 ->process2(同時) ->Process3 (同時) -->Process4->


標(biāo)簽: PHP 環(huán)境搭建
分享:
評論:
你還沒有登錄,請先