История ускорения операции удаления свойства в JavaScriptCore

Джастин Микауд в блоге WebKit написал статью про ускорение операции удаления свойства объекта в JavaScriptCore — "A Tour of Inline Caching with Delete".

Самая распространённая рекомендация для написания быстрого JS-кода — не использовать оператор delete. Как пример, в JavaScriptCore delete приводил к деоптимизации, из-за того что при удалении свойства движок использовал внутреннее представление js-объекта, которое не использует информацию об уже созданных ранее объектах. Для исправления этой проблемы потребовалось адаптировать механизмы, которые используются для кеширования общих частей объектов (Structure и Transitions). Исправление этой части сделало возможным генерацию инлайн-кэша (inline cache) на уровне JIT при удалении свойств объекта.

Инлайн-кэш — это техника оптимизации, использующаяся для ускорения операций работы с объектами, суть которой состоит в модификации генерируемого кода на основе результатов его предыдущего выполнения (интересный факт, эта оптимизация впервые появилась в Smalltalk). Информация, собранная при генерации инлайн-кэша, используется оптимизирующим компилятором. После всех исправлений в JavaScriptCore компилятор может производить дополнительные оптимизации оператора delete, например, полностью его удалять из генерируемого машинного кода, если он не влияет на работу программы.

Довольно хардкорная и интересная статья. Must read, если интересуетесь тем, как работают js-движки под капотом.

https://webkit.org/blog/10298/inline-caching-delete/

← На главную