我開始在php中使用函數式編程範例,並想知道性能的影響是什麼。一些谷歌搜索似乎只是說有一些。具體而言,我想知道:PHP中的匿名函數性能
- 是否有實際的性能影響還是一個都市傳說?
- 什麼是性能影響(希望某人已經完成了基準測試)?
- 是什麼導致了這種影響(如果存在)?
- 是固定成本還是每次執行?你們
任何資源都將不勝感激:)
在此先感謝
我開始在php中使用函數式編程範例,並想知道性能的影響是什麼。一些谷歌搜索似乎只是說有一些。具體而言,我想知道:PHP中的匿名函數性能
任何資源都將不勝感激:)
在此先感謝
我做了一些測試與array_map(),以調用它:
array_map('test', $myArray);
)array_map($test, $myArray);
)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()
明顯變慢。
好的答案。還要注意的是,create_function必須總是在運行時解析php,所以如果使用操作碼高速緩存,您將失去大量時間。 – symcbean 2011-12-30 12:06:11
但是完全無功能的等價'foreach($ myArray as $ foo){}'呢? :) – deceze 2011-12-31 01:10:53
剛做了10.000.000測試:4.780s 我預計它會變得更快* *,但這是一個*很多*。 (雖然其他版本的幾次快速重新運行表明它們現在也更快,但是在亞秒級的球場中。) 爲了公平起見,我做了foreach($ a AS $ i) {test($ i);}',因爲'與'array_map()調用'相同'。 – 2012-01-03 14:50:57
這個答案是「php匿名函數性能」的頂部Google結果https://hackernoon.com/the-decline-of-stack-overflow-7cb69faa575d – jchook 2016-10-13 02:39:00