⎡razbor:14⎦ Разбор кода: одного эффективного фреймворка

  Рет қаралды 5,605

As For JS ...

As For JS ...

Күн бұрын

Пікірлер: 54
@alexms8508
@alexms8508 5 күн бұрын
Мурыч спасибо что живой)
@RTFMurych
@RTFMurych 6 күн бұрын
Что чувствует сеньор, когда Мурыч восхищается над его кодом?…
@narek7281
@narek7281 5 күн бұрын
Great video
@admToha
@admToha 5 күн бұрын
Салют, Мурыч. Небольшой оффтоп. Недавно тестил ваш код со сравнением производительности var с let и const из видео о мифах JS. Так вот, разницы не обнаружил вообще. Абсолютно тоже время. Может быть разработчики V8 уже пофиксили этот момент? Несколько лет прошло уже. Или возможно здесь имеет место быть аппаратная зависимость? Тестировал на Ryzen 7 1700, Windows 10 и Ubuntu. Немного поэкспериментировав с кодом, добился таки снижения производительности использования let и const по сравнению с var почти в 3 раза. Для этого добавил внутрь циклов объявление функций, которые также в собственном теле объявляли переменные. Вобщем, хотел поделиться. Вот.
@demimurych1
@demimurych1 5 күн бұрын
Проверяйте свои тесты. Это принципиально невозможно по причине того, что код для let и const внутри v8 это тот же код что и для var. Только в случае let и const выполняется дополнительная проверка. То есть в лучшем случае вы могли получить равный результат. Но никак не обратный. Не может один и тот же код, работать быстрее в случае если его сранивают с ним же в который добавлена доп нагрузка. Исключение, если Вы приводили тесты в Global Enviroment. Где на адентификаторах обьявленных через variable statement лежит дополнительная нагрузка в виде мапинга в Global Object. В отличии от let и const где подобной нагрузки нет. Это если мы говорим только про RunTime Semantics. А есть еще нагрузка в Static Semantics, где при холодном старте var создает нулевые издержки, в то же время как let и const создают значимые. Я посмотрел свои старые тесты. Перепроверил. Все ровно так же как было раньше. Или напишите мне лично. Посмотрим вместе что может быть не так.
@admToha
@admToha 5 күн бұрын
​@@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)); Вероятно я где-то ошибся. Вопрос только: где?
@AsForJS
@AsForJS 5 күн бұрын
Вы это делаете в глобальном окружении. Засуньте код в функцию и снова проверьте. Раньше в V8 была оптимизация для работы var в Global которая его сравнивала в производительности с let и const. Сейчас она не работает. Я на помню, что в случае Global Enviroment обьявленный идентификатор посреством var statement обязан быть так же связан с аналогичным property в Global Object. Что создает массу дополнительной работы. Потому для чистого теста нужно проводит это внутри функции. Где условия использования var и let равны.
@admToha
@admToha 5 күн бұрын
@@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();
@admToha
@admToha 5 күн бұрын
​@@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ш
@ЖеняЕгоров-т7ш 6 күн бұрын
это $mol, да?
@EvgenijGarmash
@EvgenijGarmash 6 күн бұрын
Ладно программисты, но, когда подобные разговоры слышу от врачей...
@alexanderpoco7411
@alexanderpoco7411 6 күн бұрын
Знаєте чому коти полюбляють ховатися у всіляких коробочках та мало примітних закутках? Бо коли вони сплять, вони гуляють по астралу. Тому коли вони сплять, їх не бажано турбувати 😊
@kirylbehansky1315
@kirylbehansky1315 6 күн бұрын
название фреймворка(lom.js) убило в хорошем смысле)
@admToha
@admToha 5 күн бұрын
Это название отдельного файла. Впрочем название фреймворка/семейства фреймворков тоже доставляет - $mol (моль).
@rookhive
@rookhive 6 күн бұрын
На 1:09:10 и 1:13:06 автор очевидно оговорился на несколько порядков, никаких 20-30 миллисекунд обращение к идентификатору занимать не может)
@DeadRabbitCanDance
@DeadRabbitCanDance 6 күн бұрын
В попытке эффектно что-то сказать - не беда и переврать и перепутать. Тут расчет на 1 тысячу или 10 тысяч операций. Да весь ролик - сплошное недоразумение. pop равнозначен вычитанию 1 из length... ну как бы слушать такого мастера нужно осторожно.
@AsForJS
@AsForJS 5 күн бұрын
Речь шла не про обращение к идентификатору, а про накладные расходы при холодном старте выполнения каждой инструкции в байт коде. Можете это легко проверить сами. У Вас в байт коде, каждая строка этого кода, будет сьедать накладных расходов много больше чем сама логика ее работы.
@AsForJS
@AsForJS 5 күн бұрын
Нет. Я говорил именно о том, что каждая строка байт кода, требует около 20мс времени, для ее интерпретации и исполнении в случае холодного старта.
@DeadRabbitCanDance
@DeadRabbitCanDance 5 күн бұрын
​@@AsForJS Логично. Но при обсуждении про холодный старт Вы не говорили, просто было сказано про громадную разницу в обращении через параметр параметра объекта и параметр объекта. (this.data.length и cached_data.length) Надо тогда ещё учесть, что компьютер нужно включить, дождаться его загрузки, загрузить сам скрипт из сети и только тогда приступить к его интерпретации - итого затраты на холодный старт могут вырасти до получаса! и это если всё хорошо пойдет, а то и поболее!
@rookhive
@rookhive 5 күн бұрын
@@AsForJS ​ Спасибо за ответ, но мы точно говорим про миллисекунды, а не микросекунды? Искренне пытаюсь понять, откуда такой порядок цифр на интерпретацию одной инструкции байткода
@sergii-rd6mq
@sergii-rd6mq 5 күн бұрын
Можна розібрати Angular?
@AsForJS
@AsForJS 5 күн бұрын
Я лише можу розібрати якусь маленьку частину його кода. Бо взагалі я не ореєнтусь в ангуляр.
@hurdyga
@hurdyga 3 күн бұрын
Неможливо спочатку поїсти, а потім зробити стрім, щоб не плямкати в мікрофон
@JJohnson-fy9uz
@JJohnson-fy9uz 6 күн бұрын
Вот только автор этого фреймворка является профессионалом с большим стажем в бигтехе и как разработчик не то что на голову, а на корпус выше Мурыча и подобных ему трепачей 😁
@RTFMurych
@RTFMurych 6 күн бұрын
Трепач - это когда профессионализм стажем определяется… Это наглядно разжёвано здесь: «⎡razbor:13⎦ Разбор видео: Выводим Мурыча на чистую воду от Дмитрия Карловского». А про величину корпуса этого автора там даже отдельная притча есть!
@AsForJS
@AsForJS 5 күн бұрын
Тот разработчки о котором Вы говорите, учился у меня 5 лет назад оптимизациям в V8. О чем есть подтверждение как в почте, так и в gist.
@kulbaev_zh
@kulbaev_zh 5 күн бұрын
все понятно, что ничего не понятно😅
@admToha
@admToha 5 күн бұрын
Вроде наоборот автор максимально разжёвывает, повторяя те же мысли под разными "углами", что максимально доходчиво ИМХО.
@osad4enko
@osad4enko 2 күн бұрын
шо за айтишный веб кам онлик??)))
Производительность JS:  Switch против IF
1:59:56
黑天使只对C罗有感觉#short #angel #clown
00:39
Super Beauty team
Рет қаралды 36 МЛН
My scorpion was taken away from me 😢
00:55
TyphoonFast 5
Рет қаралды 2,7 МЛН
黑天使被操控了#short #angel #clown
00:40
Super Beauty team
Рет қаралды 61 МЛН
Доска алгоритмов или как ничего не забыть
12:27
Стародубцев Александр
Рет қаралды 817
как тебе будут продавать в 2025
16:22
Тихон Смирнов
Рет қаралды 456 М.
Asm для JS программиста:  Пишем вирус
5:29:58
Стыдные вопросы про Китай / вДудь
3:07:50
вДудь
Рет қаралды 6 МЛН
Жирная точка в спорах о var let и const
8:49
Исходники. Глеб Павловский, 7 апреля 2017 года
1:54:32
Непрошедшее время
Рет қаралды 11 М.