As For JS
3.46K subscribers
124 photos
12 videos
4 files
360 links
As For JavaScript...
Обсуждения — @AsForJsTalks
Download Telegram
Все мы (; знаем что
super()

єто не вызов функции. Для єтого достаточно обратиться к спецификации.

Попробуйте придумать еще, не менее двух доказательств тому, что super не является функцией.

например: typeof super

Таких доказательств есть минимум 6
👍112
Мне прислали маленький кусочек лекции с переводой, от автора книги - вы не знаете JavaScript.

Послушайте его.

https://youtu.be/OjsrG5eTYPM?si=CLedXE9dYoEljebI
👍37👀65
Почему дружок? да потому...
Что я жизнь учил не по учебникам
Просто я работаю, просто я работаю,
Волшебником волшебником...

https://youtu.be/1SgfKzR9bUg?si=k8AjoYyu5FSWY4Gg
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% откомпилированную версию взятую из кеша байт кода.

Исключением является ситуации когда, файл, получивший кеш таким образом, будет подключен как модуль. В этом случае кеш аннулируется и вместо него создается новый с использованием типичных механизмов ленивой компиляции.
👍24🔥65💯1
Как контролировать/изучать процесс
Наблюдать за всеми этими процессами частично можно в DevTools во вкладке Perfomance фильтруя процессы загрузки по конкретному JS файлу.

В подробном описании фазы, обязательно указывается откуда взят файл, в каком виде, и каков обьем байт код кешированной версии если взята она.

Наиболее подробный отчет можно получить используя механизм записи трейса работы браузера.


Выводы:
Любой современный проект, который опирается в своей работе на:
1) Большой обьем JS кода
2) работу которого обеспечивает браузер Google Chrome или любая другая технология, которая в качестве своей основы использует его (например Electron)
3) проект многократно используется пользователем повторно
4) производительность

обязан реализовывать стретегию, где сердцем работы проекта выступает Service Worker, гарантирующий 100% предварительную компиляцию ВСЕГо JS кода в байт-код.
17👍13
уличный кот, которого зовут Боб.
если не видели - посмотрите.
єто кино такое.

на фото любезно позирует кот туча.
тоже уличный.
😍4119😎4🔥3🕊3
В жаргоне языка JavaScript существует такой термин как IIFE
( 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
👍16🔥42😁1🐳1🌚1
23-30 по Киеву
Asm для JS программиста: Введение
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.

Знакомимся с инструментами.
Вникаем в то, что нам нужно знать.


https://www.youtube.com/watch?v=MHNKeEo0HOQ
30🔥13❤‍🔥6👍2👌2🐳2🤣2
23-00 по Киеву
Asm для JS программиста: Введение. Часть 2.
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.

Знакомимся с инструментами.
Вникаем в то, что нам нужно знать.


https://www.youtube.com/watch?v=JUDPQLb7QnQ
🔥32👍51🕊1🐳1
Audio
Специально для нас. Тхеме сонг
11
😁37👍7🔥3👎1😍1
Пятница. 10 утра по Киеву.

Asm для JS программиста: Отладка
Знакомимся с отладчиком.
Изучаем поведение кода в живую:
1. Что такое стек.
2. Как адресуется исполняемая команда.
3. Как работают call и ret.
4. Как работают прерывания.
5. Решаем задачу имплантирования кода вируса в тело программы.

https://www.youtube.com/watch?v=gDlpECfuOc0
🔥24👍8❤‍🔥2
Украина - золото.
Обошла Корею и Японию. Ну єто как если бы наши баскетболисты победили Чикаго Булс и Лейкерс.
❤‍🔥32😁4👍3👎2🤯1
2_5292107523577372780.MP4
18.8 MB
7😁1
Знаете ли Вы что?

Коллекция Set или Map не гарантирует Вам уникальность ключа?
То есть существуют ключи которые уже сейчас будут выступать дублями друг друга?

Согласно спецификации конечно, а не в результате коллизии алгоритма построения HashMap-а.

Сейчас существует одно исключение однако никто не гарантирует того, что в будущем этот список не дополнится.

Как Вы думаете что это за исключение?

Отгадка:
-0 +0 и 0

Важно:
+0 и 0 это одно и тоже. Но при этом -0 и +0 не одно и тоже.

И это не баг спецификации. Это прямым образом прописанное в нем поведение. Причем прописано образом, когда предполагается возможность добавления других исключений.
🤯259👌3👀3💔1
Сейчас: 03-35 по Киеву
Смотрим вместе YT: Оптимизация Frontend приложений (23 совета)

Посмотрим в режиме x1.5 Оптимизация Frontend приложений (23 совета) | Оптимизация Web, полный курс 2024 [для новичков]

https://www.youtube.com/watch?v=LIn-vq1y9m0
10👍5