欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

PHP性能分析相關的函數(shù)與命令有什么以及性能如何

PHP性能分析相關的函數(shù)與命令有什么以及性能如何,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

十載的西工網(wǎng)站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整西工建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“西工網(wǎng)站設計”,“西工網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

我們從PHP是解釋性語言、動態(tài)語言和底層實現(xiàn)等三個方面,探討了PHP性能的問題。本文就深入到PHP的微觀層面,我們來了解PHP在使用和編寫代碼過程中,性能方面,可能需要注意和提升的地方。下面創(chuàng)新互聯(lián)小編來講解下PHP性能分析相關的函數(shù)與命令有什么?PHP性能如何?

一、PHP性能分析相關的函數(shù)與命令有什么

1.1、時間度量函數(shù)

平時我們常用time()函數(shù),但是返回的是秒數(shù),對于某段代碼的內部性能分析,到秒的精度是不夠的。于是要用microtime函數(shù)。而microtime函數(shù)可以返回兩種形式,一是字符串的形式,一是浮點數(shù)的形式。不過需要注意的是,在缺省的情況下,返回的精度只有4位小數(shù)。為了獲得更高的精確度,我們需要配置precision。

如下是microtime的使用結果。

$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內部統(tǒng)計之外,還可以使用getrusage來取得用戶態(tài)的時長。在實際的操作中,也常用time命令來計算整個程序的運行時長,通過多次運行或者修改代碼后運行,得到不同的時間長度以得到效率上的區(qū)別。具體用法是:timephptime.php,則在程序運行完成之后,不管是否正常結束退出,都會有相關的統(tǒng)計。

bash-3.2#timephptime.php

1441360373.150756

1441360373.150959

0.0002031326293945312

real0m0.186s

user0m0.072s

sys0m0.077s

因為本文所討論的性能問題,往往分析上百萬次調用之后的差距與趨勢,為了避免代碼中存在一些時間統(tǒng)計代碼,后面我們使用time命令居多。

1.2、內存使用相關函數(shù)

分析內存使用的函數(shù)有兩個:memory_get_usage、memory_get_peak_usage,前者可以獲得程序在調用的時間點,即當前所使用的內存,后者可以獲得到目前為止高峰時期所使用的內存。所使用的內存以字節(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!

可以看到,即使程序中間只輸出了一句話,再加上變量存儲,也消耗了168個字節(jié)的內存。

對于同一程序,不同PHP版本對內存的使用并不相同,甚至還差別很大。

$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";

這時候再來看看內存的使用情況,中間表格主體部分為內存使用量,單位為字節(jié)。

二、PHP性能如何

下面我們根據(jù)小程序來驗證一些常見的性能差別。

2.1、使用echo還是print

在有的建議規(guī)則中,會建議使用echo,而不使用print。說print是函數(shù),而echo是語法結構。實際上并不是如此,print也是語法結構,類似的語法結構,還有多個,比如list、isset、require等。不過對于PHP7以下PHP版本而言,兩者確實有性能上的差別。如下兩份代碼:

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中的運行效率。

[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)化準則一樣,沒有啥特別通用的原則,往往根據(jù)不同的情況和版本,規(guī)則也會存在不同。

2.2、require還是require_once?

在一些常規(guī)的優(yōu)化規(guī)則中,會提到,建議使用require_once而不是require,現(xiàn)由是require_once會去檢測是否重復,而require則不需要重復檢測。

在大量不同文件的包含中,require_once略慢于require。但是require_once的檢測是一項內存中的行為,也就是說即使有數(shù)個需要加載的文件,檢測也只是內存中的比較。而require的每次重新加載,都會從文件系統(tǒng)中去讀取分析。因而require_once會比require更佳。咱們也使用一個例子來看一下。

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的運行速度是require.php的30倍!在其他版本也能得到大致相同的結果。   [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   從上可以看到,假如存在大量的重復加載的話,require_once明顯優(yōu)于require,因為重復的文件不再有IO操作。即使不是大量重復的加載,也建議使用require_once,因為在一個程序中,一般不會存在數(shù)以千百計的文件包含,100次內存比較的速度差距,一個文件包含就相當了。

關于PHP性能分析相關的函數(shù)與命令有什么以及性能如何問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。

網(wǎng)站名稱:PHP性能分析相關的函數(shù)與命令有什么以及性能如何
URL地址:http://chinadenli.net/article44/jgjiee.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設域名注冊App開發(fā)動態(tài)網(wǎng)站營銷型網(wǎng)站建設微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站