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

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

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

Покрытие кода JavaScript

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

Покрытие кода предоставляет информацию о том, были ли определённые части приложения выполнены и, при необходимости, как часто. Оно обычно используется для определения того, насколько тщательно тестовый набор проверяет конкретную кодовую базу.

Зачем это полезно?

Как разработчик JavaScript, вы часто можете оказаться в ситуации, когда покрытие кода может быть полезным. Например:

  • Интересует качество вашего набора тестов? Рефакторите большой проект с наследием? Покрытие кода может показать вам, какие части вашей кодовой базы покрыты.
  • Хотите быстро узнать, достигнута ли определённая часть кодовой базы? Вместо того, чтобы инструментировать с помощью console.log для отладки в стиле printf или вручную проходить по коду, покрытие кода может отображать информацию в реальном времени о том, какие части вашего приложения были выполнены.
  • Или, возможно, вы оптимизируете скорость и хотите знать, на каких частях сосредоточиться? Счётчики выполнения могут указать горячие функции и циклы.

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 на низком уровне с высокой степенью надежности, что повысило скорость разработки команды.

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

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

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

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

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

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

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

Быстрый `for`-`in` в V8

· 12 мин. чтения
Камилло Бруни ([@camillobruni](http://twitter.com/camillobruni))

for-in — это широко используемая языковая конструкция, присутствующая во многих фреймворках. Несмотря на свою распространенность, с точки зрения реализации, это одна из наиболее сложных конструкций. V8 приложил большие усилия, чтобы сделать эту функциональность максимально быстрой. За последний год for-in стал полностью совместим со спецификацией и до 3 раз быстрее в зависимости от контекста.

Помогите нам протестировать будущее V8!

· 2 мин. чтения
Даниэль Клиффорд ([@expatdanno](https://twitter.com/expatdanno)), оригинальный мюнхенский пивовар V8

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

Ускорение регулярных выражений V8

· 4 мин. чтения
Якоб Грубер, инженер-программист

Эта публикация рассказывает о недавнем переносе функций встроенных регулярных выражений V8 из реализации на собственном JavaScript в архитектуру нового поколения кода, основанного на TurboFan.

Запуск интерпретатора Ignition

· 4 мин. чтения
Росс МакИлрой, стартер V8 Ignition

V8 и другие современные движки JavaScript достигают своей скорости благодаря компиляции "на лету" (JIT) скриптов в нативный машинный код непосредственно перед выполнением. Код сначала компилируется базовым компилятором, который может быстро генерировать неоптимизированный машинный код. Скомпилированный код анализируется во время выполнения и при необходимости динамически перекомпилируется с использованием более продвинутого оптимизирующего компилятора для максимальной производительности. В V8 этот процесс выполнения скриптов имеет множество специальных случаев и условий, которые требуют сложной логики для переключения между базовым компилятором и двумя оптимизирующими компиляторами, Crankshaft и TurboFan.

Есть `Math.random()`, а затем есть `Math.random()`

· 4 мин. чтения
Ян Гуо ([@hashseed](https://twitter.com/hashseed)), инженер-программист и дизайнер костей

Math.random() возвращает значение Number с положительным знаком, большее или равное 0, но меньшее 1, выбираемое случайным или псевдослучайным образом с приблизительно равномерным распределением в этом диапазоне, используя алгоритм или стратегию, зависящие от реализации. Эта функция не принимает аргументов.