PHP性能分析相關(guān)的函數(shù)與命令有什么以及性能如何,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
十載的西工網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整西工建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“西工網(wǎng)站設(shè)計(jì)”,“西工網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
我們從PHP是解釋性語(yǔ)言、動(dòng)態(tài)語(yǔ)言和底層實(shí)現(xiàn)等三個(gè)方面,探討了PHP性能的問(wèn)題。本文就深入到PHP的微觀層面,我們來(lái)了解PHP在使用和編寫(xiě)代碼過(guò)程中,性能方面,可能需要注意和提升的地方。下面創(chuàng)新互聯(lián)小編來(lái)講解下PHP性能分析相關(guān)的函數(shù)與命令有什么?PHP性能如何?
一、PHP性能分析相關(guān)的函數(shù)與命令有什么
1.1、時(shí)間度量函數(shù)
平時(shí)我們常用time()函數(shù),但是返回的是秒數(shù),對(duì)于某段代碼的內(nèi)部性能分析,到秒的精度是不夠的。于是要用microtime函數(shù)。而microtime函數(shù)可以返回兩種形式,一是字符串的形式,一是浮點(diǎn)數(shù)的形式。不過(guò)需要注意的是,在缺省的情況下,返回的精度只有4位小數(shù)。為了獲得更高的精確度,我們需要配置precision。
如下是microtime的使用結(jié)果。
$start=microtime(true);
echo$start."/n";
$end=microtime(true);
echo$end."/n";
echo($end-$start)."/n";
輸出為:
bash-3.2#phptime.php
1441360050.3286
1441360050.3292
0.00053000450134277
而在代碼前面加上一行:
ini_set("precision",16);
輸出為:
bash-3.2#phptime.php
1441360210.932628
1441360210.932831
0.0002031326293945312
除了microtime內(nèi)部統(tǒng)計(jì)之外,還可以使用getrusage來(lái)取得用戶態(tài)的時(shí)長(zhǎng)。在實(shí)際的操作中,也常用time命令來(lái)計(jì)算整個(gè)程序的運(yùn)行時(shí)長(zhǎng),通過(guò)多次運(yùn)行或者修改代碼后運(yùn)行,得到不同的時(shí)間長(zhǎng)度以得到效率上的區(qū)別。具體用法是:timephptime.php,則在程序運(yùn)行完成之后,不管是否正常結(jié)束退出,都會(huì)有相關(guān)的統(tǒng)計(jì)。
bash-3.2#timephptime.php
1441360373.150756
1441360373.150959
0.0002031326293945312
real0m0.186s
user0m0.072s
sys0m0.077s
因?yàn)楸疚乃懻摰男阅軉?wèn)題,往往分析上百萬(wàn)次調(diào)用之后的差距與趨勢(shì),為了避免代碼中存在一些時(shí)間統(tǒng)計(jì)代碼,后面我們使用time命令居多。
1.2、內(nèi)存使用相關(guān)函數(shù)
分析內(nèi)存使用的函數(shù)有兩個(gè):memory_get_usage、memory_get_peak_usage,前者可以獲得程序在調(diào)用的時(shí)間點(diǎn),即當(dāng)前所使用的內(nèi)存,后者可以獲得到目前為止高峰時(shí)期所使用的內(nèi)存。所使用的內(nèi)存以字節(jié)為單位。
$base_memory=memory_get_usage();
echo"Hello,world!/n";
$end_memory=memory_get_usage();
$peak_memory=memory_get_peak_usage();
echo$base_memory,"/t",$end_memory,"/t",($end_memory-$base_memory),"/t",$peak_memory,"/n";
輸出如下:
bash-3.2#phphelloworld.php
Hello,world!
可以看到,即使程序中間只輸出了一句話,再加上變量存儲(chǔ),也消耗了168個(gè)字節(jié)的內(nèi)存。
對(duì)于同一程序,不同PHP版本對(duì)內(nèi)存的使用并不相同,甚至還差別很大。
$baseMemory=memory_get_usage();
classUser
{
private$uid;
function__construct($uid)
{
$this->uid=$uid;
}
}
for($i=0;$i<100000;$i++) 10000="==0)" obj="newUser($i);" php52memory.php="" 0:93784bytes="" 10000:93784bytes="" 80000:93784bytes="" 90000:93784bytes="" peak:262144bytes="" phpmemory.php="" 0:634992bytes="" 10000:634992bytes="" 80000:634992bytes="" 90000:634992bytes="" peak:786432bytes="" php56memory.php="" 0:224944bytes="" 10000:224920bytes="" 80000:224920bytes="" 90000:224920bytes="" php7memory.php="" 0:353912bytes="" 10000:353912bytes="" 80000:353912bytes="" 90000:353912bytes="" peak:2097152bytes="" obj-="">self=$obj;
代碼如下:
$baseMemory=memory_get_usage();
classUser
{
private$uid;
function__construct($uid)
{
$this->uid=$uid;
}
}
for($i=0;$i<100000;$i++) obj="newUser($i);" obj-="">self=$obj;
if($i%5000===0)
{
echosprintf('%6d:',$i),memory_get_usage(),"bytes/n";
}
}
echo"peak:",memory_get_peak_usage(true),"bytes/n";
這時(shí)候再來(lái)看看內(nèi)存的使用情況,中間表格主體部分為內(nèi)存使用量,單位為字節(jié)。
二、PHP性能如何
下面我們根據(jù)小程序來(lái)驗(yàn)證一些常見(jiàn)的性能差別。
2.1、使用echo還是print
在有的建議規(guī)則中,會(huì)建議使用echo,而不使用print。說(shuō)print是函數(shù),而echo是語(yǔ)法結(jié)構(gòu)。實(shí)際上并不是如此,print也是語(yǔ)法結(jié)構(gòu),類(lèi)似的語(yǔ)法結(jié)構(gòu),還有多個(gè),比如list、isset、require等。不過(guò)對(duì)于PHP7以下PHP版本而言,兩者確實(shí)有性能上的差別。如下兩份代碼:
for($i=0;$i<1000000;$i++) { echo("Hello,World!"); } for($i=0;$i<1000000;$i++) timephpecho1.php="">/dev/null
real0m0.233s
user0m0.153s
sys0m0.080s
[root@localhostphpperf]#timephpecho1.php>/dev/null
real0m0.234s
user0m0.159s
sys0m0.073s
[root@localhostphpperf]#timephpecho.php>/dev/null
real0m0.203s
user0m0.130s
sys0m0.072s
[root@localhostphpperf]#timephpecho.php>/dev/null
real0m0.203s
user0m0.128s
sys0m0.075s
在PHP5.3版中效率差距10%以上。而在PHP5.4以上的版本中,區(qū)別不大,如下是PHP7中的運(yùn)行效率。
[root@localhostphpperf]#timephp7echo.php>/dev/null
real0m0.151s
user0m0.088s
sys0m0.062s
[root@localhostphpperf]#timephp7echo.php>/dev/null
real0m0.145s
user0m0.084s
sys0m0.061s
[root@localhostphpperf]#timephp7echo1.php>/dev/null
real0m0.140s
user0m0.075s
sys0m0.064s
[root@localhostphpperf]#timephp7echo1.php>/dev/null
real0m0.146s
user0m0.077s
sys0m0.069s
正如瀏覽器前端的一些優(yōu)化準(zhǔn)則一樣,沒(méi)有啥特別通用的原則,往往根據(jù)不同的情況和版本,規(guī)則也會(huì)存在不同。
2.2、require還是require_once?
在一些常規(guī)的優(yōu)化規(guī)則中,會(huì)提到,建議使用require_once而不是require,現(xiàn)由是require_once會(huì)去檢測(cè)是否重復(fù),而require則不需要重復(fù)檢測(cè)。
在大量不同文件的包含中,require_once略慢于require。但是require_once的檢測(cè)是一項(xiàng)內(nèi)存中的行為,也就是說(shuō)即使有數(shù)個(gè)需要加載的文件,檢測(cè)也只是內(nèi)存中的比較。而require的每次重新加載,都會(huì)從文件系統(tǒng)中去讀取分析。因而require_once會(huì)比require更佳。咱們也使用一個(gè)例子來(lái)看一下。
str.php
global$str;
$str="Chinahasalargepopulation";
require.php
for($i=0;$i<100000;$i++){ require"str.php"; } require_once.php for($i=0;$i<100000;$i++){ require_once"str.php"; } 上面的例子,在PHP7中,require_once.php的運(yùn)行速度是require.php的30倍!在其他版本也能得到大致相同的結(jié)果。 [root@localhostphpperf]#timephp7require.php real0m1.712s user0m1.126s sys0m0.569s [root@localhostphpperf]#timephp7require.php real0m1.640s user0m1.113s sys0m0.515s [root@localhostphpperf]#timephp7require_once.php real0m0.066s user0m0.063s sys0m0.003s [root@localhostphpperf]#timephp7require_once.php real0m0.057s user0m0.052s sys0m0.004s 從上可以看到,假如存在大量的重復(fù)加載的話,require_once明顯優(yōu)于require,因?yàn)橹貜?fù)的文件不再有IO操作。即使不是大量重復(fù)的加載,也建議使用require_once,因?yàn)樵谝粋€(gè)程序中,一般不會(huì)存在數(shù)以千百計(jì)的文件包含,100次內(nèi)存比較的速度差距,一個(gè)文件包含就相當(dāng)了。
關(guān)于PHP性能分析相關(guān)的函數(shù)與命令有什么以及性能如何問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
網(wǎng)站名稱:PHP性能分析相關(guān)的函數(shù)與命令有什么以及性能如何
URL地址:http://www.rwnh.cn/article44/jgjiee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、域名注冊(cè)、App開(kāi)發(fā)、動(dòng)態(tài)網(wǎng)站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)