Что чувствует сеньор, когда Мурыч восхищается над его кодом?…
@narek72815 күн бұрын
Great video
@admToha5 күн бұрын
Салют, Мурыч. Небольшой оффтоп. Недавно тестил ваш код со сравнением производительности var с let и const из видео о мифах JS. Так вот, разницы не обнаружил вообще. Абсолютно тоже время. Может быть разработчики V8 уже пофиксили этот момент? Несколько лет прошло уже. Или возможно здесь имеет место быть аппаратная зависимость? Тестировал на Ryzen 7 1700, Windows 10 и Ubuntu. Немного поэкспериментировав с кодом, добился таки снижения производительности использования let и const по сравнению с var почти в 3 раза. Для этого добавил внутрь циклов объявление функций, которые также в собственном теле объявляли переменные. Вобщем, хотел поделиться. Вот.
@demimurych15 күн бұрын
Проверяйте свои тесты. Это принципиально невозможно по причине того, что код для let и const внутри v8 это тот же код что и для var. Только в случае let и const выполняется дополнительная проверка. То есть в лучшем случае вы могли получить равный результат. Но никак не обратный. Не может один и тот же код, работать быстрее в случае если его сранивают с ним же в который добавлена доп нагрузка. Исключение, если Вы приводили тесты в Global Enviroment. Где на адентификаторах обьявленных через variable statement лежит дополнительная нагрузка в виде мапинга в Global Object. В отличии от let и const где подобной нагрузки нет. Это если мы говорим только про RunTime Semantics. А есть еще нагрузка в Static Semantics, где при холодном старте var создает нулевые издержки, в то же время как let и const создают значимые. Я посмотрел свои старые тесты. Перепроверил. Все ровно так же как было раньше. Или напишите мне лично. Посмотрим вместе что может быть не так.
@admToha5 күн бұрын
@@demimurych1 Проверил. Специально только что тщательно переписал ваш код из видео "ТОП 5 JavaScript Мифов, или Вы не знаете JavaScript." Не вносил ни каких своих правок. Запускал в ноде. Результат обескураживающий =/ . Разница есть и она существенна, только вот теперь в противоположную сторону. То есть let значительно быстрее оказался. Результаты let: 814, 814, 830, 818 Результаты var: 1430, 1426, 1429, 1427 На всякий случай напишу сюда код. for_murych_let.js: const {performance} = require('node:perf_hooks'); let myConstant = 8; let result = 0; function murychLet(){ let i = 0; for(i = 0; i < 100000000; i++){ result += i + myConstant; } } const startPerf = performance.now(); murychLet(); const endPerf = performance.now(); console.log(result, (endPerf - startPerf)); for_murych_var.js: const {performance} = require('node:perf_hooks'); var myConstant = 8; var result = 0; function murychLet(){ var i = 0; for(i = 0; i < 100000000; i++){ result += i + myConstant; } } const startPerf = performance.now(); murychLet(); const endPerf = performance.now(); console.log(result, (endPerf - startPerf)); Вероятно я где-то ошибся. Вопрос только: где?
@AsForJS5 күн бұрын
Вы это делаете в глобальном окружении. Засуньте код в функцию и снова проверьте. Раньше в V8 была оптимизация для работы var в Global которая его сравнивала в производительности с let и const. Сейчас она не работает. Я на помню, что в случае Global Enviroment обьявленный идентификатор посреством var statement обязан быть так же связан с аналогичным property в Global Object. Что создает массу дополнительной работы. Потому для чистого теста нужно проводит это внутри функции. Где условия использования var и let равны.
@admToha5 күн бұрын
@@AsForJS Благодарю за ответы. Не знал такое про глобальное окружение. Засунул код в функцию. Теперь результаты получились одинаковыми. Для let: 818, 818, 819, 818 Для var: 818, 818, 815, 820 На всякий случай код: for_murych_let.js: const {performance} = require('node:perf_hooks'); function foo(){ let myConstant = 8; let result = 0; function murychLet(){ let i = 0; for(i = 0; i < 100000000; i++){ result += i + myConstant; } } const startPerf = performance.now(); murychLet(); const endPerf = performance.now(); console.log(result, (endPerf - startPerf)); } foo();
@admToha5 күн бұрын
@@AsForJS А если модифицировать ваш код, как я писал выше, то есть добавить внутрь цикла функцию (с её объявлением и работой) появляется явная разница в производительности, где var заметно быстрее. Результаты с let: 1441, 1438, 1448, 1458 Результаты с var: 1052, 1059, 1049, 1044 Модифицированный код for_murych_let.js: const {performance} = require('node:perf_hooks'); function foo(){ let myConstant = 8; let result = 0; function murychLet(){ let i = 0; for(i = 0; i < 100000000; i++){ result += i + myConstant; let my_foo = arg => { arg += i; } my_foo(result); } } const startPerf = performance.now(); murychLet(); const endPerf = performance.now(); console.log(result, (endPerf - startPerf)); } foo(); for_murych_var.js: const {performance} = require('node:perf_hooks'); function foo(){ var myConstant = 8; var result = 0; function murychLet(){ var i = 0; for(i = 0; i < 100000000; i++){ result += i + myConstant; var my_foo = arg => { arg += i; } my_foo(result); } } const startPerf = performance.now(); murychLet(); const endPerf = performance.now(); console.log(result, (endPerf - startPerf)); } foo(); У меня таким макаром, путём экспериментов с функциями внутри циклов, получалось почти в 3 раза выполнение кода замедлить у примера с let относительно var.
@ДаниилГершзон6 күн бұрын
как я обрадовался когда отсутствие return меня смутило а потом об этом мурыч сказал)))
@ЖеняЕгоров-т7ш6 күн бұрын
это $mol, да?
@EvgenijGarmash6 күн бұрын
Ладно программисты, но, когда подобные разговоры слышу от врачей...
@alexanderpoco74116 күн бұрын
Знаєте чому коти полюбляють ховатися у всіляких коробочках та мало примітних закутках? Бо коли вони сплять, вони гуляють по астралу. Тому коли вони сплять, їх не бажано турбувати 😊
@kirylbehansky13156 күн бұрын
название фреймворка(lom.js) убило в хорошем смысле)
@admToha5 күн бұрын
Это название отдельного файла. Впрочем название фреймворка/семейства фреймворков тоже доставляет - $mol (моль).
@rookhive6 күн бұрын
На 1:09:10 и 1:13:06 автор очевидно оговорился на несколько порядков, никаких 20-30 миллисекунд обращение к идентификатору занимать не может)
@DeadRabbitCanDance6 күн бұрын
В попытке эффектно что-то сказать - не беда и переврать и перепутать. Тут расчет на 1 тысячу или 10 тысяч операций. Да весь ролик - сплошное недоразумение. pop равнозначен вычитанию 1 из length... ну как бы слушать такого мастера нужно осторожно.
@AsForJS5 күн бұрын
Речь шла не про обращение к идентификатору, а про накладные расходы при холодном старте выполнения каждой инструкции в байт коде. Можете это легко проверить сами. У Вас в байт коде, каждая строка этого кода, будет сьедать накладных расходов много больше чем сама логика ее работы.
@AsForJS5 күн бұрын
Нет. Я говорил именно о том, что каждая строка байт кода, требует около 20мс времени, для ее интерпретации и исполнении в случае холодного старта.
@DeadRabbitCanDance5 күн бұрын
@@AsForJS Логично. Но при обсуждении про холодный старт Вы не говорили, просто было сказано про громадную разницу в обращении через параметр параметра объекта и параметр объекта. (this.data.length и cached_data.length) Надо тогда ещё учесть, что компьютер нужно включить, дождаться его загрузки, загрузить сам скрипт из сети и только тогда приступить к его интерпретации - итого затраты на холодный старт могут вырасти до получаса! и это если всё хорошо пойдет, а то и поболее!
@rookhive5 күн бұрын
@@AsForJS Спасибо за ответ, но мы точно говорим про миллисекунды, а не микросекунды? Искренне пытаюсь понять, откуда такой порядок цифр на интерпретацию одной инструкции байткода
@sergii-rd6mq5 күн бұрын
Можна розібрати Angular?
@AsForJS5 күн бұрын
Я лише можу розібрати якусь маленьку частину його кода. Бо взагалі я не ореєнтусь в ангуляр.
@hurdyga3 күн бұрын
Неможливо спочатку поїсти, а потім зробити стрім, щоб не плямкати в мікрофон
@JJohnson-fy9uz6 күн бұрын
Вот только автор этого фреймворка является профессионалом с большим стажем в бигтехе и как разработчик не то что на голову, а на корпус выше Мурыча и подобных ему трепачей 😁
@RTFMurych6 күн бұрын
Трепач - это когда профессионализм стажем определяется… Это наглядно разжёвано здесь: «⎡razbor:13⎦ Разбор видео: Выводим Мурыча на чистую воду от Дмитрия Карловского». А про величину корпуса этого автора там даже отдельная притча есть!
@AsForJS5 күн бұрын
Тот разработчки о котором Вы говорите, учился у меня 5 лет назад оптимизациям в V8. О чем есть подтверждение как в почте, так и в gist.
@kulbaev_zh5 күн бұрын
все понятно, что ничего не понятно😅
@admToha5 күн бұрын
Вроде наоборот автор максимально разжёвывает, повторяя те же мысли под разными "углами", что максимально доходчиво ИМХО.