echo быстрее, чем print.
Решил провести собственные исследования:
use Benchmark qw(:all);
# подсветка Ruby подходит для Perl =)
our $text = 'A' x 4000;
sub echotest {
my $result = qx!php -r "\$i=0; while(\$i<10000){echo $text; \$i++;}"!;
}
sub printtest {
my $result = qx!php -r "\$i=0; while(\$i<10000){print $text; \$i++;}"!;
}
cmpthese(1, {
testecho => sub { echotest($text) },
testprint => sub { printtest($text) },
});
Перед тестом я выполнил в командной строке:
php -r "echo 1; print 1;"
Чтобы php слегка "вгрузился" в память.
Первый запуск:
Rate testecho testprint
testecho 1.36/s – -4%
testprint 1.42/s 4% –
print выйграл у echo, обогнав его на 4%
Второй запуск:
Rate testecho testprint
testecho 1.56/s – -2%
testprint 1.60/s 2% –
print выйграл у echo, обогнав его на 2%
Третий запуск:
Rate testecho testprint
testecho 1.42/s – -0%
testprint 1.42/s 0% –
ничья
Четверый запуск:
Rate testecho testprint
testecho 1.42/s – -0%
testprint 1.42/s 0% –
ничья
Пятый запуск:
Rate testprint testecho
testprint 1.33/s – -6%
testecho 1.42/s 7% –
echo выйграл у print, обогнав его на 7%
Шестой запуск:
Rate testprint testecho
testprint 1.42/s – -24%
testecho 1.88/s 32% –
echo выйграл у print, обогнав его на 32%
Седьмой запуск:
Rate testecho testprint
testecho 1.60/s – -5%
testprint 1.68/s 5% –
print выйграл у echo, обогнав его на 5%
Восьмой запуск:
Rate testecho testprint
testecho 1.31/s – -14%
testprint 1.52/s 17% –
print выйграл у echo, обогнав его на 17%
Девятый запуск:
Rate testecho testprint
testecho 1.60/s – -0%
testprint 1.60/s 0% –
ничья
Десятый запуск:
Rate testprint testecho
testprint 1.49/s – -7%
testecho 1.60/s 8% –
echo выйграл у print, обогнав его на 8%
Итого было 10 запусков, print выйграл 4 раза, echo выйграл 3 раза, ничья была 3 раза.
Если заглянуть в исходники:
void echo ( string $arg1 [, string $… ] )
int print ( string $arg )
Собственно что делает echo - он суммирует все аргументы и выполняет print. =\
Как видно - echo и print держатся примерно на одном уровне по скорости выполнения и особой разницы в их использовании нету.
Кто может доказать обратное?