Перейти к основному содержимому

Orinoco: сборка мусора для молодого поколения

· 7 мин. чтения
Улан Дегенбаев, Михаэль Липпаутц и Ханнес Пайер, друзья [TSAN](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual)

Объекты JavaScript в V8 размещаются в куче, управляемой сборщиком мусора V8. В предыдущих публикациях в блоге мы уже обсуждали, как мы уменьшаем время пауз при сборке мусора (неоднократно) и потребление памяти. В этом посте мы представляем параллельный Scavenger, одну из последних функций Orinoco, преимущественно параллельного сборщика мусора V8, и обсуждаем принятые проектные решения и альтернативные подходы, которые мы реализовали в процессе.

Управление сложностью архитектуры в V8 — CodeStubAssembler

· 9 мин. чтения
[Даниэль Клиффорд](https://twitter.com/expatdanno), ассемблер CodeStubAssembler

В этом посте мы хотели бы представить CodeStubAssembler (CSA), компонент в V8, который оказался очень полезным инструментом для достижения некоторых больших улучшений производительности достижений за последние несколько выпусков V8. CSA также значительно улучшил способность команды V8 быстро оптимизировать функции JavaScript на низком уровне с высокой степенью надежности, что повысило скорость разработки команды.

Анонс Web Tooling Benchmark

· 6 мин. чтения
Бенедикт Мойрер ([@bmeurer](https://twitter.com/bmeurer)), жонглёр производительности JavaScript

Производительность JavaScript всегда была важна для команды V8, и в этом посте мы хотели бы обсудить новый JavaScript Web Tooling Benchmark, который мы недавно начали использовать для выявления и устранения некоторых узких мест производительности в V8. Вы, возможно, уже знаете о сильной приверженности V8 для Node.js, и этот бенчмарк расширяет эту приверженность, проводя тесты производительности на основе общих инструментов разработчиков, построенных на Node.js. Инструменты, представленные в Web Tooling Benchmark, — это те же самые инструменты, которые сегодня используются разработчиками и дизайнерами для создания современных веб-сайтов и облачных приложений. В продолжение наших постоянных усилий сосредоточиться на реальной производительности, а не на искусственных тестах, мы создали этот бенчмарк, используя реальный код, который разработчики используют каждый день.

Релиз V8 v6.3

· 3 мин. чтения
команда V8

Каждые шесть недель мы создаем новую ветку V8 в рамках нашего процесса релиза. Каждая версия отделяется от главной ветки Git V8 сразу перед этапом бета-версии Chrome. Сегодня мы рады объявить о нашей новой ветке, V8 версии 6.3, которая будет находиться в бета-версии до выпуска вместе со стабильной версией Chrome 63 через несколько недель. V8 v6.3 наполнена всеми видами улучшений для разработчиков. Этот пост предоставляет предварительный обзор некоторых основных моментов в преддверии релиза.

Оптимизация прокси ES2015 в V8

· 7 мин. чтения
Мая Армянова ([@Zmayski](https://twitter.com/Zmayski)), оптимизатор прокси

Прокси являются неотъемлемой частью JavaScript с момента появления ES2015. Они позволяют перехватывать основные операции с объектами и настраивать их поведение. Прокси являются ключевой частью таких проектов, как jsdom и библиотека Comlink RPC. Недавно мы приложили немало усилий для улучшения производительности прокси в V8. Эта статья проливает свет на общие шаблоны улучшения производительности в V8, а также на прокси в частности.

Стажировка по ленивости: ленивое удаление неактивных функций

· 10 мин. чтения
Жулиана Франко ([@jupvfranco](https://twitter.com/jupvfranco)), эксперт по ленивости

Примерно три месяца назад я начала работать в команде V8 (Google Munich) в качестве стажера и с тех пор занимаюсь дезоптимизатором виртуальной машины — задачей, которая была для меня абсолютно новой, но оказалась интересной и сложной. Первая часть моей стажировки была направлена на улучшение безопасности виртуальной машины. Вторая часть касалась повышения производительности, а именно удаления структуры данных, используемой для отмены оптимизации функций, которая была узким местом для производительности при сборке мусора. В этой записи блога я описываю вторую часть своей стажировки, объясняя, как V8 раньше удалял неактивные функции, как мы это изменили и какие улучшения производительности были достигнуты.

Временное отключение анализа выхода

· 2 мин. чтения
Матиас Биненс ([@mathias](https://twitter.com/mathias)), аналитик выхода из изолированной среды

В JavaScript выделенный объект выходит, если он доступен извне текущей функции. Обычно V8 выделяет новые объекты в куче JavaScript, но используя анализ выхода, оптимизирующий компилятор может понять, когда объект можно обрабатывать по-особому, так как его срок жизни доказано ограничен активацией функции. Когда ссылка на вновь выделенный объект не выходит за пределы функции, которая его создала, движки JavaScript не обязаны явно выделять этот объект в куче. Вместо этого они могут эффективно рассматривать значения объекта как локальные переменные функции. Это, в свою очередь, позволяет проводить множество оптимизаций, таких как хранение этих значений на стеке или в регистрах, а в некоторых случаях даже полное устранение этих значений. Объекты, которые выходят (точнее, объекты, для которых невозможно доказать, что они не выходят), должны выделяться в куче.

Виды элементов в V8

· 13 мин. чтения
Матиас Байненс ([@mathias](https://twitter.com/mathias))
примечание

Примечание: Если вы предпочитаете смотреть презентации вместо чтения статей, наслаждайтесь видео ниже!

Объекты JavaScript могут иметь произвольные свойства, связанные с ними. Имена свойств объектов могут содержать любые символы. Одним из интересных случаев, которые может выбрать для оптимизации JavaScript-движок, являются свойства, имена которых исключительно числовые, наиболее конкретно индексы массива.

Релиз V8 v6.2

· 5 мин. чтения
команда V8

Каждые шесть недель мы создаем новую ветвь V8 в рамках нашего процесса релиза. Каждая версия создается на основе основной ветки Git V8 непосредственно перед этапом Chrome Beta. Сегодня мы с радостью объявляем о нашей новой ветке, V8 версии 6.2, которая находится в бета-тестировании до ее выпуска в стабильной версии Chrome 62 через несколько недель. V8 v6.2 наполнен всем спектром полезных новшеств для разработчиков. Этот пост предоставляет предварительный обзор некоторых ключевых особенностей в преддверии релиза.

Быстрые свойства в V8

· 11 мин. чтения
Камилло Бруни ([@camillobruni](https://twitter.com/camillobruni)), также автор статьи [“Быстрый `for`-`in`”](/blog/fast-for-in)

В этом посте в блоге мы хотели бы объяснить, как V8 обрабатывает свойства JavaScript на внутреннем уровне. С точки зрения JavaScript требуется лишь несколько различий для свойств. Объекты JavaScript в основном ведут себя как словари, с строковыми ключами и произвольными объектами в качестве значений. Тем не менее, спецификация обрабатывает свойства с числовыми индексами и другие свойства по-разному во время итерации. Кроме этих случаев, разные свойства ведут себя почти одинаково, независимо от того, имеют ли они числовой индекс или нет.