#статья дня
JSON.stringify в V8 теперь в два раза быстрее!
Пруф: https://v8.dev/blog/json-stringify
Ну и мы все с вами так любим применять
А еще клонирование! JSON.stringify => JSON.parse и вуаля!
Кто сказал
В V8 провели серьёзную работу и сделали функцию более чем в два раза быстрее!
Основные улучшения такие:
Срезание углов
Обычно при сериализации движок обязан быть очень осторожным: вдруг у объекта есть геттеры, собственный метод
Все эти проверки занимают время.
Теперь V8 научился определять случаи, когда объект «чистый», то есть просто содержит данные и не может неожиданно запустить код. В таких ситуациях сериализация идёт по короткому маршруту — без лишних проверок, что даёт значительный прирост скорости.
Убираем рекурсию
Прежняя реализация работала рекурсивно, из-за чего сериализация глубоко вложенных структур была и медленнее, и потенциально опасна переполнением стека. Теперь используется итеративный алгоритм: он быстрее и надёжнее, вне зависимости от глубины объекта.
Для разработчиков это значит, что операции с данными становятся заметно быстрее.
А как же structuredClone?
Конечно, для клонирования объектов нас есть современный инструмент —
Для обмена данными снаружи всё равно будет нужен
Теперь же, благодаря оптимизациям,
Вообще, там в статье еще много чего! Очень рекомендую.
#v8 #json #stringify #structuredClone
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
❤15👍2