Скорость eval и анонимных функций
11 февраля 2012
Всё ещё используете eval
там, где его можно не использовать? Вот ещё одна причина посмотреть в сторону PHP 5.3 и анонимных функций:
$count = 50; $start = microtime(true); $y = 0; for($i = 0; $i < $count; $i++) { eval('++$y;'); } printf("#1, result is %d, done in %f\n", $y, microtime(true) - $start); $start = microtime(true); $y = 0; for($i = 0; $i < $count; $i++) { $f = function() use (&$y) { return ++$y; }; $f(); } printf("#2, result is %d, done in %f\n", $y, microtime(true) - $start);
На выходе получаем:
d:\src>php callback_performance.php #1, result is 50, done in 0.000415 #2, result is 50, done in 0.000270 d:\src>php callback_performance.php #1, result is 50, done in 0.000413 #2, result is 50, done in 0.000261 d:\src>php callback_performance.php #1, result is 50, done in 0.000412 #2, result is 50, done in 0.000273
Кроме того, что анонимные функции удобней, они ещё и быстрее.
Комментарии RSS по email OK
Ждем использования анонимных функций в Yii 2 :) Ведь в 1.1.x eval используется много где, верно?
Optimizer стоит ? 2Kirill, В yii 1.1 можно анонимные функции использовать.
Максим, да. Запусти у себя попробуй.
Денвер, оптимайзера не стоит
Какое отношение анонимные функции имеют к Eval?
Bettrrr, и то и то используют для callback-ов. Например, в гридах Yii.
При всей своей нелюбви к eval'у не могу не позанудствовать. Код в eval() транслируется в момент вызова, а у анонимной функции в момент подключения файла (если без акселераторов). Так что при одиночном вызове кто быстрее неизвестно :)
Я так понимаю если хочеться совместимости с php 5.2 то про анонимные функции можно забыть?
Естественно.
Причем тут тег "CGridView" у поста?
Meccup, это можно использовать в
CGridView
.Сразу скажу что я новичок. Я не понимаю как здесь анонимная функция заменяет eval. eval() вычисляет строку, заданную в code_str, как код PHP. Что у Вас и сделано. А в анонимной функции вы работаете не со строкой. Тогда в чем соль? Поставьте мой мозг на истинный путь)