4-15 по Киеву.
Дополнение к предыдущему стриму, с уточненным экспериментом согласно пожеланиям сомневающихся.
https://www.youtube.com/watch?v=_v6OyPyqt9U
Дополнение к предыдущему стриму, с уточненным экспериментом согласно пожеланиям сомневающихся.
https://www.youtube.com/watch?v=_v6OyPyqt9U
YouTube
⎡razbor:15.1⎦ Дополнение к разбору видео: Let и Const диссиденты в языке JavaScript
Это небольшое дополнение, к оригинальному видео https://www.youtube.com/watch?v=t1JY_MMPyhU
в котором я провожу еще один дополнительный тест с учетом пожеланий пользователей.
Ссылка на оригинал видео:
https://www.youtube.com/watch?v=D91Ge0EPSVk
Тайм…
в котором я провожу еще один дополнительный тест с учетом пожеланий пользователей.
Ссылка на оригинал видео:
https://www.youtube.com/watch?v=D91Ge0EPSVk
Тайм…
18-00 По Киеву.
Трансляция закончена. Длина 3 с половиной минуты.
Закончилась эпоха.
https://www.youtube.com/watch?v=8G0qxh4HabA
Трансляция закончена. Длина 3 с половиной минуты.
Закончилась эпоха.
https://www.youtube.com/watch?v=8G0qxh4HabA
YouTube
Жирная точка в спорах о var let и const
В этом видео, я не буду ничего доказывать показывая код, бенчмарки,
вместо этого я приведу ссылки на:
1. Обсуждается изменения в TypeScript compiler, которые предполагают downgrade к var в связи с performance issue
https://github.com/microsoft/TypeSc…
вместо этого я приведу ссылки на:
1. Обсуждается изменения в TypeScript compiler, которые предполагают downgrade к var в связи с performance issue
https://github.com/microsoft/TypeSc…
Это все еще не все.
Не смотря на то, что тема работы var/let/const для меня закрыта, и теперь за меня будут говорить инженеры v8, я анонсирую новый ахуху кейс при использовании let. Который всех снова поставит на рога.
Я сам его только что случайно открыл. Но я Вам его не покажу, потому, что у вас документов нету.
Все, в том числе и я, как остолопы тестировали издержки связанные с ThrowReferenceErrorIfHole, и никто не додумался посмотреть на то, как этот Hole инициализируется. А там, издержек в два раза больше
Кому нечем заняться - попробуйте угадать где проблема.
Вот код для теста.
Не смотря на то, что тема работы var/let/const для меня закрыта, и теперь за меня будут говорить инженеры v8, я анонсирую новый ахуху кейс при использовании let. Который всех снова поставит на рога.
Я сам его только что случайно открыл. Но я Вам его не покажу, потому, что у вас документов нету.
Все, в том числе и я, как остолопы тестировали издержки связанные с ThrowReferenceErrorIfHole, и никто не додумался посмотреть на то, как этот Hole инициализируется. А там, издержек в два раза больше
Кому нечем заняться - попробуйте угадать где проблема.
Вот код для теста.
function doAdd1( a, b ) {
var theThing = 1;
let theSummator = 0;
function doSum() {
for ( var i = 0; i < 10000; i++ ) {
theSummator += theThing + i;
}
}
doSum();
return theSummator;
}
Использование var/let/const в примерах
Когда let/const не создаст никаких проблем с производительностью
let/const не создаст вам никаких проблем при условии, если вы их используется СТРОГО в рамках одного функционального окружения:
Оба идентификатора(
Производительность этого кода будет на 100% идентична случаю, если бы мы вместо
Когда let/const начнут создавать проблемы с производительностью
Проблемы возникают тогда, когда объявленный идентификатор начнете использовать за пределами того функционального окружения в котором был объявление.
Оба идентификатора (
В этом случае Вы получаете дополнительные издержки внтури функции
Глубина вложенности не важна.
Решение проблем производительности let/const через var
Решением проблем let/const, для случаев использования идентификаторов в окружениях отличных от тех где этот идентификатор был создан, является замена let/const на var.
Одно исключение для var
Замена let на var в случае, если идентификатор декларируется в глобальном окружении, напротив приведет к еще большим издержкам.
То есть код вида:
Будет работать медленнее чем:
Происходит это потому, что спецификация, для случая глобального окружения и variable statement, обладает своим особым поведением, которое создает дополнительные издержки: подобный идентификатор должен создать Property в Global Object. Что требует дополнительных издержек от Agent-а выполняешь го JS код.
Чего не происходит в случае let/const. Так как для них подобное поведение не определено.
Когда let/const не создаст никаких проблем с производительностью
let/const не создаст вам никаких проблем при условии, если вы их используется СТРОГО в рамках одного функционального окружения:
function doExampleWhereAllFineWithLet() {
function doCalculateCirlceArea( theRadius ) {
const PI = 3.14;
let thePower = 2;
return PI * theRadius ** thePower;
}
doCalculateCirlceArea( 10 );
}
doExampleWhereAllFineWithLet();
Оба идентификатора(
thePI
, thePower
), используются только в том функциональном окружении, в котором они заявлены. Производительность этого кода будет на 100% идентична случаю, если бы мы вместо
let/const
использовали var
.Когда let/const начнут создавать проблемы с производительностью
Проблемы возникают тогда, когда объявленный идентификатор начнете использовать за пределами того функционального окружения в котором был объявление.
function doExampleWhereWeHaveProblemsWithLet() {
const PI = 3.14;
let thePower = 2;
function doCalculateCirlceArea( theRadius ) {
return PI * theRadius ** thePower;
}
doCalculateCirlceArea( 11 );
}
doExampleWhereWeHaveProblemsWithLet();
Оба идентификатора (
thePI, thePower
) используются в другой функции (функциональное окружение отличается от того, где они были объявлены)В этом случае Вы получаете дополнительные издержки внтури функции
doExampleWhereWeHaveProblemsWithLet
Глубина вложенности не важна.
Решение проблем производительности let/const через var
Решением проблем let/const, для случаев использования идентификаторов в окружениях отличных от тех где этот идентификатор был создан, является замена let/const на var.
function doExampleWhereWeResolveThroughVar() {
var PI = 3.14;
var thePower = 2;
function doCalculateCirlceArea( theRadius ) {
return PI * theRadius ** thePower;
}
doCalculateCirlceArea( 11 );
}
doExampleWhereWeResolveThroughVar();
Одно исключение для var
Замена let на var в случае, если идентификатор декларируется в глобальном окружении, напротив приведет к еще большим издержкам.
То есть код вида:
var PI = 3.14;
var thePower = 2;
function doCalculateCirlceArea( theRadius ) {
return PI * theRadius ** thePower;
}
doCalculateCirlceArea( 7 );
Будет работать медленнее чем:
let PI = 3.14;
let thePower = 2;
function doCalculateCirlceArea( theRadius ) {
return PI * theRadius ** thePower;
}
doCalculateCirlceArea( 8 );
Происходит это потому, что спецификация, для случая глобального окружения и variable statement, обладает своим особым поведением, которое создает дополнительные издержки: подобный идентификатор должен создать Property в Global Object. Что требует дополнительных издержек от Agent-а выполняешь го JS код.
Чего не происходит в случае let/const. Так как для них подобное поведение не определено.
var theVarThing = 1;
console.log( globalThis.theVarThing ); // 1
console.log( theVarThing ); // 1
let theLetThing = 2;
console.log( globalThis.theLetThing ); // undefined
console.log( theLetThing ); // 2
Краткое ИГОГО тезисами:
1. Современный V8 вынужден тратить больше ресурсов на исполнения кода для let/const declaration.
2. Возникновение этих издержек СТРОГО связано с использованием идентификаторов, заявленных при помощи let/const в функциональном окружении, которое отличается от того где они используются.
3. Окружение создаваемое Block Statement (Declarative Environment) не создает лишних издержек. Все сказанное касается ТОЛЬКО функционального окружения.
4. let/const declaration не имеет никаких отличий от var в том случае, если заявленный идентификатор используется ТОЛЬКО в том же функциональном окружении где и был объявлен идентификатор.
5. var подобных издержек не имеет. То есть производительность let/const всегда либо равна variable statement либо хуже.
6. Для var существует одно исключение связанное с объявлением идентификаторов в глобальном окружении. Где var покажет худшую в сравнении с let/const производительность.
7. Не забывайте, что function declaration согласно спецификации, выполняет те же шаги что и variable statement. Из чего следует, что если вы используете function declaration в Global Environment - вы создаете ненужную нагрузку на Agent исполняющий ваш код.
8. На текущий момент (начало 2024), let/const медленнее var на 7% +-2;
На конец 2022 года, эта цифра была на уровне 15% +-5
9. Существуют еще дополнительные издержки возникающие на стадии Static Semantics для анализа кода с Let и Const. Все что описано ваше, касается только RunTime Semantics
Дополнительные детали в документе от инженеров V8
1. Современный V8 вынужден тратить больше ресурсов на исполнения кода для let/const declaration.
2. Возникновение этих издержек СТРОГО связано с использованием идентификаторов, заявленных при помощи let/const в функциональном окружении, которое отличается от того где они используются.
3. Окружение создаваемое Block Statement (Declarative Environment) не создает лишних издержек. Все сказанное касается ТОЛЬКО функционального окружения.
4. let/const declaration не имеет никаких отличий от var в том случае, если заявленный идентификатор используется ТОЛЬКО в том же функциональном окружении где и был объявлен идентификатор.
5. var подобных издержек не имеет. То есть производительность let/const всегда либо равна variable statement либо хуже.
6. Для var существует одно исключение связанное с объявлением идентификаторов в глобальном окружении. Где var покажет худшую в сравнении с let/const производительность.
7. Не забывайте, что function declaration согласно спецификации, выполняет те же шаги что и variable statement. Из чего следует, что если вы используете function declaration в Global Environment - вы создаете ненужную нагрузку на Agent исполняющий ваш код.
8. На текущий момент (начало 2024), let/const медленнее var на 7% +-2;
На конец 2022 года, эта цифра была на уровне 15% +-5
9. Существуют еще дополнительные издержки возникающие на стадии Static Semantics для анализа кода с Let и Const. Все что описано ваше, касается только RunTime Semantics
Дополнительные детали в документе от инженеров V8
Google Docs
Ignition TDZ check elision
Ignition TDZ check elision Attention - this doc is public and shared with the world! Contact: syg@ Date: LGTMs needed Name Write (not) LGTM in this row verwaest@ lgtm leszeks@ lgtm Someone else familiar with TDZ? ... Abstract Ignition can elide additional…
19-30 По Киеву
Заключительная часть введения в язык ассемблера для JS программиста.
Пишем вирус.
https://www.youtube.com/watch?v=nCM2-bsdnKI
Заключительная часть введения в язык ассемблера для JS программиста.
Пишем вирус.
https://www.youtube.com/watch?v=nCM2-bsdnKI
YouTube
Asm для JS программиста: Пишем вирус
Заключительная часть введение в Assembler для JavaScript программиста, где мы напишем полноценный функционирующий вирус.
Таймкоды:
Будут после
AsForJs новости в Telegram: https://t.me/AsForJavaScript
AsForJs Talks в Telegram: https://t.me/AsForJsTalks…
Таймкоды:
Будут после
AsForJs новости в Telegram: https://t.me/AsForJavaScript
AsForJs Talks в Telegram: https://t.me/AsForJsTalks…
06-30 По Киеву
Почему Switch это синтаксический сахар к IF.
Особенности оптимизаций.
Множественные return
https://www.youtube.com/watch?v=qW3iZCv7vSA
Почему Switch это синтаксический сахар к IF.
Особенности оптимизаций.
Множественные return
https://www.youtube.com/watch?v=qW3iZCv7vSA
YouTube
Производительность JS: Switch против IF
Убедимся на примерах в том, что Switch является синтаксическим сахаром к IF.
Попытаемся разобраться в разнице между switch и if с точки зрения оптимизаций v8.
Таймкоды:
Будут после
AsForJs новости в Telegram: https://t.me/AsForJavaScript
AsForJs Talks…
Попытаемся разобраться в разнице между switch и if с точки зрения оптимизаций v8.
Таймкоды:
Будут после
AsForJs новости в Telegram: https://t.me/AsForJavaScript
AsForJs Talks…
Следующую трансляцию сделать О
Anonymous Poll
20%
Обзор решений для try to hack my JavaScript
45%
Обьекты согласно спец-ии и оптимизация работы с ними
23%
Что нибудь в живую покодировать
13%
Я Упырь
Что, согласно официальной спецификации, определяется как анонимная функция
Anonymous Quiz
20%
Функция у которой нет имени
51%
Функция которая не имела имени в момент ее создания
10%
Только стрелочные функции
7%
Функция которая связана с идентификатором
12%
Я упырь
Про void
Современный V8, игнорирует спецификацию void как таковую.
И преобразовывает любой код с void к такому, который исполняется без него, с полсдещуюей вставкой undefined
Например код
На уровне V8, код будет приведен к следующему байт коду:
Эквивалентом этому коду на языке JavaScript будет:
Вместо ИГОГО
Современный V8 игнорирует void как самостоятельный оператор, и заменяет его альтернативным взаимозаменяемым кодом.
То есть с точки зрения проивзодительности, в отличии от махровых времен, сейчас никаких дополнительных расходов на использования void нет.
Пишите сколько влезет. V8 за вас заменит его на undefined.
Современный V8, игнорирует спецификацию void как таковую.
И преобразовывает любой код с void к такому, который исполняется без него, с полсдещуюей вставкой undefined
Например код
function doThing() {};
void doThing();
На уровне V8, код будет приведен к следующему байт коду:
CallUndefinedReceiver0 r0, [0]
LdaUndefined
Эквивалентом этому коду на языке JavaScript будет:
function doThing() {};
(
doThing()
, undefined
)
Вместо ИГОГО
Современный V8 игнорирует void как самостоятельный оператор, и заменяет его альтернативным взаимозаменяемым кодом.
То есть с точки зрения проивзодительности, в отличии от махровых времен, сейчас никаких дополнительных расходов на использования void нет.
Пишите сколько влезет. V8 за вас заменит его на undefined.
3-15 по Киеву
Tips and Tricks: Google Dev Tools и copy
Закончено. длина 12 минут. Смотрите тайм коды
https://www.youtube.com/watch?v=pvfM_oWFs-o
Tips and Tricks: Google Dev Tools и copy
Закончено. длина 12 минут. Смотрите тайм коды
https://www.youtube.com/watch?v=pvfM_oWFs-o
YouTube
Tips and Tricks: Google Developer Tools и copy
В Google Dev Tools есть ряд особенностей, которые очень удобно использовать вместе с JavaScript. Например команда copy, которая позволяет копировать результат вычисления выражения в буфер обмена.
При этом, если отформатировать результат некоторым образом…
При этом, если отформатировать результат некоторым образом…
19-00 По Киеву
Что такое Object согласно ECMAScript спецификации.
Приходите - увидите как на обьекты можно смотреть совсем с другой стороны.
https://www.youtube.com/watch?v=6FqwosOqJCs
Что такое Object согласно ECMAScript спецификации.
Приходите - увидите как на обьекты можно смотреть совсем с другой стороны.
https://www.youtube.com/watch?v=6FqwosOqJCs
YouTube
Что такое Object в JavaScript согласно официальной спецификации.
В этом видео мы разберем как устроены обьекты в JavaScript согласно официальной спецификации:
Что такое Ordinary Object и Exotic Object.
Откуда берутся прототипы.
Как работает Proxy
и т.д. и т.п.
Ссылка на презентацию:
https://docs.google.com/presentation/d/19zFj…
Что такое Ordinary Object и Exotic Object.
Откуда берутся прототипы.
Как работает Proxy
и т.д. и т.п.
Ссылка на презентацию:
https://docs.google.com/presentation/d/19zFj…
15-00 По Киеву
Я был в бешенстве от теста на Head Hunter, что заставило меня поковырять их код поглубже.
В результате выше нас только звезды.
Посмотрим до какого разгильдяйства доходят разработчики. И как этим можно воспользоваться в своих целях.
https://www.youtube.com/watch?v=CxD9xy_NmFQ
Я был в бешенстве от теста на Head Hunter, что заставило меня поковырять их код поглубже.
В результате выше нас только звезды.
Посмотрим до какого разгильдяйства доходят разработчики. И как этим можно воспользоваться в своих целях.
https://www.youtube.com/watch?v=CxD9xy_NmFQ
YouTube
Ломаем тест на Head Hunter
В предыдущей трансляции, я пытался протий три теста на Head Hunter, не предмет того как я знаю JavaScript.
Head Hunter сообщил мне, что я не владею базовым уровней, при этом тяну на средний, но не дотягиваю до продвинутого.
Задачи которые предлагались для…
Head Hunter сообщил мне, что я не владею базовым уровней, при этом тяну на средний, но не дотягиваю до продвинутого.
Задачи которые предлагались для…
00:30 по Киеву
По просьбам папищиков
Многократное прохождение теста javascript.ru без подглядывания в спецификацию
С разоблачением
https://www.youtube.com/watch?v=6H0e4c-SPgo
По просьбам папищиков
Многократное прохождение теста javascript.ru без подглядывания в спецификацию
С разоблачением
https://www.youtube.com/watch?v=6H0e4c-SPgo
YouTube
Проходим тест javascript.ru без подглядывания в спецификацию
Меня попросили пройти тесты javascript.ru без подглядывания в спецификацию.
Говорят что там много разных вопросов, которые меняются от теста к тесту.
Пройдем тест, посмотрим верные ответы и попытаемся разобраться почему ответ именно такой.
Таймкоды:
__будут…
Говорят что там много разных вопросов, которые меняются от теста к тесту.
Пройдем тест, посмотрим верные ответы и попытаемся разобраться почему ответ именно такой.
Таймкоды:
__будут…
19-00 по Киеву
Реализация обьектов в V8.
Расхождения со спецификацией.
Производительность или как не мешать интерпретатору при работе с обьектами.
https://www.youtube.com/watch?v=KMrVKtVrJ3Q
Реализация обьектов в V8.
Расхождения со спецификацией.
Производительность или как не мешать интерпретатору при работе с обьектами.
https://www.youtube.com/watch?v=KMrVKtVrJ3Q
YouTube
Производительность JS: Обьекты в V8
Разберемся как реализован Object в V8.
Сравним со спецификацией.
Определим, что нужно делать, для того, чтобы работать с объектами с максимальной производительностью.
Узнаем что такое hidden classes-s, inline caching, формы представления обьекта в V8 и…
Сравним со спецификацией.
Определим, что нужно делать, для того, чтобы работать с объектами с максимальной производительностью.
Узнаем что такое hidden classes-s, inline caching, формы представления обьекта в V8 и…
Не зря я твой дом труба шатал
Мне показали уже три видео от сторонних авторов, которые вопят о производительности var/let/const
Проблема только в том, что обоснование которое приводится в видео, заставляет жопу оволосеть, а потом оволосение шевелиться.
Вот пример видео.
Какие ошибки в тесте автора вы видите?
https://youtu.be/gUi5_WVsPFQ
Мне показали уже три видео от сторонних авторов, которые вопят о производительности var/let/const
Проблема только в том, что обоснование которое приводится в видео, заставляет жопу оволосеть, а потом оволосение шевелиться.
Вот пример видео.
Какие ошибки в тесте автора вы видите?
https://youtu.be/gUi5_WVsPFQ
YouTube
Javascript становится медленным языком программирования
Языки программирования становятся лучше и быстрее, но это не про Javascript.
Таймкоды:
00:00 Начало
00:36 Тесты производительности на javascript
00:45 var быстрее, чем const/let
02:17 for или foreach
02:58 Прототипы или Классы
04:02 javascript – удивительный…
Таймкоды:
00:00 Начало
00:36 Тесты производительности на javascript
00:45 var быстрее, чем const/let
02:17 for или foreach
02:58 Прототипы или Классы
04:02 javascript – удивительный…
19-00 по Киеву
Разбор решений для задачи: Try To Hack My JavaScript - readyState
https://www.youtube.com/live/dsrPYivNgXc
Разбор решений для задачи: Try To Hack My JavaScript - readyState
https://www.youtube.com/live/dsrPYivNgXc
YouTube
Try to hack My JavaScript: Решения для readyState
Разберем решения для задачи.
Ссылка на задачу:
https://murych.com/asforjs/tthmjs/01/
Таймкоды:
_будут после_
AsForJs новости в Telegram: https://t.me/AsForJavaScript
AsForJs Talks в Telegram: https://t.me/AsForJsTalks
*Поддержать маленького бородатого…
Ссылка на задачу:
https://murych.com/asforjs/tthmjs/01/
Таймкоды:
_будут после_
AsForJs новости в Telegram: https://t.me/AsForJavaScript
AsForJs Talks в Telegram: https://t.me/AsForJsTalks
*Поддержать маленького бородатого…