As For JS
Открыть в Telegram
3 192
Подписчики
-324 часа
-287 дней
-6430 день
Архив постов
3 192
23-00 по Киеву
Asm для JS программиста: Введение. Часть 2.
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с инструментами.
Вникаем в то, что нам нужно знать.
https://www.youtube.com/watch?v=JUDPQLb7QnQ
3 192
23-30 по Киеву
Asm для JS программиста: Введение
Используя язык Ассемблера для 8086 архитектуры, напишем простенький вирус.
В процесс чего, получим базовые знания о языке Ассемблера которые помогут нам читать логи V8 на предмет примененных им оптимизаций JS кода.
Знакомимся с инструментами.
Вникаем в то, что нам нужно знать.
https://www.youtube.com/watch?v=MHNKeEo0HOQ
3 192
14-00 по Киеву
Производительность JS: V8 lazy compilation или как Яндекс ногтей набросал.
Познакомимся с тем, как в V8 работает parser JavaScript кода.
Разберемся с тем, как это может влиять на производительность.
Узнаем о том, что такое байт-код, как он кешируется.
А главное о том, как Яндекс ногтей набросал.
https://www.youtube.com/watch?v=fsgT-1KDqpI
3 192
В жаргоне языка JavaScript существует такой термин как IIFE. ( Immediately Invoked Function Expression).
Естественно, что никакого IIFE в JS нет. Есть выражение к которому применяется callable expression.
Например:
(
function() {
console.log('hello world')
}
)();
Упражнение для ума.
Найдите еще 12 способов создание так называемых IIFE
Например
(
function() {
console.log('hello world')
}()
);
То есть еще 11.3 192
04-15 по Киеву.
Смотрим вместе YT: Реализация хранения данных. Стек и куча. Oddball и иммутабельные примитивы
Посмотрим в режиме x1.5 про Stack, Heap, Rock’n’Roll!
Там 20 минут.
https://www.youtube.com/watch?v=0fPH7mhlSGg
3 192
Исключением является ситуации когда, файл, получивший кеш таким образом, будет
подключен как модуль. В этом случае кеш аннулируется и вместо него
создается новый с использованием типичных механизмов ленивой компиляции.
Как контролировать/изучать процесс
Наблюдать за всеми этими процессами частично можно в DevTools во вкладке
Perfomance фильтруя процессы загрузки по конкретному JS файлу. В подробном
описании фазы, обязательно указывается откуда взят файл, в каком виде, и каков
обьем байт код кешированной версии если взята она. Наиболее подробный отчет
можно получить используя механизм записи трейса работы браузера.
3 192
Кеширование байкода в V8 и GoogleChrome.
Кеширование откомпилированного JavaScript кода существует с 2015 года с версии v8 4.2,
в чем можно легко убедиться даже просто посмотрев в папку кеша Google Chrome
где подобный байткод выделен в отдельную папку.
Машинерия отвечающая за критерии подобного кеширования местами настолько
странная что ничего кроме удивления не вызывает.
Ниже чуть упрощенное описание этого процесса, актуальное на июнь 2021 года,
достаточное чтобы знать все необходимое для понимания процесса кеширования байткода в 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% откомпилированную версию взятую из кеша
байт кода.
3 192
Почему дружок да потому
Что я жизнь учу не по учебникам
Просто я работаю просто я работаю
Волшебником волшебником
https://youtu.be/1SgfKzR9bUg?si=k8AjoYyu5FSWY4Gg
3 192
Мне прислали маленький кусочек лекции, от автора - вы не знаете JavaScript.
Послушайте его.
https://youtu.be/OjsrG5eTYPM?si=CLedXE9dYoEljebI
3 192
Все мы (;
знаем что
super()
єто не вызов функции. Для єтого достаточно обратиться к спецификации.
Попробуйте придумать еще, не менее двух доказательств тому, что super не является функцией.
Таких доказательств есть минимум 63 192
23-15 По Киеву
Смотрим вместе YT: Григорий Бизюкин - Продвинутый JS. ШРИ 2024
Если у кого-то есть хоть какие-то дела имеющие маломальский вес важности - настоятельно рекомендую заняться ими и пропустить это видео. Смотреть тут будет практически нечего.
https://www.youtube.com/watch?v=YLvbza4GtiM
3 192
+1
И пол года не прошло, когда удалось получить второй финальный обжиг.
Гавнююшки!!!
Фото делали по сумеркам, потому не видно как они блестят, но все равно.
3 192
Понатыкали в меня всякого.
Врач рассказал 2 анекдота:
1) хорошо зафиксированный больной в анастезии не нуждается
2) я собираюсть житьс вечно - пока получается.
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
