Будни разработчика
14.3K subscribers
1.31K photos
386 videos
8 files
2.21K links
Download Telegram
#статья дня

JSON.stringify в V8 теперь в два раза быстрее!

Пруф: https://v8.dev/blog/json-stringify

JSON.stringify — одна из самых используемых функций в стандартной библиотеке JavaScript. Её используют для превращения объектов в JSON-строку. Надо ли объяснять, зачем? :)

Ну и мы все с вами так любим применять JSON.stringify для сравнения объектов... ведь достаточно сериализовать оба и сравнить строки. До недавнего времени способа лучше просто не существовало.

А еще клонирование! JSON.stringify => JSON.parse и вуаля!

Кто сказал structuredClone?

В V8 провели серьёзную работу и сделали функцию более чем в два раза быстрее!

Основные улучшения такие:

Срезание углов

Обычно при сериализации движок обязан быть очень осторожным: вдруг у объекта есть геттеры, собственный метод toJSON, прокси или ещё какой-то механизм, который может вмешаться в процесс.

Все эти проверки занимают время.

Теперь V8 научился определять случаи, когда объект «чистый», то есть просто содержит данные и не может неожиданно запустить код. В таких ситуациях сериализация идёт по короткому маршруту — без лишних проверок, что даёт значительный прирост скорости.

Убираем рекурсию

Прежняя реализация работала рекурсивно, из-за чего сериализация глубоко вложенных структур была и медленнее, и потенциально опасна переполнением стека. Теперь используется итеративный алгоритм: он быстрее и надёжнее, вне зависимости от глубины объекта.

Для разработчиков это значит, что операции с данными становятся заметно быстрее.

А как же structuredClone?

Конечно, для клонирования объектов нас есть современный инструмент — structuredClone. Его главное отличие в том, что он не превращает данные в строку, а создаёт точную копию структуры. Он умеет работать с типами, которые JSON.stringify просто «теряет»: Map, Set, Date, RegExp, бинарные буферы и даже циклические ссылки.

Для обмена данными снаружи всё равно будет нужен JSON.stringify, для внутренних операций удобнее и надёжнее использовать structuredClone.

Теперь же, благодаря оптимизациям, JSON.stringify остаётся такой же универсальной «рабочей лошадкой», но работает заметно быстрее.

Вообще, там в статье еще много чего! Очень рекомендую.

#v8 #json #stringify #structuredClone
18👍3