Последний выпуск V8, движка Google с открытым исходным кодом JavaScript, уменьшит размер кучи на 40 процентов за счет сжатия указателя, когда он будет выпущен вместе со стабильной версией Chrome 80 через несколько недель.
V8 — это высокопроизводительный движок JavaScript и WebAssembly с открытым исходным кодом от Google, написанный на C ++. Он используется в Chrome и в Node.js и реализует ECMAScript и WebAssembly.
Уменьшение размера кучи V8 происходит из-за того, что разработчики внимательно посмотрели на то, что (которые представляют собой указатели на кучу V8 или небольшие целые числа) занимают большую часть кучи. Размеченные значения имеют размер системного указателя: они имеют ширину 32 бита для 32-битных архитектур и 64 бита в 64-битных архитектурах. Однако разработчики поняли, что верхние биты помеченных значений могут быть синтезированы из младших битов, а это означает, что V8 нужно хранить только уникальные младшие биты в куче, экономя в среднем 40% памяти кучи. Писая об экономии в блоге V8, Лешек Свирски сказал:
«Улучшение памяти обычно происходит за счет производительности. Обычно. Мы с гордостью сообщаем, что мы наблюдали улучшение производительности на реальных веб-сайтах за время, проведенное в V8 и его сборщике мусора».
Другие улучшения в новом выпуске связаны с поддержкой JavaScript. Новым в этом выпуске является поддержка необязательного объединения в цепочку и нулевого объединения. Необязательное объединение в цепочку помогает избежать исключений, если промежуточные значения равны нулю или не определены, то есть программисты могут писать более короткие надежные цепочки доступа к свойствам, которые проверяют, являются ли промежуточные значения нулевыми. Если промежуточное значение равно нулю, все выражение оценивается как неопределенное.
Оператор объединения с нулевым значением ?? — это новый бинарный оператор короткого замыкания для обработки значений по умолчанию. До сих пор значения по умолчанию часто обрабатывались с помощью логического оператора, но у этого есть недостатки, так как это может привести к получению неверного значения. С нулевым оператором объединения оператор ?? b оценивается как b, когда a имеет значение NULL (null или undefined), а в противном случае оценивается как a. Это желаемое поведение значения по умолчанию, позволяющее избежать неправильного результата, который мог бы возникнуть при использовании логического оператора.