Итак, продолжение серии бесполезных исследований. В этот раз мы сравниваем несколько разные по сути функции, которые, тем не менее, часто используются с одной целью. В этом исследовании мы хотим представить массив значений (не объектов PHP) в качестве строки. Это исследование инициировал на работе Фархад Вильданов. К сожалению, ему это не помогло, так как он имел дело как раз с массивом объектов PHP.
Что нам скажет serialize()?
<?php
ini_set('memory_limit', '4G');
$initialArray = array_fill(0, 1000000, ['test value']);
$start = microtime(true);
$serializedA = serialize($initialArray);
$end = microtime(true);
echo 'serialize() string length: ' . strlen($serializedA) . PHP_EOL;
echo 'serialize() time: ' . ($end - $start) . PHP_EOL;
echo 'serialize() memory: ' . memory_get_peak_usage(true) . PHP_EOL;
Вывод:
serialize() string length: 36888902 serialize() time: 0.43295097351074 serialize() memory: 327155712
Так выглядит тест для json_encode():
<?php
ini_set('memory_limit', '4G');
$initialArray = array_fill(0, 1000000, ['test value']);
$start = microtime(true);
$json = json_encode($initialArray);
$end = microtime(true);
echo 'json_encode() string length: ' . strlen($json) . PHP_EOL;
echo 'json_encode() time: ' . ($end - $start) . PHP_EOL;
echo 'json_encode() memory: ' . memory_get_peak_usage(true) . PHP_EOL;
Вывод:
json_encode() string length: 15000001 json_encode() time: 0.19829201698303 json_encode() memory: 127401984