Итак, продолжение серии бесполезных исследований. В этот раз мы сравниваем несколько разные по сути функции, которые, тем не менее, часто используются с одной целью. В этом исследовании мы хотим представить массив значений (не объектов 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