Огромное вам спасибо за ваши лекции! Подробно разобранный материал, большое количество примеров и объяснения! Благодаря вашим курсам, я освоила начальный уровень программирования на JS и смогла устроится в топ Беларуских компаний на Node.js разработчика) Спасибо за ваш труд и любовь к своей работе!
0:43 поля 6:27 скрытые классы 10:28 инлайн кэш 14:50 метод 18:47 оптимизация кода для массивов 35:46 инлайн кэш в массивах 42:40 примеры с функциями 50:40 примеры с глобальными свойствами 57:18 итоги 1:01:30 вопрос про скрытые классы 1:05:40 вопрос про оптимизацию
habr.com/ru/post/303542/ Для полного понимания можно прочитать еще эту статью . Только там упоминается только про 4 уровня, возможно просто устарелая информация.
Там где объясняется, что JS преобразует числа в массиве в объекты Number(X) скорее всего ошибка. Мне кажется Number - это все еще number. new Number - это уже боксирование в Object... new Number(10) !== 10. И new Number(10) !== new Number(10). Оно ведет себя как object В то же время 10 === Number(10)
Так и есть, со стороны js кода, т.е. такие контракты возвращаются в js, а внутри v8 там система многоуровневого боксирования значений, по сути, любое значение в боксе, но на ружу разные интерфейсы торчат, иногда интерфейс скаляра, а иногда объекта. Послушаете Деми Мурыча по этому поводу, мы недавно с ним стрим сделали
@@TimurShemsedinov Т.е. способом вызова new или без него я запрашиваю разные преобразования внутреннего интерфейса обертки Number V8 в интерфейс js типов
@@alexperemey6046 в V8 да, но как в других движках, это может быть разным способом реализовано, так что можно об этом думать только с точки зрения контракта, как это нам видно
Спасибо за видео! А после выхода в деоптимизацию возможен возврат в оптимизацию и использование накопленных инлайн кешей? Или заново будет собирать инлайн кеши.
Обычно нет, есть специальное api, которое можно пробросить в js и дернуть, чтобы все перевычислилось, но кто такое может, то ему уже проще написать оптимизировано )))
Однозначного ответа быть не может, есть разные движки js, у них разные версии, все они очень различаются. Еще виртуалка может находиться в разном состоянии по потреблению ресурсов, памяти и исполняемому рядом коду. Но в общем от нескольких прогонов до нескольких сотен прогонов.
@@lex5115 это общая идея основных движков javascript'а, таких как: V8 (от Google), SpiderMonkey (от Mozilla), JavaScriptCore (от Apple) и Chakra (Microsoft).
Огромное вам спасибо за ваши лекции! Подробно разобранный материал, большое количество примеров и объяснения! Благодаря вашим курсам, я освоила начальный уровень программирования на JS и смогла устроится в топ Беларуских компаний на Node.js разработчика) Спасибо за ваш труд и любовь к своей работе!
0:43 поля
6:27 скрытые классы
10:28 инлайн кэш
14:50 метод
18:47 оптимизация кода для массивов
35:46 инлайн кэш в массивах
42:40 примеры с функциями
50:40 примеры с глобальными свойствами
57:18 итоги
1:01:30 вопрос про скрытые классы
1:05:40 вопрос про оптимизацию
Спасибо!
олд скул
habr.com/ru/post/303542/
Для полного понимания можно прочитать еще эту статью .
Только там упоминается только про 4 уровня, возможно просто устарелая информация.
Там где объясняется, что JS преобразует числа в массиве в объекты Number(X) скорее всего ошибка.
Мне кажется Number - это все еще number.
new Number - это уже боксирование в Object...
new Number(10) !== 10. И new Number(10) !== new Number(10). Оно ведет себя как object
В то же время 10 === Number(10)
Так и есть, со стороны js кода, т.е. такие контракты возвращаются в js, а внутри v8 там система многоуровневого боксирования значений, по сути, любое значение в боксе, но на ружу разные интерфейсы торчат, иногда интерфейс скаляра, а иногда объекта. Послушаете Деми Мурыча по этому поводу, мы недавно с ним стрим сделали
@@TimurShemsedinov Т.е. способом вызова new или без него я запрашиваю разные преобразования внутреннего интерфейса обертки Number V8 в интерфейс js типов
@@alexperemey6046 в V8 да, но как в других движках, это может быть разным способом реализовано, так что можно об этом думать только с точки зрения контракта, как это нам видно
Супер. Внутренности JS.
Спасибо вам большое Тимур Гафарович! Материал🔥
Именно с этой лекции надо начинать изучение JS
Спасибо!
Спасибо большое за такой подробный разбор малоизвестной темы!
Спасибо за видео! А после выхода в деоптимизацию возможен возврат в оптимизацию и использование накопленных инлайн кешей? Или заново будет собирать инлайн кеши.
Обычно нет, есть специальное api, которое можно пробросить в js и дернуть, чтобы все перевычислилось, но кто такое может, то ему уже проще написать оптимизировано )))
@@TimurShemsedinov спасибо за ответ!
Интересно, а начиная с какого количества повторений вызывается оптимизация?
Однозначного ответа быть не может, есть разные движки js, у них разные версии, все они очень различаются. Еще виртуалка может находиться в разном состоянии по потреблению ресурсов, памяти и исполняемому рядом коду. Но в общем от нескольких прогонов до нескольких сотен прогонов.
@@TimurShemsedinov это только к жсу применимо или ко всем языкам, где динамик?
@@lex5115 это общая идея основных движков javascript'а, таких как: V8 (от Google), SpiderMonkey (от Mozilla), JavaScriptCore (от Apple) и Chakra (Microsoft).
полиморфный дендромутантизм
Тимур, скажите, пожалуйста, связан ли как-нибудь инлайн-кэш с байт-кодом?
Шикарно!