Я просто оставлю это здесь
История одного комита в type script compiller. от 2023 года.
цифры даны инженерами v8
Кому интересно почитать обсуждение
https://issues.chromium.org/issues/42203665
Документ от инженеров V8 про особенности работы let/const с упоминанием того самого комита и цифр.
https://docs.google.com/document/d/1klT7-tQpxtYbwhssRDKfUMEgm-NS3iUeMuApuRgZnAw/edit?tab=t.0
шаг и мат шароземельщикам.
К слову по итогам 23 года, инженеры V8 поделились тем что они сделали за год, где в том числе было сказано
Что и обьясняет изменение цифр в оценке производительности с 10-15% которые я давал два года назад, до 5-10% сейчас.
История одного комита в type script compiller. от 2023 года.
Performance on TypeScript compiler.
Runtime
Using the STR in this issue comment filed by TypeScript, using this TypeScript commit (because it predates their manual var downleveling),
The prototype CL saw an improvement of 2-3% (1.29s - 1.30s parsing to 1.26s - 1.27s).
To compare, manually downlev eling to var sees an improvement of 6% (1.29-1.30s of parsing to 1.22s - 1.23s)
цифры даны инженерами v8
Кому интересно почитать обсуждение
https://issues.chromium.org/issues/42203665
Документ от инженеров V8 про особенности работы let/const с упоминанием того самого комита и цифр.
https://docs.google.com/document/d/1klT7-tQpxtYbwhssRDKfUMEgm-NS3iUeMuApuRgZnAw/edit?tab=t.0
шаг и мат шароземельщикам.
К слову по итогам 23 года, инженеры V8 поделились тем что они сделали за год, где в том числе было сказано
Finally, we also made ES6+ JS code faster by eliding some redundant temporal dead zone checks forlet
andconst
bindings.
Что и обьясняет изменение цифр в оценке производительности с 10-15% которые я давал два года назад, до 5-10% сейчас.
🔥13😁9❤4👍3🕊1
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…
😁24👍12❤8🔥4
Это все еще не все.
Не смотря на то, что тема работы 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;
}
😁9💔8🤯2😎2😍1
Использование 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
🔥30👍9❤3😍2👀2❤🔥1👨💻1
Краткое ИГОГО тезисами:
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…
🔥37👍5😍2
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…
🔥24❤🔥7👍5😁1🤯1👌1👨💻1😎1
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.
Таймкоды:
00:00:00 Введение и анекдот
00:01:41 Обсуждение switch и if
00:03:39 Рекомендации по…
Попытаемся разобраться в разнице между switch и if с точки зрения оптимизаций v8.
Таймкоды:
00:00:00 Введение и анекдот
00:01:41 Обсуждение switch и if
00:03:39 Рекомендации по…
🔥16👍6🤯2👌1👨💻1
Следующую трансляцию сделать О
Anonymous Poll
20%
Обзор решений для try to hack my JavaScript
45%
Обьекты согласно спец-ии и оптимизация работы с ними
23%
Что нибудь в живую покодировать
13%
Я Упырь
Что, согласно официальной спецификации, определяется как анонимная функция
Anonymous Quiz
20%
Функция у которой нет имени
51%
Функция которая не имела имени в момент ее создания
10%
Только стрелочные функции
7%
Функция которая связана с идентификатором
12%
Я упырь
👍8😁3🐳1👀1
Про 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.
👍25👌5
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, которая позволяет копировать результат вычисления выражения в буфер обмена.
При этом, если отформатировать результат некоторым образом…
При этом, если отформатировать результат некоторым образом…
🔥18❤3
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…
🔥54❤2👍2
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 сообщил мне, что я не владею базовым уровней, при этом тяну на средний, но не дотягиваю до продвинутого.
Задачи которые предлагались для…
🤣25🔥7👍3😁1
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 без подглядывания в спецификацию.
Говорят что там много разных вопросов, которые меняются от теста к тесту.
Пройдем тест, посмотрим верные ответы и попытаемся разобраться почему ответ именно такой.
Таймкоды:
00:00:00…
Говорят что там много разных вопросов, которые меняются от теста к тесту.
Пройдем тест, посмотрим верные ответы и попытаемся разобраться почему ответ именно такой.
Таймкоды:
00:00:00…
🔥16😁4🤣3❤1
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 и…
🔥14❤3👍2
Не зря я твой дом труба шатал
Мне показали уже три видео от сторонних авторов, которые вопят о производительности 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 – удивительный…
😁18👀3
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
- YouTube
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
❤13🔥4
Хочу поделиться радостью.
Один из наших соратников, обнаружил проблему в v8 с отслеживанием elements-transition, которую на официалном уровне признали багом и пообещали устранить.
Вославим ВанДама!
Один из наших соратников, обнаружил проблему в v8 с отслеживанием elements-transition, которую на официалном уровне признали багом и пообещали устранить.
Вославим ВанДама!
🔥79👍8❤🔥5🤣3👌2😎2