Как стать автором
Обновить

Производительность кодирования и декодирования serialize и json — часть вторая

Время на прочтение2 мин
Количество просмотров3.3K
Первая часть моей публикации получила ряд конструктивных комментариев, которые дали толчок разобраться в проблеме более детально.



Комментарии к записи подсказали, а мои дальнейшие эксперименты доказали, что скорость работы рассматриваемых мною функций очень сильно варьируется в зависимости как от структуры данных, которые им передали, так и от типа данных.

Исходных код теста, которым производились изменения немного переработан относительно первой части, но основа осталась прежней: http://pastie.org/242453

Итак, рассмотрим самое простое — какое влияние оказывает на скорость работы возрастающая вложенность данных:



Каждый элемент массива данных представлял собой:

В первом случае:
array ('1234667890', '1234667890', '1234667890', '1234667890', '1234667890');
Во втором случае:
array (array ('1234667890'), array ('1234667890'), array ('1234667890'), array ('1234667890'), array ('1234667890'));
В третьем случае:
array (array (array ('1234667890')),array (array ('1234667890')),array (array ('1234667890')),array (array ('1234667890')),array (array ('1234667890')));


Вывод 1. С ростом вложенности упаковака json становится в разы быстрее serialize, однако обратные операции выполняются по скорости почти одинаково.

Далее — рассмотрим целые и дробные числа (первые восемь групп столбцов на графике, метки «int» и «f»).


В качестве данных в массиве выступали случайные числа от 0 до 100 (1), от 1000 до 10 000 (2), от 100 000 до 1 000 000 (3) и от 1 000 000 до 10 000 000 (4). Для первых четырёх колонок бралось целое число, для второй четвёрки — дробное.

Вывод 2. На целых числах json чуть быстрее при упаковке, и чуть медленнее при распаковке.

Вывод 3. На дробных числах json в разы быстрее при упаковке, и чуть медленнее при распаковке.

Самое интересное — последние восемь групп столбцов. Там в качестве элементов массива данных выступают случайные последовательности из 5, 20, 50 и 100 латинских символов (l) и кириллицы в UTF-8 (k).

Вывод 4. На длинных латинских строках json в разы медленнее.

Вывод 5. На символах UTF-8 json в разы быстрее.

В эпилоге хочется сказать, что все эти исследования несли больше теоретическую, нежели практическую ценность — ибо в каждом конкретном случае тип данных будет смешанным и вам понадобятся тесты именно под ваши данные. Плюс — речь идёт действительно о таких микроскопических выигрышах, пользу от которых можно увидеть разве что при ОЧЕНЬ больших объемах данных.

PS: Первая данного повествования была опубликована на моём личном блоге, после чего буквально за несколько минут набрала достаточно баллов, чтобы попать в блог PHP. После чего совершенно непостижимым для меня образом попала на первую страницу, что меня несказанно порадовало =)
Теги:
Хабы:
Всего голосов 28: ↑23 и ↓5+18
Комментарии21

Публикации

Истории

Работа

PHP программист
148 вакансий

Ближайшие события