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

34 записи с тегом "internals"

Посмотреть все теги

Стоимость JavaScript в 2019 году

· 12 мин. чтения
Эдди Османи ([@addyosmani](https://twitter.com/addyosmani)), уборщик JavaScript, и Маттиас Биненс ([@mathias](https://twitter.com/mathias)), освободитель главного потока
примечание

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

«Стоимость JavaScript», представленная Эдди Османи на конференции #PerfMatters в 2019 году.

Молниеносно быстрое разбор, часть 2: ленивый разбор

· 14 мин. чтения
Тун Вервеест ([@tverwaes](https://twitter.com/tverwaes)) и Марья Хёльтта ([@marjakh](https://twitter.com/marjakh)), упрощенные разборщики

Это вторая часть нашей серии, объясняющей, как V8 разбирает JavaScript максимально быстро. Первая часть объясняла, как мы сделали сканер V8 быстрым.

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

Кэширование кода для разработчиков JavaScript

· 14 мин. чтения
[Лешек Свирски](https://twitter.com/leszekswirski), разрушитель кэша

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

Без JIT в V8

· 3 мин. чтения
Якоб Грубер ([@schuay](https://twitter.com/schuay))

V8 версии 7.4 теперь поддерживает выполнение JavaScript без выделения исполняемой памяти во время выполнения.

В своей стандартной конфигурации V8 сильно зависит от возможности выделять и изменять исполняемую память во время выполнения. Например, оптимизирующий компилятор TurboFan создает машинный код для «горячих» функций JavaScript (JS) непосредственно перед выполнением, а большинство регулярных выражений JS компилируются в машинный код с помощью движка irregexp. Создание исполняемой памяти во время выполнения — одна из ключевых причин высокой скорости V8.

Упорядочивание в V8

· 16 мин. чтения
Саймон Цюнд ([@nimODota](https://twitter.com/nimODota)), согласованный компаратор

Array.prototype.sort был одним из последних встроенных методов, реализованных на JavaScript с самохостингом в V8. Его портирование предоставило нам возможность экспериментировать с различными алгоритмами и стратегиями реализации, а затем наконец сделать его стабильным в V8 v7.0 / Chrome 70.

Встроенные функции

· 10 мин. чтения
Якоб Грубер ([@schuay](https://twitter.com/schuay))

Встроенные функции V8 (builtins) потребляют память в каждом экземпляре V8. Число встроенных функций, средний размер и количество экземпляров V8 на вкладке браузера Chrome значительно выросли. В этом посте мы расскажем, как смогли уменьшить медианный размер кучи V8 на сайте на 19% за последний год.

Параллельная маркировка в V8

· 11 мин. чтения
Улан Дегенбаев, Михаэль Липпаутц и Ханнес Пайер — освободители главного потока

Этот пост описывает технику сборки мусора, называемую параллельной маркировкой. Оптимизация позволяет JavaScript-приложению продолжать выполнение, пока сборщик мусора сканирует кучу для нахождения и маркировки живых объектов. Наши тесты показывают, что параллельная маркировка сокращает время, затрачиваемое на маркировку в главном потоке, на 60%–70%. Параллельная маркировка является последним элементом проекта Orinoco — проекта по постепенной замене старого сборщика мусора новым, в основном параллельным и многопоточным сборщиком мусора. Параллельная маркировка включена по умолчанию в Chrome 64 и Node.js v10.

Фоновая компиляция

· 4 мин. чтения
[Росс МакИлрой](https://twitter.com/rossmcilroy), защитник главного потока

TL;DR: Начиная с Chrome 66, V8 компилирует исходный код JavaScript в фоновом потоке, сокращая время, затрачиваемое на компиляцию в главном потоке, на 5–20% на типичных веб-сайтах.

Предыстория

Начиная с версии 41, Chrome поддерживает парсинг исходных файлов JavaScript в фоновом потоке через API V8 StreamedSource. Это позволяет V8 начинать парсинг исходного кода JavaScript, как только Chrome загрузил первый фрагмент файла из сети, и продолжать парсинг параллельно с потоковой передачей файла через сеть в Chrome. Это может значительно улучшить время загрузки, так как V8 может почти завершить парсинг JavaScript к моменту завершения загрузки файла.

Трассировка от JS к DOM и обратно

· 4 мин. чтения
Улан Дегенбаев, Алексей Филиппов, Михаэль Липпаутц и Ханнес Паер — содружество DOM

Отладка утечек памяти в Chrome 66 стала намного проще. В инструментах разработчика Chrome теперь можно трассировать и создавать снимки C++ DOM объектов, а также отображать все достижимые DOM объекты из JavaScript с их ссылками. Эта функция является одним из преимуществ нового механизма трассировки C++ сборщика мусора V8.

Оптимизация хеш-таблиц: скрытие хеш-кода

· 5 мин. чтения
[Сатья Гунасекеран](https://twitter.com/_gsathya), хранитель хеш-кодов

ECMAScript 2015 ввел несколько новых структур данных, таких как Map, Set, WeakSet и WeakMap, которые используют хеш-таблицы под капотом. Этот пост описывает последние улучшения в том, как V8 v6.3+ хранит ключи в хеш-таблицах.