Neden PHP işlevi çok * pahalı * çağrıları vardır?

0 Cevap php

PHP bir işlev çağrısı pahalıdır. İşte bunu test etmek için küçük bir ölçüttür:

// create test string
$string = str_repeat('a', 1000);
$maxChars = 500;

// with function call
$start = microtime(true);
for ($i = 0; $i < RUNS; ++$i) {
    strlen($string) <= $maxChars;
}
echo 'with function call: ', microtime(true) - $start, "\n";

// without function call
$start = microtime(true);
for ($i = 0; $i < RUNS; ++$i) {
    !isset($string[$maxChars]);
}
echo 'without function call: ', microtime(true) - $start;

Bu (isset bir fonksiyon değildir) bir işlevi kullanmadan Önce (strlen) ve daha sonra bir işlevi kullanarak, işlevsel olarak aynı kodu test.

Ben şu çıktıyı alırsınız:

with function call:    4.5108239650726
without function call: 0.84017300605774

Gördüğünüz gibi bir işlev çağrısı kullanarak uygulanması, herhangi bir işlevini çağırarak değil uygulamadan daha fazla beş (5.38) kat daha yavaştır.

Ben bir işlev çağrısı bu kadar pahalı neden bilmek istiyorum. Ana darboğaz nedir? Bu karma tablo arama mı? Ya da ne kadar yavaş?


Ben bu soruyu revisited, ve (sadece engelli profil değil) tamamen devre dışı xdebug ile yine kriter koşmaya karar verdik. Bu benim testleri aldım 10000000 pistlere sahip, bu kez oldukça kıvrık olduğunu gösterdi:

with function call:    3.152988910675
without function call: 1.4107749462128

Burada bir işlev çağrısı, sadece yaklaşık olarak iki kat yavaş (2.23), yani fark çok küçük gereğidir.


Ben sadece bir PHP 5.4.0 anlık Yukarıdaki kodu test edilmiş ve şu sonuçlar var:

with function call:    2.3795559406281
without function call: 0.90840601921082

İşte fark (2.62) yine biraz daha var. (Ama üzerinde taraftan her iki yöntem yürütme zamanı oldukça önemli ölçüde düştü).

0 Cevap