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