Примеры кода: github.com/HowProgrammingWork... Структура курса: github.com/HowProgrammingWork...
Жүктеу.....
Пікірлер: 28
@antonsuhov4222 Жыл бұрын
1:00 - Unreachable code 3:43 - Dead code 5:54 - Switch 10:25 - Parameters 19:31 - Accumulate and fire 22:21 - Micro Optimization 40:23 - Nested Loops 50:20 - Long Methods, functions , procedures
@stephaninabox4 жыл бұрын
Наконец-то лекция со знакомым материалом, ведь всё это я уже применял :D
@gennadiymedvedev2144 жыл бұрын
, спасибо , Тимур , за профессиональный контент !!!
@TimaGixe Жыл бұрын
Дякую за пояснення та наведені приклади.
@user-no7sl1yk3f7 ай бұрын
Как же круто на простом примере объяснена важность правильной структуры данных. Спасибо
@user-um3ps3gq9t4 жыл бұрын
Отличная лекция, поможет писать чистый код на JS, рекомендую.
@user-ky8dr1hu5e4 жыл бұрын
Оптимизация со здравым смыслом от практика (а не от снобистских хипстеров, начитавшихся этих ваших интернетов).
@dmitrijponkin4 жыл бұрын
Спасибо!
@VladislaV2203 жыл бұрын
спасибо огромное, Тимур! Anatoly Kobzisty, а где коммент с самыми удобными в мире тайм кодами....((
@DimitarRad2 жыл бұрын
like and comment as usual ;)
@TimurSevimli Жыл бұрын
Спасибо огромное за лекцию, было очень полезно! Можете ли поделиться лабораторками для практики декомпозиции или если уже поделились то подсказать где можно их найти🙏
@TimurShemsedinov
Жыл бұрын
Возможно подойдут такие экзаменационные задания github.com/HowProgrammingWorks/Exams
@TimurSevimli
Жыл бұрын
@@TimurShemsedinov Спасибо большое! 🤓
@user-jb1kn4bt6k2 жыл бұрын
В примере с цветами вы упомянули что поиск по массиву с помощью indexOf быстрее, нежели обращение к объекту по ключу. Вы не оговорились?
@user-jb1kn4bt6k
2 жыл бұрын
Ведь забрать по ключу значение из объекта - моментально. А indexOf, все равно, внутри перебирает и сравнивает каждое значение. indexOf - O(n) , hash O(1). Если я не прав - поправьте, пожалуйста)
@dromix_ai2 жыл бұрын
kzread.info/dash/bejne/lYiqmbhrYtDRp6g.html Если не ошибаюсь, то Map это не хеш таблица, т.к в качестве ключа может хранить объекты, и если попытаемся перезаписать значение по ключу, то это добавит вторую запись, но не перезапишет предыдущее значение, по-скольку, ссылки разные, тем не менее, Map более оптимизирован, чем обычная коллекция.
@TimurShemsedinov
2 жыл бұрын
Спецификация не говорит, как Map должен работать внутри и описывает только внешний интерфейс tc39.es/ecma262/#sec-map-objects но все вменяемые движки используют хештаблицы для этого
@QwDragon2 жыл бұрын
8:46 - почему быстрее? Наоборот же словарь должен быть быстрее. Да и красивее, по-моему. 16:09 - new Date посеял.
@TimurShemsedinov
2 жыл бұрын
Нет, маленький массив с однотипными элементами и без дырок работает гораздо быстрее Map и тем более Object
@QwDragon
2 жыл бұрын
@@TimurShemsedinov хм.. проверил. При таком размере массива разница минимальна, хотя массив немного выигрывает. Вот результаты замера: x => arr.indexOf(x): 3298.822021484375 ms x => obj[x]: 3495.64501953125 ms x => map.get(x): 3351.541015625 ms 350028119 350028119 350028119 И сам код: const arr = ['black', 'red', 'green', 'yellow', 'blue', 'margenta', 'cyan', 'white'] const obj = Object.create(null); for (let q=0; q [x, i])) const data = Array.from({ length: 100000000 }, () => arr[Math.random() * arr.length | 0]) function check(f) { const hint = f + "" let res = 0 console.time(hint) for (const x of data) { res += f(x) } console.timeEnd(hint) return res } const x = check(x => arr.indexOf(x)) const y = check(x => obj[x]) const z = check(x => map.get(x)) console.log(x, y, z)
@QwDragon
2 жыл бұрын
@@TimurShemsedinov блин, что-то ютьюб комментарий удаляет. Если в функции с indexOf прибавить 1, то производительность значительно падает - этот вариант проигрывает остальным на 20-25%.
@user-zd5yk4by6j
2 жыл бұрын
@Timur Shemsedinov Это только если не прибавлять единицу к индексу (вместо этого добавить null в начало массива, например). Тогда и правда вариант с массивом получается быстрее (мистика:)): 100 миллионов вызовов у меня заняли 60 мс для массива против 90 мс для объекта и мэпа. Но + 1 всё портит и замедляет работу раз в 25-30, из-за чего вариант с массивом, как он представлен в примере, сильно проигрывает по скорости оставшимся двум. А Map и Object в этом примере работают одинаково быстро. Если не ошибаюсь, в какой-то из лекций вы говорили, что простой объект может работать в режиме хэш-таблицы. Наверное, это как раз тот случай.
@QwDragon
2 жыл бұрын
@@user-zd5yk4by6j С режимом хэш-таблицы всё не так просто, но можно попробовать его спровоцировать удалением и добавлением свойства. Как у тебя получилось 20-50 раз когда у меня 20-25%? Можешь код показать?
@GagikHarutyunyan_dev4 жыл бұрын
Здравствуйте. В Redux(reduser) используют такой антипатерн switch case. Приходит тип и если он совпадает с кейсом, то возвращает то что внутри(в основном функции). В реакте на больших проектах в файле редюсера могут быть 1000 строк одного switch и реально от этого тошнит. Но все пользуются этим. Что скажете по этому поводу? Спасибо
@TimurShemsedinov
4 жыл бұрын
Вместо этого нужно использовать коллекции, это и читаемо и быстрее
@denisoleksyuk5346
3 жыл бұрын
Обычно советуют дробить редюсеры что бы такого не было. В редаксе можно использовать мидлваре комбайнРедюсер
@vugpgu Жыл бұрын
Кант из Кенинсберга! Я с приятием смотрю Ваши лекции о программировании, но мне претит Ваша коммунистическая пропаганда!
Пікірлер: 28
1:00 - Unreachable code 3:43 - Dead code 5:54 - Switch 10:25 - Parameters 19:31 - Accumulate and fire 22:21 - Micro Optimization 40:23 - Nested Loops 50:20 - Long Methods, functions , procedures
Наконец-то лекция со знакомым материалом, ведь всё это я уже применял :D
, спасибо , Тимур , за профессиональный контент !!!
Дякую за пояснення та наведені приклади.
Как же круто на простом примере объяснена важность правильной структуры данных. Спасибо
Отличная лекция, поможет писать чистый код на JS, рекомендую.
Оптимизация со здравым смыслом от практика (а не от снобистских хипстеров, начитавшихся этих ваших интернетов).
Спасибо!
спасибо огромное, Тимур! Anatoly Kobzisty, а где коммент с самыми удобными в мире тайм кодами....((
like and comment as usual ;)
Спасибо огромное за лекцию, было очень полезно! Можете ли поделиться лабораторками для практики декомпозиции или если уже поделились то подсказать где можно их найти🙏
@TimurShemsedinov
Жыл бұрын
Возможно подойдут такие экзаменационные задания github.com/HowProgrammingWorks/Exams
@TimurSevimli
Жыл бұрын
@@TimurShemsedinov Спасибо большое! 🤓
В примере с цветами вы упомянули что поиск по массиву с помощью indexOf быстрее, нежели обращение к объекту по ключу. Вы не оговорились?
@user-jb1kn4bt6k
2 жыл бұрын
Ведь забрать по ключу значение из объекта - моментально. А indexOf, все равно, внутри перебирает и сравнивает каждое значение. indexOf - O(n) , hash O(1). Если я не прав - поправьте, пожалуйста)
kzread.info/dash/bejne/lYiqmbhrYtDRp6g.html Если не ошибаюсь, то Map это не хеш таблица, т.к в качестве ключа может хранить объекты, и если попытаемся перезаписать значение по ключу, то это добавит вторую запись, но не перезапишет предыдущее значение, по-скольку, ссылки разные, тем не менее, Map более оптимизирован, чем обычная коллекция.
@TimurShemsedinov
2 жыл бұрын
Спецификация не говорит, как Map должен работать внутри и описывает только внешний интерфейс tc39.es/ecma262/#sec-map-objects но все вменяемые движки используют хештаблицы для этого
8:46 - почему быстрее? Наоборот же словарь должен быть быстрее. Да и красивее, по-моему. 16:09 - new Date посеял.
@TimurShemsedinov
2 жыл бұрын
Нет, маленький массив с однотипными элементами и без дырок работает гораздо быстрее Map и тем более Object
@QwDragon
2 жыл бұрын
@@TimurShemsedinov хм.. проверил. При таком размере массива разница минимальна, хотя массив немного выигрывает. Вот результаты замера: x => arr.indexOf(x): 3298.822021484375 ms x => obj[x]: 3495.64501953125 ms x => map.get(x): 3351.541015625 ms 350028119 350028119 350028119 И сам код: const arr = ['black', 'red', 'green', 'yellow', 'blue', 'margenta', 'cyan', 'white'] const obj = Object.create(null); for (let q=0; q [x, i])) const data = Array.from({ length: 100000000 }, () => arr[Math.random() * arr.length | 0]) function check(f) { const hint = f + "" let res = 0 console.time(hint) for (const x of data) { res += f(x) } console.timeEnd(hint) return res } const x = check(x => arr.indexOf(x)) const y = check(x => obj[x]) const z = check(x => map.get(x)) console.log(x, y, z)
@QwDragon
2 жыл бұрын
@@TimurShemsedinov блин, что-то ютьюб комментарий удаляет. Если в функции с indexOf прибавить 1, то производительность значительно падает - этот вариант проигрывает остальным на 20-25%.
@user-zd5yk4by6j
2 жыл бұрын
@Timur Shemsedinov Это только если не прибавлять единицу к индексу (вместо этого добавить null в начало массива, например). Тогда и правда вариант с массивом получается быстрее (мистика:)): 100 миллионов вызовов у меня заняли 60 мс для массива против 90 мс для объекта и мэпа. Но + 1 всё портит и замедляет работу раз в 25-30, из-за чего вариант с массивом, как он представлен в примере, сильно проигрывает по скорости оставшимся двум. А Map и Object в этом примере работают одинаково быстро. Если не ошибаюсь, в какой-то из лекций вы говорили, что простой объект может работать в режиме хэш-таблицы. Наверное, это как раз тот случай.
@QwDragon
2 жыл бұрын
@@user-zd5yk4by6j С режимом хэш-таблицы всё не так просто, но можно попробовать его спровоцировать удалением и добавлением свойства. Как у тебя получилось 20-50 раз когда у меня 20-25%? Можешь код показать?
Здравствуйте. В Redux(reduser) используют такой антипатерн switch case. Приходит тип и если он совпадает с кейсом, то возвращает то что внутри(в основном функции). В реакте на больших проектах в файле редюсера могут быть 1000 строк одного switch и реально от этого тошнит. Но все пользуются этим. Что скажете по этому поводу? Спасибо
@TimurShemsedinov
4 жыл бұрын
Вместо этого нужно использовать коллекции, это и читаемо и быстрее
@denisoleksyuk5346
3 жыл бұрын
Обычно советуют дробить редюсеры что бы такого не было. В редаксе можно использовать мидлваре комбайнРедюсер
Кант из Кенинсберга! Я с приятием смотрю Ваши лекции о программировании, но мне претит Ваша коммунистическая пропаганда!
Спасибо!