Pull to refresh

PHP — оптимизация многочисленных array_merge()

Reading time2 min
Views1.7K
Небольшой хинт, о котором я собираюсь сейчас рассказать, я узнал уже довольно давно. Но, поскольку вот только что обнаружил, что именно в этом месте оптимизация помогла сэкономить изрядное количество времени уже в текущем проекте, то решил поделиться с общественностью (а мужики-то не знают, ага).

Буду краток, вот тестовый скрипт и то, что он выводит:

$start = microtime(true);
$res1 = array();
for ($i = 0; $i < 1000; $i++) {
        $res1 = array_merge($res1, array(1, 2, 3));
}
echo "1000 merges: " . ceil((microtime(true) - $start) * 1000) . "ms\n";
 
$start = microtime(true);
$toMerge = array();
for ($i = 0; $i < 1000; $i++) {
        $toMerge[] = array(1, 2, 3); 
}
$res2 = call_user_func_array('array_merge', $toMerge);
echo "call_user_func_array('array_merge',..): " . ceil((microtime(true) - $start) * 1000) . "ms\n";
 
echo "Is it true that the two arrays are equal? It is ";
var_export($res2 === $res1);
echo ".\n";

~ % php ~/tmp/array_merge.php
1000 merges: 980ms
call_user_func_array('array_merge',..): 11ms
Is it true that the two arrays are equal? It is true.


Экономия солидная. Авось кому пригодится.
Tags:
Hubs:
+21
Comments13

Articles