Использование 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
🔥16😁4🤣3❤1
19-00 по Киеву
Реализация обьектов в V8.
Расхождения со спецификацией.
Производительность или как не мешать интерпретатору при работе с обьектами.
https://www.youtube.com/watch?v=KMrVKtVrJ3Q
Реализация обьектов в V8.
Расхождения со спецификацией.
Производительность или как не мешать интерпретатору при работе с обьектами.
https://www.youtube.com/watch?v=KMrVKtVrJ3Q
🔥14❤3👍2
Не зря я твой дом труба шатал
Мне показали уже три видео от сторонних авторов, которые вопят о производительности var/let/const
Проблема только в том, что обоснование которое приводится в видео, заставляет жопу оволосеть, а потом оволосение шевелиться.
Вот пример видео.
Какие ошибки в тесте автора вы видите?
https://youtu.be/gUi5_WVsPFQ
Мне показали уже три видео от сторонних авторов, которые вопят о производительности var/let/const
Проблема только в том, что обоснование которое приводится в видео, заставляет жопу оволосеть, а потом оволосение шевелиться.
Вот пример видео.
Какие ошибки в тесте автора вы видите?
https://youtu.be/gUi5_WVsPFQ
😁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
Повод поломать мозги над тем, почему null єто Primitive Value которое связано с Object у которого нулевая/неопределенная структура.
Вспомните все что Вы слышали - про ошибку из за которой null это Object, прочие рассуждения...
И задайте себе вопрос - какой единственный тип мы можем использовать в случае определения прототипа?
А потом вспомните, что Вы можете передать в
Вспомните все что Вы слышали - про ошибку из за которой null это Object, прочие рассуждения...
И задайте себе вопрос - какой единственный тип мы можем использовать в случае определения прототипа?
А потом вспомните, что Вы можете передать в
Object.setPrototypeOf( {}, {} ); // Ok
Object.setPrototypeOf( {}, null ); // Ok
Object.setPrototypeOf( {}, undefined ); // throw
Object.setPrototypeOf( {}, 'aaa' ); // throw
// etc...
🔥9❤1👍1
6-30 по Киеву.
Для тех кому нечего делать, новая задача из цикла: try to hack my JavaScript.
Задача найти магическое слово, спрятанное в одной из функций.
Вопрос не в том, чтобы сообщить слово, но в том, чтобы рассказать - КАК его удалось найти.
https://www.youtube.com/watch?v=FeLs8aJF2wk
Для тех кому нечего делать, новая задача из цикла: try to hack my JavaScript.
Задача найти магическое слово, спрятанное в одной из функций.
Вопрос не в том, чтобы сообщить слово, но в том, чтобы рассказать - КАК его удалось найти.
https://www.youtube.com/watch?v=FeLs8aJF2wk
YouTube
Try to hack My JavaScript: Найти Magic Word
Следующая задача из цикла, где для решения важно знать как работает язык, среда и проявить сообразительность.
Задача заключается в том, чтобы найти Magic Word, который спрятан в комментарии к функции.
Респект и уважуху вызывают те решения, где объясняется…
Задача заключается в том, чтобы найти Magic Word, который спрятан в комментарии к функции.
Респект и уважуху вызывают те решения, где объясняется…
🔥15
19-00 по Киеву.
Разберемся в деталях производительности JS обьектов на примерах.
https://www.youtube.com/watch?v=NOFRVCT2Xx0
Разберемся в деталях производительности JS обьектов на примерах.
https://www.youtube.com/watch?v=NOFRVCT2Xx0
YouTube
Производительность V8 объектов в примерах
Осваиваем базовые приемы отслеживания проблем с производительностью нашего кода.
Разбираемся на примерах, какой JS помогает интерпретатору генерировать производительный код, а какой заставляет его начинать всю работу сначала.
Минимум слов - максимум примеров.…
Разбираемся на примерах, какой JS помогает интерпретатору генерировать производительный код, а какой заставляет его начинать всю работу сначала.
Минимум слов - максимум примеров.…
🔥21👍3❤1