2011-12-30 73 views
11

我開始在php中使用函數式編程範例,並想知道性能的影響是什麼。一些谷歌搜索似乎只是說有一些。具體而言,我想知道:PHP中的匿名函數性能

  • 是否有實際的性能影響還是一個都市傳說?
  • 什麼是性能影響(希望某人已經完成了基準測試)?
  • 是什麼導致了這種影響(如果存在)?
  • 是固定成本還是每次執行?你們

任何資源都將不勝感激:)

在此先感謝

+0

這個答案是「php匿名函數性能」的頂部Google結果https://hackernoon.com/the-decline-of-stack-overflow-7cb69faa575d – jchook 2016-10-13 02:39:00

回答

17

我做了一些測試與array_map(),以調用它:

  1. 的名稱函數(array_map('test', $myArray);
  2. 包含閉包的變量(array_map($test, $myArray);
  3. 的封蓋(array_map(function{}(), $myArray);

在所有三種情況下,功能是空的(function test(){}

的用於與1.000.000項目($myArray = range(1,1000000);

Function: 0.693s 
Variable:0.703s 
Closure: 0.694s 

對於陣列結果10.000.000項的數組,結果如下:

Function: 8.913s 
Variable: 8.169s 
Closure: 8.117s 

所以在任何情況下,我們都沒有太多的開銷,如果有的話。

另請參閱http://fabien.potencier.org/article/17/on-php-5-3-lambda-functions-and-closures的第4條評論 得出相同的結論。在該評論中,您還看到create_function()明顯變慢。

+0

好的答案。還要注意的是,create_function必須總是在運行時解析php,所以如果使用操作碼高速緩存,您將失去大量時間。 – symcbean 2011-12-30 12:06:11

+0

但是完全無功能的等價'foreach($ myArray as $ foo){}'呢? :) – deceze 2011-12-31 01:10:53

+1

剛做了10.000.000測試:4.780s 我預計它會變得更快* *,但這是一個*很多*。 (雖然其他版本的幾次快速重新運行表明它們現在也更快,但是在亞秒級的球場中。) 爲了公平起見,我做了foreach($ a AS $ i) {test($ i);}',因爲'與'array_map()調用'相同'。 – 2012-01-03 14:50:57