Все мы (; знаем что
єто не вызов функции. Для єтого достаточно обратиться к спецификации.
Попробуйте придумать еще, не менее двух доказательств тому, что
например:
Таких доказательств есть минимум 6
super()
єто не вызов функции. Для єтого достаточно обратиться к спецификации.
Попробуйте придумать еще, не менее двух доказательств тому, что
super
не является функцией. например:
typeof super
👍11❤2
Мне прислали маленький кусочек лекции с переводой, от автора книги - вы не знаете JavaScript.
Послушайте его.
https://youtu.be/OjsrG5eTYPM?si=CLedXE9dYoEljebI
Послушайте его.
https://youtu.be/OjsrG5eTYPM?si=CLedXE9dYoEljebI
YouTube
Глубокие основы JS. 0 - Введение
Перевод видеолекции Кайла Симпсона (автор серии книг "You don't know JS").
👍37👀6❤5
Почему дружок? да потому...
Что я жизнь учил не по учебникам
Просто я работаю, просто я работаю,
Волшебником волшебником...
https://youtu.be/1SgfKzR9bUg?si=k8AjoYyu5FSWY4Gg
Что я жизнь учил не по учебникам
Просто я работаю, просто я работаю,
Волшебником волшебником...
https://youtu.be/1SgfKzR9bUg?si=k8AjoYyu5FSWY4Gg
YouTube
Марк Бернес - Я работаю волшебником
❤5👌3
Кеширование байкода в V8 и GoogleChrome.
Кеширование откомпилированного JavaScript кода существует с 2015 года с версии v8 4.2,
в чем можно легко убедиться даже просто посмотрев в папку кеша Google Chrome где кеш байткод-а вынесен в отдельную папку.
Машинерия отвечающая за критерии подобного кеширования местами настолько странная, что ничего кроме моего удивления не вызывает.
Ниже упрощенное описание этого процесса, актуальное на июнь 2021 года, (на 2024 ничего не поменялось)
достаточное чтобы знать все необходимое для понимания процесса кеширования байткода в Chrome.
Подчеркиваю - именно в Хроме. Любая другая хост среда, может получить от V8 байткод и организовать свою собственную стратегию кеширования байткода.
Существует три стратегии Chrome браузера приводящие к кешированию байткода.
При этом для всех трех стратегий должны выполняться следующие условия:
1. Это должен быть внешний файл. Inline код никогда не кешируется (для байт кода)
2. Размер файла должен быть более 1 килобайта.
3. Кодировка файла и страницы должна быть UTF8 В случае если кодировка не
совпадает - кеш байт кода не используется, но при этом может в некоторых случаях
создаваться.
Стратегия 1
Самая распространенная модель поведения связана с типичной загрузкой Js файла: использования тега script для подключения файла кода.
В рамках этой модели, существует три фазы через которые должен пройти код, чтобы его откомпилированная версия(байт код) попала в кеш.
При первом запросе JS файла, происходят все типичные процессы для запуска кода, при этом откомпилированная версия не сохраняется в кеше. Сохраняется только сам JS файл - его текстовое представление.
В случае если осуществляется повторный запрос этого файла не позднее чем через 72 часа относительно первого запроса, его байт код версия, созданная в момент подключения, сохраняется в кеше. И в свою очередь при третьем запросе, который опять должен произойти не позднее чем через 72 часа, уже загружается и используется ранее сохраненная откомпилированная версия.
При этом следует знать, что современный V8 использует так называемую ленивую компиляцию кода которая выглядит следующим образом:
на старте компилируется только то, что выполнялось в момент подключения JS файла
(на самом деле все чуть сложнее, и откомпилирован может быть и мертвый на старте код, но зависит это все, в первую очередь, именно от того, что выполняется и как выполняется при подключении).
Весь прочий код файла остается в исходном виде. То есть только эта первая часть откомпилированного кода попадает в кеш.
Даже если при последующей работе используется весь код из файла, в кеше будет лежать только та его часть, которая была создана на момент подключения JS файла. При этом для случая, когда эта стартовая часть имеет какое либо ветвление, зависящее от каких то внешних факторов (то есть в одно время выполняется на старте одно а в другое - другое) то в кеш постоянно будет сохраняться то одна версия то вторая.
Например, в случае загрузки jQuery версии 1.2 где обьем JS кода в несжатом виде составляет около 100кб, только половина его кода компилируется на старте и попадет в кеш байт кода.
Стратегия 2
Вторая модель поведения связана с использованием Cache API. Если JS код запрашивается и подключается при помощи использования этого API, то все происходит ровно так же как и в стратегии 1, за исключением первой подфазы сохранения JS файла. То есть в случае использования Cache API мы ровно на один шаг ближе к цели.
Стратегия 3
Третья модель поведения связана с фазой Install у Service Workera. В этой фазе, все JS файлы которые присутствуют в списке предварительной загрузки, в отличии от двух предыдущих примеров, гарантировано проходят 100% компиляцию, и 100% сохранение в кеш байт кода, в результате чего браузер уже при первом подключении использует 100% откомпилированную версию взятую из кеша байт кода.
Исключением является ситуации когда, файл, получивший кеш таким образом, будет подключен как модуль. В этом случае кеш аннулируется и вместо него создается новый с использованием типичных механизмов ленивой компиляции.
Кеширование откомпилированного JavaScript кода существует с 2015 года с версии v8 4.2,
в чем можно легко убедиться даже просто посмотрев в папку кеша Google Chrome где кеш байткод-а вынесен в отдельную папку.
Машинерия отвечающая за критерии подобного кеширования местами настолько странная, что ничего кроме моего удивления не вызывает.
Ниже упрощенное описание этого процесса, актуальное на июнь 2021 года, (на 2024 ничего не поменялось)
достаточное чтобы знать все необходимое для понимания процесса кеширования байткода в Chrome.
Подчеркиваю - именно в Хроме. Любая другая хост среда, может получить от V8 байткод и организовать свою собственную стратегию кеширования байткода.
Существует три стратегии Chrome браузера приводящие к кешированию байткода.
При этом для всех трех стратегий должны выполняться следующие условия:
1. Это должен быть внешний файл. Inline код никогда не кешируется (для байт кода)
2. Размер файла должен быть более 1 килобайта.
3. Кодировка файла и страницы должна быть UTF8 В случае если кодировка не
совпадает - кеш байт кода не используется, но при этом может в некоторых случаях
создаваться.
Стратегия 1
Самая распространенная модель поведения связана с типичной загрузкой Js файла: использования тега script для подключения файла кода.
В рамках этой модели, существует три фазы через которые должен пройти код, чтобы его откомпилированная версия(байт код) попала в кеш.
При первом запросе JS файла, происходят все типичные процессы для запуска кода, при этом откомпилированная версия не сохраняется в кеше. Сохраняется только сам JS файл - его текстовое представление.
В случае если осуществляется повторный запрос этого файла не позднее чем через 72 часа относительно первого запроса, его байт код версия, созданная в момент подключения, сохраняется в кеше. И в свою очередь при третьем запросе, который опять должен произойти не позднее чем через 72 часа, уже загружается и используется ранее сохраненная откомпилированная версия.
При этом следует знать, что современный V8 использует так называемую ленивую компиляцию кода которая выглядит следующим образом:
на старте компилируется только то, что выполнялось в момент подключения JS файла
(на самом деле все чуть сложнее, и откомпилирован может быть и мертвый на старте код, но зависит это все, в первую очередь, именно от того, что выполняется и как выполняется при подключении).
Весь прочий код файла остается в исходном виде. То есть только эта первая часть откомпилированного кода попадает в кеш.
Даже если при последующей работе используется весь код из файла, в кеше будет лежать только та его часть, которая была создана на момент подключения JS файла. При этом для случая, когда эта стартовая часть имеет какое либо ветвление, зависящее от каких то внешних факторов (то есть в одно время выполняется на старте одно а в другое - другое) то в кеш постоянно будет сохраняться то одна версия то вторая.
Например, в случае загрузки jQuery версии 1.2 где обьем JS кода в несжатом виде составляет около 100кб, только половина его кода компилируется на старте и попадет в кеш байт кода.
Стратегия 2
Вторая модель поведения связана с использованием Cache API. Если JS код запрашивается и подключается при помощи использования этого API, то все происходит ровно так же как и в стратегии 1, за исключением первой подфазы сохранения JS файла. То есть в случае использования Cache API мы ровно на один шаг ближе к цели.
Стратегия 3
Третья модель поведения связана с фазой Install у Service Workera. В этой фазе, все JS файлы которые присутствуют в списке предварительной загрузки, в отличии от двух предыдущих примеров, гарантировано проходят 100% компиляцию, и 100% сохранение в кеш байт кода, в результате чего браузер уже при первом подключении использует 100% откомпилированную версию взятую из кеша байт кода.
Исключением является ситуации когда, файл, получивший кеш таким образом, будет подключен как модуль. В этом случае кеш аннулируется и вместо него создается новый с использованием типичных механизмов ленивой компиляции.
👍24🔥6❤5💯1
Как контролировать/изучать процесс
Наблюдать за всеми этими процессами частично можно в DevTools во вкладке Perfomance фильтруя процессы загрузки по конкретному JS файлу.
В подробном описании фазы, обязательно указывается откуда взят файл, в каком виде, и каков обьем байт код кешированной версии если взята она.
Наиболее подробный отчет можно получить используя механизм записи трейса работы браузера.
Выводы:
Любой современный проект, который опирается в своей работе на:
1) Большой обьем JS кода
2) работу которого обеспечивает браузер Google Chrome или любая другая технология, которая в качестве своей основы использует его (например Electron)
3) проект многократно используется пользователем повторно
4) производительность
обязан реализовывать стретегию, где сердцем работы проекта выступает Service Worker, гарантирующий 100% предварительную компиляцию ВСЕГо JS кода в байт-код.
Наблюдать за всеми этими процессами частично можно в DevTools во вкладке Perfomance фильтруя процессы загрузки по конкретному JS файлу.
В подробном описании фазы, обязательно указывается откуда взят файл, в каком виде, и каков обьем байт код кешированной версии если взята она.
Наиболее подробный отчет можно получить используя механизм записи трейса работы браузера.
Выводы:
Любой современный проект, который опирается в своей работе на:
1) Большой обьем JS кода
2) работу которого обеспечивает браузер Google Chrome или любая другая технология, которая в качестве своей основы использует его (например Electron)
3) проект многократно используется пользователем повторно
4) производительность
обязан реализовывать стретегию, где сердцем работы проекта выступает Service Worker, гарантирующий 100% предварительную компиляцию ВСЕГо JS кода в байт-код.
❤17👍13
04-15 по Киеву.
Смотрим вместе YT: Реализация хранения данных. Стек и куча. Oddball и иммутабельные примитивы
Посмотрим в режиме x1.5 про Stack, Heap, Rock’n’Roll!
Там 20 минут.
https://www.youtube.com/watch?v=0fPH7mhlSGg
Смотрим вместе YT: Реализация хранения данных. Стек и куча. Oddball и иммутабельные примитивы
Посмотрим в режиме x1.5 про Stack, Heap, Rock’n’Roll!
Там 20 минут.
https://www.youtube.com/watch?v=0fPH7mhlSGg
YouTube
Смотрим вместе YT: Реализация хранения данных. Стек и куча. Oddball и иммутабельные примитивы
Посмотрим в режиме x1.5 про Stack, Heap, Rock’n’Roll!
Или: Курс по JavaScript | Реализация хранения данных. Стек и куча. Oddball и иммутабельные примитивы
https://www.youtube.com/watch?v=RFR43fpTARs
Таймкоды:
00:00:00 Музыка
00:04:00 Вступление
00:07:30…
Или: Курс по JavaScript | Реализация хранения данных. Стек и куча. Oddball и иммутабельные примитивы
https://www.youtube.com/watch?v=RFR43fpTARs
Таймкоды:
00:00:00 Музыка
00:04:00 Вступление
00:07:30…
👍14🔥8🙏1👌1
В жаргоне языка JavaScript существует такой термин как IIFE
( Immediately Invoked Function Expression).
Естественно никакого IIFE в спецификации JS нет.
Есть выражение к которому применяется callable expression.
Например:
Упражнение для ума.
Найдите еще 12 способов создание так называемых IIFE
Например
То есть еще 11.
( Immediately Invoked Function Expression).
Естественно никакого IIFE в спецификации JS нет.
Есть выражение к которому применяется callable expression.
Например:
(
function() {
console.log('hello world')
}
)();
Упражнение для ума.
Найдите еще 12 способов создание так называемых IIFE
Например
(
function() {
console.log('hello world')
}()
);
То есть еще 11.
🤯10👀3👍2👎2🕊1
14-00 по Киеву
Производительность JS: V8 lazy compilation или как Яндекс ногтей набросал.
Познакомимся с тем, как в V8 работает parser JavaScript кода.
Разберемся с тем, как это может влиять на производительность.
Узнаем о том, что такое байт-код, как он кешируется.
А главное о том, как Яндекс ногтей набросал.
https://www.youtube.com/watch?v=fsgT-1KDqpI
Производительность JS: V8 lazy compilation или как Яндекс ногтей набросал.
Познакомимся с тем, как в V8 работает parser JavaScript кода.
Разберемся с тем, как это может влиять на производительность.
Узнаем о том, что такое байт-код, как он кешируется.
А главное о том, как Яндекс ногтей набросал.
https://www.youtube.com/watch?v=fsgT-1KDqpI
YouTube
Производительность JS: V8 lazy Compilation или как Яндекс ногтей набросал.
Познакомимся с тем, как в V8 работает parser JavaScript кода.
Разберемся с тем, как это может влиять на производительность.
Узнаем о том, что такое байт-код, как он кешируется.
А главное о том, как Яндекс ногтей набросал.
Таймкоды:
00:00:00 Музыка …
Разберемся с тем, как это может влиять на производительность.
Узнаем о том, что такое байт-код, как он кешируется.
А главное о том, как Яндекс ногтей набросал.
Таймкоды:
00:00:00 Музыка …
👍16🔥4❤2😁1🐳1🌚1
23-30 по Киеву
Asm для JS программиста: Введение
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с инструментами.
Вникаем в то, что нам нужно знать.
https://www.youtube.com/watch?v=MHNKeEo0HOQ
Asm для JS программиста: Введение
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с инструментами.
Вникаем в то, что нам нужно знать.
https://www.youtube.com/watch?v=MHNKeEo0HOQ
YouTube
Asm для JS программиста: Введение
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с инструментами.
Вникаем в…
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с инструментами.
Вникаем в…
❤30🔥13❤🔥6👍2👌2🐳2🤣2
23-00 по Киеву
Asm для JS программиста: Введение. Часть 2.
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с инструментами.
Вникаем в то, что нам нужно знать.
https://www.youtube.com/watch?v=JUDPQLb7QnQ
Asm для JS программиста: Введение. Часть 2.
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с инструментами.
Вникаем в то, что нам нужно знать.
https://www.youtube.com/watch?v=JUDPQLb7QnQ
YouTube
Asm для JS программиста: Введение. Часть 2.
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с инструментами.
Вникаем в…
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с инструментами.
Вникаем в…
🔥32👍5❤1🕊1🐳1
Пятница. 10 утра по Киеву.
Asm для JS программиста: Отладка
Знакомимся с отладчиком.
Изучаем поведение кода в живую:
1. Что такое стек.
2. Как адресуется исполняемая команда.
3. Как работают call и ret.
4. Как работают прерывания.
5. Решаем задачу имплантирования кода вируса в тело программы.
https://www.youtube.com/watch?v=gDlpECfuOc0
Asm для JS программиста: Отладка
Знакомимся с отладчиком.
Изучаем поведение кода в живую:
1. Что такое стек.
2. Как адресуется исполняемая команда.
3. Как работают call и ret.
4. Как работают прерывания.
5. Решаем задачу имплантирования кода вируса в тело программы.
https://www.youtube.com/watch?v=gDlpECfuOc0
YouTube
Asm для JS программиста: Отладка
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с отладчиком.
Изучаем поведение…
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с отладчиком.
Изучаем поведение…
🔥24👍8❤🔥2
Украина - золото.
Обошла Корею и Японию. Ну єто как если бы наши баскетболисты победили Чикаго Булс и Лейкерс.
Обошла Корею и Японию. Ну єто как если бы наши баскетболисты победили Чикаго Булс и Лейкерс.
❤🔥32😁4👍3👎2🤯1
Знаете ли Вы что?
Коллекция Set или Map не гарантирует Вам уникальность ключа?
То есть существуют ключи которые уже сейчас будут выступать дублями друг друга?
Согласно спецификации конечно, а не в результате коллизии алгоритма построения HashMap-а.
Сейчас существует одно исключение однако никто не гарантирует того, что в будущем этот список не дополнится.
Как Вы думаете что это за исключение?
Отгадка:
-0 +0 и 0
Важно:
+0 и 0 это одно и тоже. Но при этом -0 и +0 не одно и тоже.
И это не баг спецификации. Это прямым образом прописанное в нем поведение. Причем прописано образом, когда предполагается возможность добавления других исключений.
Коллекция Set или Map не гарантирует Вам уникальность ключа?
То есть существуют ключи которые уже сейчас будут выступать дублями друг друга?
Согласно спецификации конечно, а не в результате коллизии алгоритма построения HashMap-а.
Сейчас существует одно исключение однако никто не гарантирует того, что в будущем этот список не дополнится.
Как Вы думаете что это за исключение?
Отгадка:
Важно:
+0 и 0 это одно и тоже. Но при этом -0 и +0 не одно и тоже.
И это не баг спецификации. Это прямым образом прописанное в нем поведение. Причем прописано образом, когда предполагается возможность добавления других исключений.
🤯25❤9👌3👀3💔1
Сейчас: 03-35 по Киеву
Смотрим вместе YT: Оптимизация Frontend приложений (23 совета)
Посмотрим в режиме x1.5 Оптимизация Frontend приложений (23 совета) | Оптимизация Web, полный курс 2024 [для новичков]
https://www.youtube.com/watch?v=LIn-vq1y9m0
Смотрим вместе YT: Оптимизация Frontend приложений (23 совета)
Посмотрим в режиме x1.5 Оптимизация Frontend приложений (23 совета) | Оптимизация Web, полный курс 2024 [для новичков]
https://www.youtube.com/watch?v=LIn-vq1y9m0
❤10👍5
Якщо хтось не дивись.
Фінал. Шабля.
Україно - золото.
це того варте.
https://www.youtube.com/live/YGc9hwO9vSI?si=8YUSaGMfhBQYBPys
Фінал. Шабля.
Україно - золото.
це того варте.
https://www.youtube.com/live/YGc9hwO9vSI?si=8YUSaGMfhBQYBPys
YouTube
Україна – Республіка Корея: ФІНАЛ, ПРЯМА ТРАНСЛЯЦІЯ / Олімпіада-2024, фехтування, жіноча шабля
Фінал Олімпійських ігор-2024 у фехтуванні на шаблях серед жіночих команд. Україна проти Республіки Корея – у матчі за «золото» Олімпіади.
Україну на Олімпіаді-2024 представляють Ольга Харлан, Аліна Комащук, Олена Кравацька та Юлія Бакастова. На шляху до…
Україну на Олімпіаді-2024 представляють Ольга Харлан, Аліна Комащук, Олена Кравацька та Юлія Бакастова. На шляху до…
🔥40👍8👎4❤3❤🔥3🌚1