У меня было предчувствие, что создание массива, а затем его внедрение может быть самым быстрым способом Я был неправ! Однако выполнение $ str = $ str + $ bla ДЕЙСТВИТЕЛЬНО медленно на порядок! Это имеет значение, только если вы делаете кучу конкатенаций. Вот мой тестовый код:
<?php
function doit($n) {
$str2concat = 'Esta es una prueba. ¿Cuál manera es más rápida?';
$str = '';
// option 1
$start = microtime(true);
for( $i=0; $i <= $n; $i++ ) {
$str .= $str2concat;
}
$end = microtime(true);
echo " Concat: $n Iterations, duration:" . ($end-$start) . "\n";
// option 2
$str = '';
$start = microtime(true);
for( $i=0; $i <= $n; $i++ ) {
$str = $str . $str2concat;
}
$end = microtime(true);
echo "Concat2: $n Iterations, duration:" . ($end-$start) . "\n";
// option 3
$str = [];
$start = microtime(true);
for( $i=0; $i <= $n; $i++ ) {
$str[] = $str2concat;
}
$str = implode( $str );
$end = microtime(true);
echo "Implode: $n Iterations, duration:" . ($end-$start) . "\n\n";
}
doit( 5000 );
doit( 10000 );
doit( 100000 );
Вот результаты, которые я получил:
Concat: 5000 Iterations, duration:0.0031819343566895
Concat2: 5000 Iterations, duration:0.41280508041382
Implode: 5000 Iterations, duration:0.0094010829925537
Concat: 10000 Iterations, duration:0.0071289539337158
Concat2: 10000 Iterations, duration:1.776113986969
Implode: 10000 Iterations, duration:0.013410091400146
Concat: 100000 Iterations, duration:0.06755805015564
Concat2: 100000 Iterations, duration:264.86760401726
Implode: 100000 Iterations, duration:0.12707781791687