Google JavaScript Engine ускоряет парсинг JSON


Последнее обновление V8, движка Google JavaScript, было выпущено в бета-версии до его окончательного выпуска в координации с Chrome 76 Stable через несколько недель. Эта версия, 7.6, ускоряет синтаксический анализ JSON и добавляет поддержку собственного обхода стека.

JSON

V8 — это высокопроизводительный движок JavaScript и WebAssembly с открытым исходным кодом от Google, написанный на C ++. Он используется в Chrome и в Node.js и реализует ECMAScript и WebAssembly.

Разработчики переработали парсер JSON, чтобы он намного быстрее сканировал и анализировал JSON, в результате чего синтаксический анализ данных, обслуживаемых популярными веб-страницами, обрабатывался в 2,7 раза быстрее. До этого выпуска парсер JSON был рекурсивным и использовал собственное пространство стека относительно глубины вложенности входящих данных JSON, поэтому мог выйти из стека для очень глубоко вложенных данных JSON. Он был заменен итеративным анализатором, который управляет своим собственным стеком и ограничен только доступной памятью. Синтаксический анализатор также был переработан для более эффективного использования памяти.

Эти улучшения последовали за другими улучшениями производительности синтаксического анализа JSON, добавленными в двух предыдущих выпусках, 7.4 и 7.5. В 7.4 улучшена обработка вызовов со слишком малым или слишком большим количеством параметров, в некоторых случаях снижая накладные расходы на вызовы на 60 процентов.

Другим улучшением по сравнению с 7.4 было исправление, позволяющее лучше обрабатывать большие скрипты в Chrome, более подходящее для декодирования UTF-8 и имен свойств, чтобы обеспечить общее улучшение на 18 процентов.

В Chrome 75 V8 передает скрипт прямо из сети в свой потоковый парсер, а не ожидает основного потока Chrome. Это изменение улучшает производительность синтаксического анализа JavaScript и уменьшает количество одновременных задач синтаксического анализа потоковой передачи, что еще больше снижает потребление памяти.

Обработка замороженных или запечатанных массивов также была улучшена за счет добавления ряда шаблонов кодирования JavaScript, поэтому замороженные объекты обрабатываются лучше при вызове indexof, includes и ряда вызовов spread.

Обработка обещаний была улучшена с добавлением promise.allsettled. Это дает сигнал, когда все входные обещания либо выполнены, либо отвергнуты, то есть решены. Разработчики говорят, что это полезно в тех случаях, когда вас не волнует состояние обещания, вы просто хотите знать, когда работа будет выполнена, независимо от того, была ли она успешной.

Встроенная поддержка обхода стека была добавлена для Windows. До сих пор Windows не могла обходить стек вызовов, содержащий код, сгенерированный TurboFan при работе на архитектуре x64. V8 теперь может предоставить Windows метаданные, необходимые для работы с этими стеками на x64, а в v7.6 это включено по умолчанию.


Добавить комментарий