2011-12-30 19 views
11

私はPHPで関数型プログラミングのパラダイムを使用し始めており、パフォーマンスの影響が何であるか不思議でした。いくつかのグーグルがちょうどいくつかあると言うようです。具体的には、私は知りたいです:PHPの匿名関数のパフォーマンス

  • 実際にパフォーマンスに影響があるのか​​、それとも都市の伝説ですか?
  • パフォーマンスにどのような影響がありますか(うまくいけばベンチマークを行った誰か)?
  • この影響の原因は何か(存在する場合)?
  • 固定費か実行ごとですか?

どれリソース君たちをいただければ幸いしている:)

おかげで私はarray_mapを()でいくつかのテストをした

+0

この回答は、「php anonymous function performance」のGoogleのトップ検索結果です。https://hackernoon.com/the-decline-of-stack-overflow-7cb69faa575d – jchook

答えて

17

事前に、とそれを呼び出す:

  1. の名前関数(array_map('test', $myArray);
  2. クロージャを含む変数
  3. クロージャ(array_map(function{}(), $myArray);)3つ全ての場合において

に、関数は空であった(function test(){}

1.000.000アイテム($myArray = range(1,1000000);)ANについて

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

の配列についての結果10.000.000個のアイテムの配列の場合、結果は次のようになります。

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

だからどちらの場合でも、もしあれば、私たちは多くのオーバーヘッドを持っています。

の4番目のコメントも同じ結論になります。そのコメントでは、create_function()がかなり遅いこともわかります。

+0

Nice answer。また、create_functionは実行時にPHPを解析しなければならないので、opcodeキャッシングを使用すると大きな時間を失うことに注意してください。 – symcbean

+0

しかし、全く機能しない同等の 'foreach($ myArray as $ foo){}'はどうでしょうか? :) – deceze

+1

ちょうど10.000.000のテストをしました:4.780s 私はそれが*ビット*高速であることを期待しましたが、これは*ロット*です。 (他のバージョンの数回の再実行でも、少し速いですが、小秒の球場でもお勧めします) 私は 'foreach($ a AS $ i) {test($ i);} '、' array_map()呼び出し 'と同じことをします。 –