В случае JavaScript-движка V8 — очень даже. В этой статье я привожу результаты своего маленького исследования эффективности одной из внутренних оптимизаций V8.
Читать полностью »
Рубрика «V8» - 2
Насколько важен порядок свойств в объектах JavaScript?
2020-01-30 в 8:56, admin, рубрики: chromium, Google Chrome, javascript, Node, V8, высокая производительность, производительность, тесты производительностиИстория о V8, React и падении производительности. Часть 2
2019-09-20 в 9:30, admin, рубрики: javascript, React, ReactJS, V8, Блог компании RUVDS.com, разработка, Разработка веб-сайтовСегодня мы публикуем вторую часть перевода материала, посвящённого внутренним механизмам V8 и расследованию проблемы с производительностью React.
История о V8, React и падении производительности. Часть 1
2019-09-16 в 9:30, admin, рубрики: javascript, React, ReactJS, V8, Блог компании RUVDS.com, разработка, Разработка веб-сайтовВ материале, первую часть перевода которого мы публикуем сегодня, речь пойдёт о том, как JavaScript-движок V8 выбирает оптимальные способы представления различных JS-значений в памяти, и о том, как это влияет на внутренние механизмы V8, касающиеся работы с так называемыми формами объектов (Shape). Всё это поможет нам разобраться с сутью недавней проблемы, касающейся производительности React.
Сборка мусора в V8: как работает новый Orinoco GC
2019-06-06 в 10:05, admin, рубрики: chrome, Google Chrome, javascript, node.js, nodejs, V8, Блог компании Badoo, высокая производительностьЕсли честно, это одна из самых жестоких статей, что я читал за последнее время: тут много про смерть в молодом возрасте, про гонения из одной области памяти в другую и про ожесточённую борьбу за производительность. В общем, добро пожаловать под кат — там перевод отличной статьи Питера Маршалла о том, как сегодня работает сборка мусора в V8.
V8: один год со Spectre
2019-04-25 в 15:39, admin, рубрики: Google Chrome, jit, meltdown, spectre, V8, безопасные языки, браузеры, информационная безопасность, Процессоры, спекулятивное выполнение, таймер3 января 2018 года Google Project Zero и другие раскрыли первые три из нового класса уязвимостей, которые затрагивают процессоры со спекулятивным выполнением. Их назвали Spectre (1 и 2) и Meltdown. Используя механизмы спекулятивного выполнения CPU, злоумышленник может временно обойти как явные, так и неявные программные проверки безопасности, которые не позволяют программам читать недоступные данные в памяти. В то время как спекулятивное выполнение разработано как деталь микроархитектуры, невидимая на архитектурном уровне, тщательно разработанные программы могли считывать недоступную информацию в спекулятивном блоке и раскрывать её через боковые каналы, такие как время выполнения фрагмента программы.
Когда было показано, что атаки Spectre возможны средствами JavaScript, команда V8 приняла участие в решении проблемы. Мы сформировали группу реагирования на чрезвычайные ситуации и тесно сотрудничали с другими командами в Google, нашими партнёрами из числа разработчиков других браузеров и партнёрами по оборудованию. Совместно с ними мы проактивно вели как наступательные исследования (конструирование атакующих модулей для доказательства концепции), так и оборонительные (смягчение потенциальных атак).
Читать полностью »
Знай свой JIT: ближе к машине
2018-08-02 в 12:37, admin, рубрики: javascript, jit, V8, Блог компании Конференции Олега Бунина (Онтико), высокая производительность, Клиентская оптимизация, КомпиляторыДо того, как написанный нами код будет исполнен, он проходит довольно долгий путь. Андрей Мелихов в своем докладе на РИТ++ 2018 разобрал каждый шаг на этом пути на примере движка V8. Заходите под кат, чтобы выяснить, что даёт нам глубокое понимание принципов работы компилятора и как сделать JavaScript код производительнее.
Узнаем, является ли WASM серебряной пулей для повышения производительности кода, и всегда ли оправданы оптимизации.
Спойлер: «Преждевременная оптимизация — корень всех бед», Дональд Кнут.
О спикере: Андрей Мелихов работает в компании Яндекс.Деньги, активно пишет на Node.js, а в браузере — меньше, поэтому ему ближе серверный JavaScript. Андрей поддерживает и развивает сообщество devShacht, заходите познакомиться на GitHub или Medium.
Читать полностью »
Трассировка JS ↔ DOM, или Туда и обратно
2018-03-20 в 12:24, admin, рубрики: chromium, DevTools, Google Chrome, heap dump, holyjs, holyjs2018, holyjs2018piter, javascript, Profiler, V8, Блог компании JUG.ru GroupОтладка утечек памяти в Chrome 66 стала гораздо удобней. DevTools теперь могут проводить трассировку, делать снапшоты DOM-объектов из C++, отображать все доступные DOM-объекты из JavaScript вместе со ссылками на них. Появляение этих возможностей стало следствием нового механизма трассировки C++ в сборщике мусора V8.
Напомню, что стабильный Chrome сейчас (20.03.2018) имеет версию 65, поэтому чтобы подивиться на фичу, придётся установить одну из нестабильных сборок (например, Beta имеет версию 66, а Dev и Canary — 67).
RegExp Unicode Property Escapes в JavaScript: штрихи к портрету
2018-03-05 в 4:03, admin, рубрики: Google Chrome, javascript, JS, node.js, regular expressions, Unicode, V8, браузеры, Регулярные выражения, ЮникодRegExp Unicode Property Escapes перешли на 4-ю ступень и будут включены в ES2018.
В V8 они доступны без флага начиная с v6.4, так что готовы к использованию во всех текущих каналах Google Chrome от стабильного до Canary.
В Node.js они будут доступны без флага уже в v10 (выходит в апреле). В других версиях требуется флаг --harmony_regexp_property
(Node.js v6–v9) или --harmony
(Node.js v8-v9). Сейчас без флага их можно испробовать или в ночных сборках, или в ветке v8-canary.
При этом нужно иметь в виду, что сборки Node.js, скомпилированные без поддержки ICU, будут лишены возможности использовать этот класс регулярных выражений (подробнее см. Internationalization Support).
Подробнее о поддержке в других движках и средах см. в известной таблице (после перехода проскрольте чуть выше).
Я не буду повторять описания этой долгожданной возможности, лишь сошлюсь на несколько статей от известных специалистов: Читать полностью »
Оптимизация ES2015 Прокси в V8
2017-10-10 в 8:33, admin, рубрики: chrome, chromium, ecmascript 2015, ES6, Google Chrome, javascript, JS, node.js, nodejs, proxy, V8
Это перевод поста из официального блога JS-движка V8. Статья короткая, текста мало, больше похоже на увлекательный рассказ о проблемах, подстерегающих ни о чём не подозревающих сотрудников Google в коде V8. Речь пойдёт об ускорении обработки ES6 Прокси в V8, которое будет доступно в Chrome 62 и Node v9.x, и совсем немного о том, как лучше применять прокси для получения максимальной скорости работы.
Введение
Прокси появились в JavaScript с принятием стандарта ES2015. Они позволяют перехватывать фундаментальные операции объектов и переопределять их поведение. Прокси являются основой таких библиотек, как jsdom или Complink RPC library. В последнее время мы приложили много усилий, чтобы улучшить производительность прокси в V8. Эта статья проливает немного света на общие подходы к улучшению производительности в V8 и для прокси в частности.
Заблуждения о JavaScript Engine Switcher 2.X
2017-10-05 в 16:18, admin, рубрики: .net, .net core, Chakra, ChakraCore, ClearScript, javascript, JavaScript Engine Switcher, React, ReactJS, ReactJS.NET, V8
Английскую версию данного поста я написал еще в мае и опубликовал ее в багтрекере проекта ReactJS.NET. Изначально я не планировал переводить данный пост на русский язык, но в понедельник я увидел программу 13-й встречи MskDotNet Community, и решил, что такой перевод был бы полезен сообществу
Для лучшего понимания материала изложенного в посте, я немного расскажу о ReactJS.NET и JavaScript Engine Switcher. ReactJS.NET – это .NET-библиотека, которая производит компиляцию JSX-кода в JS-код. Данная библиотека не является .NET-портом библиотеки React (по аналогии c Less.js и dotless). При создании ReactJS.NET использован совершенно другой подход: JS-код библиотеки React запускается из .NET с помощью JS-движка. Роль этого JS-движка, как раз и выполняет библиотека JavaScript Engine Switcher. JavaScript Engine Switcher определяет унифицированный интерфейс доступа к базовым возможностям популярных JS-движков (MSIE JavaScript Engine for .Net, Microsoft ClearScript.V8, Jurassic, Jint и ChakraCore) и позволяет быстро переключить вашу библиотеку или приложение на использование другого JS-движка (при условии, что ваш JS-код совместим со стандартом ECMAScript 5).