国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

使用PHP原生函數就一定比自定義函數快嗎?

2024-09-04 11:49:14
字體:
來源:轉載
供稿:網友

之前聽到過的一個前輩關于php性能優化的說法——PHP為我們提供了那么多的原聲函數,我們盡量用原生函數解決問題,但是有時在想,php原生態的函數就一定快嗎?現在看到一個國外的人寫的函數,就來測試一下.

今天在閱讀kohana源碼中的Arr類的時候發現了這樣一個函數,代碼如下:

  1. /** 
  2.  * Fill an array with a range of numbers. 
  3.  * 
  4.  *     // Fill an array with values 5, 10, 15, 20 
  5.  *     $values = Arr::range(5, 20); 
  6.  * 
  7.  * @param   integer $step   stepping 
  8.  * @param   integer $max    ending number 
  9.  * @return  array 
  10.  */ 
  11. public static function range($step = 10, $max = 100) 
  12.     if ($step < 1) 
  13.         return array(); 
  14.  
  15.     $array = array(); 
  16.     for ($i = $step$i <= $max$i += $step
  17.     { 
  18.         $array[$i] = $i
  19.     } 
  20.  
  21.     return $array

看到這里的時候,我發現php的原聲函數也是可以實現這個功能的,忽然想到之前聽到過的一個前輩關于php性能優化的說法——PHP為我們提供了那么多的原聲函數,我們盡量用原生函數解決問題,于是我就做了個測試,看看php原生函數性能究竟比自己寫的快多少,要測試的函數有原生函數range()和上面的函數_range(),這里加下劃線開始是因為重寫原聲函數range()會報錯“Fatal error:Cannot redeclare range() in”.

代碼如下:

  1. function _range($step = 10, $max = 100) 
  2.     if ($step < 1) 
  3.         return array(); 
  4.     $array = array(); 
  5.     for ($i = $step$i <= $max$i += $step
  6.     { 
  7.         $array[$i] = $i
  8.     } 
  9.     return $array
  10. //開源軟件:Vevb.com 
  11. $time['begin'] = microtime(true); 
  12. $tmp = range(0,1000000,3); 
  13. //$tmp = _range(0,1000000,3); 
  14. $time['end']   = microtime(true); 
  15.  
  16. echo $time['end'] - $time['begin'].'s'."r"
  17. echo (memory_get_peak_usage()/1024/1024)."M"

分別用原生函數和自定義函數進行測試,在產生0~1000000之間所有的3的倍數時,結果出乎我的意料.

為了結果比較準確,我在做個圖表統計.

  1. 統計次數     原生函數range()     自定義函數_range() 
  2. (0,1000000,3)     5.155E-3s     27.5530M     1.907E-5s     0.1241M 
  3. (0,1000000,2)     7.479E-3s     40.2688M     1.811E-5s     0.1241M 
  4. (0,1000,1)     8.16E-5s     0.1620M     2.649E-5s     0.1241M 

從表中可以看出產生隨機數時自定義函數比原生函數要節省內存和時間,而且原生函數在生成大量隨機數時特別耗內存,消耗時間也特別多,而自定義函數在這方面則表現得好,產生的內存和消耗的時間基本穩定,看來前面那位前輩說的不一定完全正確哦,但是這里要注意我們這里的自定義函數只能生成數字,而原生的range還可以產生字母的,但是我想這自定義函數添加個字母應該也不會太難~

看來kohana官方對range這個函數很是了解,對php內核中該函數的復雜度也很了解,所以這個小優化才可以做這么好,太厲害了.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赫章县| 滦平县| 大邑县| 长丰县| 腾冲县| 盘锦市| 苍梧县| 西乌珠穆沁旗| 彭阳县| 澄江县| 綦江县| 浦江县| 庐江县| 合山市| 巫溪县| 桐乡市| 阿拉善右旗| 噶尔县| 特克斯县| 运城市| 礼泉县| 昌图县| 密山市| 盘锦市| 岑巩县| 当涂县| 万盛区| 宁河县| 都昌县| 西吉县| 台东市| 泾阳县| 河池市| 梁河县| 兴安县| 黑龙江省| 宽城| 海城市| 大余县| 莆田市| 大庆市|