Как вы думаете, что работает быстрее?
print '1','2';
или
print '1'.'2';
Проведем маленький тест и выясним это раз и навсегда.
Как всегда, прокрутим большой цикл, в котором будем делать элементарную вещь: выводить строку "12". Только строка эта, должна формироваться разными способами. А именно — перечислением аргументов функции print и конкатенацией строк, и передачей результата этой функции.
Вот код:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
my $COUNT = 100000; #Размер цикла
#выведем наши строки в textarea, чтобы не мешались
#и не занимали много места
print "<textarea>";
my $s = times; #засекаем время
my $i=0;
while($i<$COUNT) {
print '1','2';
$i++;
}
print "</textarea>";
print times — $s;
print '<hr/>';
print "<textarea>";
my $s = times;
my $i=0;
while($i<$COUNT) {
print '1'.'2';
$i++;
}
print "</textarea>";
print times — $s;
Вот так. При многократном запуске этого простого скрипта, я получал результаты, которые красноречиво говорили об одном: первый вариант работает значительно медленнее. Вот один из результатов, которые я получил:
0.15 vs 0.09
Конкатенация WINS!
Таким образом, можно рекомендовать выполнять склейку строк "по месту", во время вывода, с помощью конкатенации, а не перечисления.
Попробуем провести небольшой тест на php. Чисто ради интереса.
<?php
$COUNT = 100000;
$i=0;
print "<textarea>";
$s = getmicrotime();
while($i < $COUNT) {
print '1'.'2';
$i++;
}
$e = getmicrotime();
print "</textarea>";
print $e-$s;
#функция, позволяющая точно засекать время
#выполнения скрипта
function getmicrotime() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
?>
Результат угнетает, даже на фоне худшего результата Perl-а. Хотя, конечно, трудно представить себе систему, тормозящую из-за способа вывода, все же, это определенный фетиш.
0.176480054855
Даже самый медленный перловый вариант (с перечислением) отработал быстрее.
UPDATE:
К слову, вы знали, что быстрее будет работать второй вариант в ниже приведенном коде?
$a='1'; $b='2';
print "$a$b";
print $a.$b; #этот код работает быстрее