Рубрика «V8»
Утечки памяти, которые не утечки
2024-01-31 в 7:10, admin, рубрики: garbage collector, JS, Node, V8, утечкиСтатью я захотел написать после работы над одним конкретным багом, который со всех точек зрения напоминал классическую утечку памяти, но на практике оказался чем то совершенно другим. Я нигде не встречал описание такого поведения и поэтому решил этой информацией поделиться.
В один прекрасный день боевое сопровождение приходит с ужасной проблемой — память в контейнерах Node.js течет, сервисы падают с OOM каждый день, все пропало!

Внутреннее представление и оптимизации строк в JavaScript-движке V8: «отмываем» строки, «обгоняем» C++
2023-08-08 в 9:00, admin, рубрики: javascript, node.js, nodejs, ruvds_статьи, V8, Блог компании RUVDS.com, Компиляторы, ненормальное программирование, оптимизация
С самого рождения JavaScript в каком-то смысле был языком для манипулирования текстом — от веб-страничек в самом начале до полноценных компиляторов сейчас. Неудивительно, что в современных JS-движках достаточно много сил уделено оптимизации внутреннего представления строк и операций над ними.
В этой статье я хочу рассмотреть, как могут быть представлены строки в движке V8. Попытаюсь продемонстрировать их эффект, обогнав C++ в очень честном бенчмарке. А также покажу, в каких случаях они могут, наоборот, привести к проблемам с производительностью, и что в таких случаях можно сделать.Читать полностью »
Самый быстрый браузер
2023-08-06 в 18:22, admin, рубрики: chrome, ci, Firefox, gecko, maglev, mozilla, mozjemalloc, Quantum, raptor, servo, speedometer, V8, автоматические тесты, аллокатор памяти, бенчмарки, Блог компании GlobalSign, браузеры, производительность, Софт, Тестирование IT-систем
В июле 2023 года произошло важное событие — Firefox превзошёл Chrome в популярном тесте Speedometer, который измеряет скорость работы браузеров.
Были времена, когда Firefox считался медленным и неповоротливым браузером, потребляющим много памяти и в целом «тормозным». Когда появился Chrome, то некоторые пользователи перешли на него из-за лучшей производительности. Сейчас ситуация кардинально меняется.
Как Mozilla сумела добиться такого результата?
Читать полностью »
Эксплойтинг браузера Chrome, часть 1: введение в V8 и внутреннее устройство JavaScript
2022-11-15 в 9:00, admin, рубрики: Google Chrome, javascript, V8, багхантинг, Блог компании Бастион, браузеры, информационная безопасность, ликбез, уязвимости, эксплоиты
Cегодня браузеры играют жизненно важную роль в современных организациях, поскольку всё больше программных приложений доставляется пользователям через веб-браузер в виде веб-приложений. Практически всё, что вы делаете в Интернете, включает в себя применение веб-браузера, а потому он является одним из самых используемых потребительских программных продуктов на планете.
Работая дверями в Интернет, браузеры в то же время создают существенные угрозы целостности персональных вычислительных устройств. Почти ежедневно мы слышим новости наподобие "баг Google Chrome активно используется как Zero-Day" или "Google подтвердила четвёртый эксплойт Zero-Day Chrome за 2022 год". На самом деле, эксплойты браузеров не представляют собой ничего нового, их находят уже долгие годы, начиная с первого эксплойта для удалённого исполнения кода, задокументированного как CVE-1999-0280. Первым потенциально публичным раскрытием браузерного эксплойта, используемого в реальных условиях, стал эксплойт Aurora браузера Internet Explorer, который атаковал Google в декабре 2010 года.
Читать полностью »
Любопытные извращения из мира IT, или зачем мы JS в C++-код вкомпилили
2021-09-14 в 20:06, admin, рубрики: Blink, c++, javascript, svg, ttf, V8, браузеры, ненормальное программирование, Программирование, С++V8 в бэкенде С++: от одного JS-скрипта до фреймворка онлайн-вычислений
2021-08-17 в 6:50, admin, рубрики: c++, javascript, V8, Анализ и проектирование систем, Блог компании Яндекс, высокая производительность, команда яндекс.такси, Проектирование и рефакторингИспользование Atomics.wait(), Atomics.notify() и Atomics.waitAsync()
2020-10-11 в 13:33, admin, рубрики: javascript, V8, Блог компании RUVDS.com, разработка, Разработка веб-сайтовСтатические методы Atomics.wait() и Atomics.notify() представляют собой низкоуровневые примитивы синхронизации, которые можно применять для реализации мьютексов и других подобных механизмов. Но, так как метод Atomics.wait() является блокирующим, его нельзя вызывать в главном потоке (если попытаться это сделать — будет выдана ошибка TypeError).
Движок V8, начиная с версии 8.7, поддерживает неблокирующий вариант Atomics.wait(), называемый Atomics.waitAsync(). Этим новым методом можно пользоваться в главном потоке.
Сегодня мы расскажем о том, как применить эти низкоуровневые API для создания мьютекса, который может работать и в синхронном режиме (в потоках воркеров) и асинхронно (в потоках воркеров или в главном потоке).
Читать полностью »
О реализации структуры данных Map в V8
2020-09-07 в 13:16, admin, рубрики: javascript, V8, Блог компании RUVDS.com, разработка, Разработка веб-сайтов
В стандарте ECMAScript 2015, известном как ES6, появилось много новых JavaScript-коллекций, таких, как Map, Set, WeakMap и WeakSet. Они, судя по всему, стали отличным дополнением к стандартным возможностям JavaScript. Они получили широкое применение в различных библиотеках, в приложениях, в ядре Node.js. Сегодня мы поговорим о коллекции Map, попытаемся разобраться с особенностями её реализации в V8 и сделаем некоторые практические выводы, основанные на полученных знаниях.
Стандарт ES6 не содержит чёткого указания на подход, который должен быть использован для реализации поддержки структуры данных Map. В нём лишь даны некоторые подсказки по возможным способам её реализации. Там же приведены сведения об ожидаемых от Map показателях производительности:
Объект Map должен быть реализован либо с использованием хеш-таблиц, либо с применением других механизмов, которые, в среднем, обеспечивают доступ к элементам коллекции за сублинейное время. Структуры данных, используемые в спецификации объекта Map, предназначены лишь для описания наблюдаемой семантики объектов Map. Они не задумывались как реальная модель реализации этих объектов.
Как видно, спецификация даёт тем, кто создаёт JS-движки, большую свободу. Но при этом здесь нет определённых указаний, касающихся конкретного подхода, используемого для реализации Map, его производительности, характеристик потребления памяти. Если в критически важной части вашего приложения используются структуры данных Map, и если вы записываете в такие структуры данных большие объёмы информации, то основательные знания о реализации Map, определённо, принесут вам большую пользу.
Читать полностью »
Старший инженер-проектировщик Dyson — о новых пылесосах, не взлетевших продуктах и R&D
2020-07-20 в 13:00, admin, рубрики: Dyson, James Dyson Awards, JDA, V11, V8, гаджеты, интервью, Производство и разработка электроники, пылесос, технологический институт




