Пишу, по большей части, про историю, свою жизнь и немного про программирование.

JSOND

JSOND — это ещё один «дешёвый» способ увеличить производительность вашего проекта на ПХП, наряду с igbinary. Исходный код есть на PECL, для всех систем существуют пакеты. Насколько я знаю, есть планы по замене стандартного расширения JSON в ПХП7 на JSOND.

Для интереса погонял стандартный тест пакета на одной из наших машин (мы там вчера перешли на ПХП 5.5 наконец-то, стоит последняя версия), вот результаты (меньше — лучше):

STR: {"i": 23, "array": [1, null, false, true, ["aha", "baba", 23, {"test": 23}]]}
JSON: time for 100000 iterations: 1.096384
JSOND: time for 100000 iterations: 0.353658
STR: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
JSON: time for 100000 iterations: 0.700904
JSOND: time for 100000 iterations: 0.202519
STR: {"a": 23.2234232}
JSON: time for 100000 iterations: 0.398129
JSOND: time for 100000 iterations: 0.083977
STR: сериализуется очень длинная строка
JSON: time for 100000 iterations: 0.392990
JSOND: time for 100000 iterations: 0.341663
STR: сериализуется переменная $_SERVER
JSON: time for 100000 iterations: 4.983888
JSOND: time for 100000 iterations: 2.321528

Что приятно, АПИ полностью совместимо, так что проблем нет никаких — в вызовах надо просто добавить одну букву. Есть так же несложный способ самостоятельной замены стандартного JSON на этот модуль в интерпретаторе.

13 комментариев
Читатель rss 2014

Если обижу, сразу извиняюсь, так как далек от php.
А за счет чего увеличена производительность?
Может, стоит попробовать тест с генерацией более-менее случайных(но однотиповых и одной структуры, читайте, равное время на генерацию) данных, будет честнее?

Евгений Степанищев (bolknote.ru) 2014

Комментарий для Читатель rss:

А чем вы меня обидите? Код не мой. Не знаю за счёт чего, видимо за счёт более эффективно написаного кода. Разве это редкость?

Может, стоит попробовать тест с генерацией более-менее случайных(но однотиповых и одной структуры, читайте, равное время на генерацию) данных, будет честнее?

Зачем? Вы думаете внутри есть какой-то кеш? Авторы вряд ли писали его просто для того, чтобы обмануть сообщество.

Вадим 2014

Интересно получается. Исходя из практических тестов получается (и это вроде неоднократно описывалось), что для сравнительно больших константных структур выгоднее использовать json сериализацию. Такой подход обгоняет по скорости родную для пхп сериализацию и, что гораздо важнее, быстрее чем нативный пхп код. А теперь получается, что с этим расширением вообще все станет шустро и быстро.

Евгений Степанищев (bolknote.ru) 2014

Комментарий для Вадим:

Встроенную сериализацию лучше заменить на igbinary, если это возможно. Будет и быстро, и компактно.

silent 2014

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

Евгений Степанищев (bolknote.ru) 2014

Комментарий для silent:

На самом деле, это не так. У нас на проекте три машины в 24 процессора, на которых крутятся php-fpm (и ничего больше нет, всё остальное барахло на других машина), выжирают эти процессоры подчистую в часы пик.

silent 2014

Комментарий для Евгения Степанищева:

У нас гораздо крупнее проект и на графиках ничего не поменялось, увы

Евгений Степанищев (bolknote.ru) 2014

Комментарий для silent:

Как вы определили, что ваш проект гораздо крупнее?

Евгений Степанищев (bolknote.ru) 2014

Комментарий для silent:

Сейчас у нас в проекте задействовано 26 машин.

silent 2014

Комментарий для Евгения Степанищева:

Avito.ru :)

Евгений Степанищев (bolknote.ru) 2014

Комментарий для silent:

Я что-то не верю, что сложность проекта avito.ru хоть как-то близка к сложности документооборота. Или я заблуждаюсь? Да и наша 51 тысяча пользователей в крупнейшей инсталляции, которые топчутся по документообороту постоянно, не переставая, вполне могут дать сравнимую нагрузку с вашим 15 миллионами, которые иногда заходят проверить анкету или объявления.

silent 2014

Комментарий для Евгения Степанищева:

Ты недооцениваешь нас, но в любом случае извини, если задел, я не хотел обидеть.
Мериться письками глупо, я просто поделился своими результатами.

Евгений Степанищев (bolknote.ru) 2014

Комментарий для silent:

Нет, я правда не знаю, такие вещи всегда интересны, если можно что-то рассказать, я бы почитал :)