- 131
- 167 409
Easy IT
Ukraine
Приєднався 6 тра 2018
Человеческим языком о простом и сложном в мире информационных технологий
React Context - хак, чтобы избежать ненужных ре-рендеров #easyit #js #javascript @EasyITChannel
Разбираемся как работать с React Context API. Организация модуля работы с контекстом, продвинутый подход для исключения ненужных ре-рендеров компонентов.
Исходники использованные в этом видео находятся здесь:
github.com/easy-linux/reactjs/tree/main/ReactContext
Тайм коды:
00:19 Введение
01:00 Изменения по сравнению с шаблоном по-умолчанию
02:11 Разбираем код корневого компонента проекта
03:15 Код компонента Counter, используется для изменения значения счетчика
04:02 Код компонента CounterLabel, используется для вывода значения счетчика
04:14 Как можно стилизовать текст, отображаемый console.log
04:45 Код компонента Text1, используем для отображения введенного текста
05:35 Код модуля, обеспечивающего работу с контекстом стандартным образом
08:18 Смотрим что происходит при изменение контекста при использовании стандартного подхода
09:40 Оборачиваем компоненты HOC-ом React.memo
10:08 Проверяем работу приложения с использованием React.memo для всех дочерних компонентов
10:55 В чем заключается основная проблема стандартного использования React Context
12:02 Переключаемся на использование модуля с продвинутым подходом
12:29 Тестируем работу модуля продвинутой работы с контекстом
12:58 Подробный разбор кода с продвинутым подходом к работе с данными контектекста
17:06 Заключение
Видео о том, что такое Symbol и как с ним работать.
ua-cam.com/video/Ve3g0-fPclY/v-deo.html
Как написать скрипт для инициализации проекта:
ua-cam.com/video/JxpS8o1FCik/v-deo.html
Сериал "Создание SPA приложения на чистом JS":
ua-cam.com/video/eqAefmCqA6M/v-deo.html
Полезные видео для лучшего понимания JS:
Стрелочные функции 1 - ua-cam.com/video/21wNsy72BKg/v-deo.html
Стрелочные функции 2 - ua-cam.com/video/DlQYk3ZvERo/v-deo.html
Макро и микро задачи - ua-cam.com/video/cVzwEowLe08/v-deo.html
Web worker - ua-cam.com/video/ZqjDBxt8DYo/v-deo.html
Service worker - ua-cam.com/video/kV9Gq6FrABg/v-deo.html
Debouncing/throttling - ua-cam.com/video/P09SxTfQkVY/v-deo.html
Видео по работе с vite.js:
ua-cam.com/video/t98Q9hliZZo/v-deo.html
Полезные видео по настройке webpack:
Минимальная конфигурация - ua-cam.com/video/unEl3Hezwpw/v-deo.html
Настройка горячей перезагрузки - ua-cam.com/video/oOpzkF2nU0s/v-deo.html
Настройка сборки проекта с подгрузкой файлов css/scss/изображений - ua-cam.com/video/3B-NGZmMe-Y/v-deo.html
Настройка сборки мультистраничного сайта - ua-cam.com/video/aMzCDR_MHF0/v-deo.html
Самый простой способ установить nodejs на Linux и Mac:
ua-cam.com/video/gP4OPx2vBoc/v-deo.html
#easyit #javascript #js #vanillajs @EasyITChannel
Исходники использованные в этом видео находятся здесь:
github.com/easy-linux/reactjs/tree/main/ReactContext
Тайм коды:
00:19 Введение
01:00 Изменения по сравнению с шаблоном по-умолчанию
02:11 Разбираем код корневого компонента проекта
03:15 Код компонента Counter, используется для изменения значения счетчика
04:02 Код компонента CounterLabel, используется для вывода значения счетчика
04:14 Как можно стилизовать текст, отображаемый console.log
04:45 Код компонента Text1, используем для отображения введенного текста
05:35 Код модуля, обеспечивающего работу с контекстом стандартным образом
08:18 Смотрим что происходит при изменение контекста при использовании стандартного подхода
09:40 Оборачиваем компоненты HOC-ом React.memo
10:08 Проверяем работу приложения с использованием React.memo для всех дочерних компонентов
10:55 В чем заключается основная проблема стандартного использования React Context
12:02 Переключаемся на использование модуля с продвинутым подходом
12:29 Тестируем работу модуля продвинутой работы с контекстом
12:58 Подробный разбор кода с продвинутым подходом к работе с данными контектекста
17:06 Заключение
Видео о том, что такое Symbol и как с ним работать.
ua-cam.com/video/Ve3g0-fPclY/v-deo.html
Как написать скрипт для инициализации проекта:
ua-cam.com/video/JxpS8o1FCik/v-deo.html
Сериал "Создание SPA приложения на чистом JS":
ua-cam.com/video/eqAefmCqA6M/v-deo.html
Полезные видео для лучшего понимания JS:
Стрелочные функции 1 - ua-cam.com/video/21wNsy72BKg/v-deo.html
Стрелочные функции 2 - ua-cam.com/video/DlQYk3ZvERo/v-deo.html
Макро и микро задачи - ua-cam.com/video/cVzwEowLe08/v-deo.html
Web worker - ua-cam.com/video/ZqjDBxt8DYo/v-deo.html
Service worker - ua-cam.com/video/kV9Gq6FrABg/v-deo.html
Debouncing/throttling - ua-cam.com/video/P09SxTfQkVY/v-deo.html
Видео по работе с vite.js:
ua-cam.com/video/t98Q9hliZZo/v-deo.html
Полезные видео по настройке webpack:
Минимальная конфигурация - ua-cam.com/video/unEl3Hezwpw/v-deo.html
Настройка горячей перезагрузки - ua-cam.com/video/oOpzkF2nU0s/v-deo.html
Настройка сборки проекта с подгрузкой файлов css/scss/изображений - ua-cam.com/video/3B-NGZmMe-Y/v-deo.html
Настройка сборки мультистраничного сайта - ua-cam.com/video/aMzCDR_MHF0/v-deo.html
Самый простой способ установить nodejs на Linux и Mac:
ua-cam.com/video/gP4OPx2vBoc/v-deo.html
#easyit #javascript #js #vanillajs @EasyITChannel
Переглядів: 379
Відео
MutationObserver - как следить за элементами в DOM #easyit #js #javascript @EasyITChannel
Переглядів 404Місяць тому
Разбираемся как использовать MutationObserver для обработки изменений элемента DOM Исходники использованные в этом видео находятся здесь: github.com/easy-linux/VanillaJS/tree/master/examples/MutationObserver Тайм коды: 00:24 Введение 01:17 Цель использования MutationObserver 01:55 Структура главного файла проекта 03:50 Функции перерисовки Canvas 04:46 Интерфейс программы 05:23 Первый пример, бе...
Метапрограммирование JS, что это и как использовать #easyit #js #javascript @EasyITChannel
Переглядів 4632 місяці тому
Разбираемся как использовать Proxy и Reflect для метапрограммирования в JS Исходники использованные в этом видео находятся здесь: github.com/easy-linux/VanillaJS/tree/master/examples/ProxyAndReflect Таймкоды: 00:20 Введение 01:39 Инициализация проекта 03:15 Создание конфигурационного файла для vitejs 04:35 Начинаем модификацию автоматически созданного стартового файла 05:04 Создаем файл для пер...
JS IntersectionObserver разбираемся как использовать #easyit #js #javascript @EasyITChannel
Переглядів 1432 місяці тому
Разбираемся как пользоваться JavaScript Intersection Observer. Синтаксис, и несколько сценариев использования на практике. Исходники использованные в этом видео находятся здесь: github.com/easy-linux/VanillaJS/tree/master/examples/IntersectionObserver Таймкоды: 00:20 Введение. 01:34 Описание стартового файла проекта. 02:15 Синтаксис IntersectionObserver. 04:32 Использование параметра threshold,...
JavaScript Event Loop разбираемся как работает (2 часть) #easyit #js #javascript @EasyITChannel
Переглядів 1613 місяці тому
С помощью простой модели разбираемся как работает цикл обработки событий в JavaScript Первая часть находится здесь: ua-cam.com/video/cVzwEowLe08/v-deo.html Сериал "Создание SPA приложения на чистом JS": ua-cam.com/video/eqAefmCqA6M/v-deo.html Полезные видео для лучшего понимания JS: Стрелочные функции 1 - ua-cam.com/video/21wNsy72BKg/v-deo.html Стрелочные функции 2 - ua-cam.com/video/DlQYk3ZvER...
JavaScript Symbol краткая инструкция по использованию #easyit #js #javascript @EasyITChannel
Переглядів 1914 місяці тому
Рассматриваем что такое Symbol и как пользоваться пользовательскими и предопределенными символами Исходник: github.com/easy-linux/VanillaJS/tree/master/examples/Symbols Сериал "Создание SPA приложения на чистом JS": ua-cam.com/video/eqAefmCqA6M/v-deo.html Полезные видео для лучшего понимания JS: Стрелочные функции 1 - ua-cam.com/video/21wNsy72BKg/v-deo.html Стрелочные функции 2 - ua-cam.com/vid...
React Router. Добавляем поддержку SSR. @EasyITChannel #reactjs #reactrouter #ssr
Переглядів 4325 місяців тому
Добавляем поддержку генерации страницы на серверной стороне приложения (SSR) с помощью ReactRouter и сборщика Vite. Все части по теме React Router: ua-cam.com/play/PLCh6bwt6jth-6-cjhNjhIYIqKabTsdSOT.html Исходник: github.com/easy-linux/reactjs/tree/main/ReactRouterSSR Сериал "Создание SPA приложения на чистом JS": ua-cam.com/video/eqAefmCqA6M/v-deo.html Полезные видео для лучшего понимания JS: ...
JavaScript форматирование строк #easyit #js #javascript @EasyITChannel
Переглядів 1385 місяців тому
Рассматриваем способы работы с шаблонными строками и теговыми литералами. Исходник: github.com/easy-linux/VanillaJS/tree/master/examples/TagLiteral Сериал "Создание SPA приложения на чистом JS": ua-cam.com/video/eqAefmCqA6M/v-deo.html Полезные видео для лучшего понимания JS: Стрелочные функции 1 - ua-cam.com/video/21wNsy72BKg/v-deo.html Стрелочные функции 2 - ua-cam.com/video/DlQYk3ZvERo/v-deo....
Wizard UI для Телеграм бота #easyit #telegrambot #js #javascript @EasyITChannel
Переглядів 4615 місяців тому
Разбираемся как можно реализовать загрузку, поиск и удаление видео файлов с помощью Wizard UI. Спасибо подписчику за расшифровку видео. 00:15 🧙♂️ В этом видеоуроке рассказывается, как использовать встроенный во фреймворк Telegraf функционал Wizard для создания пошаговых диалогов (визардов) в Telegram-ботах. 00:30 Wizard в Telegram-ботах - это способ последовательно запрашивать у пользователя ...
Проверка условий в Linux shall #easyit #linuxcommandline @EasyITChannel
Переглядів 766 місяців тому
Разбираем как в Linux устроена проверка условий. Три типа проверок - файлы, строки, числа. Полную документацию по команде test можно получить если воспользоваться командой: man test Самые часто используемые опции для проверок: Проверка доступа к файлу: -d - является ли файл каталогом? -f - это обычный файл? -L - это символическая ссылка? -r - установлены ли права на чтение? -w - установлены ли ...
React Router. Как открыть саб-роут в модалке? @EasyITChannel #reactjs #reactrouter
Переглядів 6096 місяців тому
Отвечаю на вопрос как с использованием "нового" поодхода открывать под-роуты в модальном окне. Все части по теме React Router: ua-cam.com/play/PLCh6bwt6jth-6-cjhNjhIYIqKabTsdSOT.html Исходник: github.com/easy-linux/reactjs/tree/main/ReactRouterModal Рабочее приложение: easy-linux.github.io/reactrouter_with_modal/ Сериал "Создание SPA приложения на чистом JS": ua-cam.com/video/eqAefmCqA6M/v-deo....
React Router + lazy загрузка компонентов роутов @EasyITChannel #reactjs #reactrouter
Переглядів 3186 місяців тому
React Router lazy загрузка компонентов роутов @EasyITChannel #reactjs #reactrouter
Переменные в Linux #easyit #linuxcommandline @EasyITChannel
Переглядів 3207 місяців тому
Переменные в Linux #easyit #linuxcommandline @EasyITChannel
React Router + новые возможности DataAPI @EasyITChannel #reactjs #reactrouter
Переглядів 3787 місяців тому
React Router новые возможности DataAPI @EasyITChannel #reactjs #reactrouter
Права доступа к файлами и каталогам в Linux #easyit #linuxcommandline @EasyITChannel
Переглядів 1358 місяців тому
Права доступа к файлами и каталогам в Linux #easyit #linuxcommandline @EasyITChannel
Файловые потоки и каналы в Linux #easyit #linuxcommandline @EasyITChannel
Переглядів 1,8 тис.9 місяців тому
Файловые потоки и каналы в Linux #easyit #linuxcommandline @EasyITChannel
Screen -знакомство с одной из самых крутых программ #easyit #linuxcommandline @EasyITChannel
Переглядів 1,5 тис.9 місяців тому
Screen -знакомство с одной из самых крутых программ #easyit #linuxcommandline @EasyITChannel
Знакомимся со всеми возможными типами файлов в Linux #easyit #linuxcommandline @EasyITChannel
Переглядів 4199 місяців тому
Знакомимся со всеми возможными типами файлов в Linux #easyit #linuxcommandline @EasyITChannel
Удобная работа с удаленной файловой системой по SSH #easyit #linuxcommandline @EasyITChannel
Переглядів 1,2 тис.9 місяців тому
Удобная работа с удаленной файловой системой по SSH #easyit #linuxcommandline @EasyITChannel
HTML Forms, основы, часть 4 #easyit #js #javascript @EasyITChannel
Переглядів 729 місяців тому
HTML Forms, основы, часть 4 #easyit #js #javascript @EasyITChannel
HTML Forms, основы, часть 3 #easyit #js #javascript @EasyITChannel
Переглядів 7510 місяців тому
HTML Forms, основы, часть 3 #easyit #js #javascript @EasyITChannel
HTML Forms, основы, часть 2 #easyit #js #javascript @EasyITChannel
Переглядів 9410 місяців тому
HTML Forms, основы, часть 2 #easyit #js #javascript @EasyITChannel
HTML Forms, основы, часть 1 #easyit #js #javascript @EasyITChannel
Переглядів 21610 місяців тому
HTML Forms, основы, часть 1 #easyit #js #javascript @EasyITChannel
Продвинутое копирование файлов на любой POSIX системе #easyit #linuxcommandline @EasyITChannel
Переглядів 80310 місяців тому
Продвинутое копирование файлов на любой POSIX системе #easyit #linuxcommandline @EasyITChannel
Текстовый чат с любым пользователем linux сервера #easyit #linuxcommandline @EasyITChannel
Переглядів 1,3 тис.11 місяців тому
Текстовый чат с любым пользователем linux сервера #easyit #linuxcommandline @EasyITChannel
Canvas API, простейший способ редактирования картинок #easyit #js #javascript @EasyITChannel
Переглядів 33011 місяців тому
Canvas API, простейший способ редактирования картинок #easyit #js #javascript @EasyITChannel
Web Worker & Atomics - работа с разделяемой памятью #easyit #js #javascript @EasyITChannel
Переглядів 428Рік тому
Web Worker & Atomics - работа с разделяемой памятью #easyit #js #javascript @EasyITChannel
Chrome Extension + Web Clipboard API #easyit #js #javascript #chromeextensions
Переглядів 444Рік тому
Chrome Extension Web Clipboard API #easyit #js #javascript #chromeextensions
10 самых распространенных признаков обмана на IT курсах #easyit #js #javascript @EasyITChannel
Переглядів 962Рік тому
10 самых распространенных признаков обмана на IT курсах #easyit #js #javascript @EasyITChannel
JavaScript Generator - создание, поведение, использование #easyit #js #javascript @EasyITChannel
Переглядів 596Рік тому
JavaScript Generator - создание, поведение, использование #easyit #js #javascript @EasyITChannel
А зачем contextValue в useMemo оборачивать?
Это нужно для того, чтобы объект не создавался с нуля при каждом рендере. Тело функционального компонента это фактически рендер-функция. Если не использовать хук useMemo, то объект contextValue будет каждый раз новым. В нашем случае это не очень и нужно, т.к. в все переменные стеейта попадают в контекст, но в реальных проектах это обычно не так. Есть другие переменные, колбэки и т.д., которые меняют стейт, но в контекст не попадают. Да, во второй версии контекста обновление происходит по другому принципу, но лучше следовать одному и тому же подходу и не надеяться на то, что где-то в другом месте программы все будет обработано правильно. Почему? Даже в самом простом проекте лучше сразу с самого начала думать о том, что он должен быть "френдли" к командной работе. Что это означает рассказывать долго. Если кратко - разработчик должен хорошо понимать код, даже если не он его написал. Когда мы смотрим на этот компонент - видим, value меморизировано значит, что бы ни происходило в дочерних компонентах, этот компонент не будет аффектить лишние ре-рендеры. И чтобы это понять не нужно изучать все компоненты связанные с контекстом, это видно сразу в одном месте. Опять же, если заметили, компонент App мы вообще не трогали, поменяли только модуль контекста. В начальной версии useMemo обязательно. Не нужно бояться лишней меморизации, хуже точно не будет.
да что ты черт возьми такое несеш???
а что не так, разрешите поинтересоваться?
@EasyITChannel есть спецификация html5 и вней раздел про ивент луп - попробуйте почитать
:) возможно Вы не поняли о чем этот ролик? Кроме "почитать" еще есть "понять прочитанное". В ролике речь идет о практическом понимании, о том как это работает на практике. Как это реализовано в "металле" ;) Будете с этим спорить? Что-то из изложенного, на самом деле не так и Вы можете это доказать практическим примером?
Очень полезно. Спасибо за исходный код. По настоящему достала эта дурацкая музыка, особенно когда с трудом разбираешься в расплывчатом и нечетком коде ролика...
Спасибо за просмотр и обратную связь. Исходный код есть у почти всех видео на канале. Чтобы все буковки были видны четко и не расплывались рекомендую смотреть в 1080p, это значительно упростит разбор кода. У фоновой музыки есть важная причина. Вряд ли Вам будет комфортно слушать как в фоне воет воздушная тревога, проезжает трамвай, лают собаки, работает пылесос у соседей, скрипит кресло и т.д. А переозвучивать по 100 раз или часами чистить звук у меня, к сожалению, нет времени - работать надо. Поэтому простой Noise Gate и нейтральная фоновая музычка решают проблему.
@@EasyITChannel Приношу Вам свои извинения. Я сначала скачал весь плей лист, а потом смотрел в низком разрешении. К музыке постепенно привык. После просмотра ролика окончательно отказался от React и подписался на Ваш канал. Огромное Вам спасибо! Жаль, что «прикоснулся к прекрасному» с некоторым опозданием…
Отличное объяснение! Теперь всё ясно Очень полезный хак, спасибо за доступную подачу материала! 🔥👏
Спасибо за поддержку.
👍в реакте вообще есть что нибудь что без костылей?👍
Тут зависит от того, что считать костылями. Есть "стандартный подход" работы с компонентами в реакт. "Данные в компонент через пропсы, из компонента - через колбэки". Это отлично работает в большинстве случаев. Но в сложных, и особенно в высоконагруженных приложениях такая схема работает не очень (запредельная сложность, лишние ре-рендеры, куча зависимстей), поэтому есть встроенные механизмы, упрощающие работу в сложных случаях. Это уже продвинутый уровень и он как-бы нарушает кажущуюся простоту и логичность ;) Но так в любом фреймворке. В документации всегда демонстрируют примитивный пример и говорят - во как у нас всё легко и просто. Потом с ростом приложения часто упираются в тупик и начинают городить костыли. Причем, тупик этот появляется тем быстрее, чем меньше опыта работы с фреймворком, чем хуже понимаешь его сильные и слабые стороны.
Респект за то что правильно x - называете экс, а y - уай. Мне приятно слушать грамотную речь. Это говорит о многом.
Ну, я знаю как правильно, но есть грешок - часто тоже говорю как у нас принято, а не как правильно. Вероятно, потому что когда голосом среди своих обсуждаем, то привыкаешь к сложившейся терминологии. Когда работаешь в англоязычной среде, то это выравнивает в другую сторону, хотя там тоже есть свои нюансы, даже нэтивы не всё называют/произносят идентично.
Отлично, а как потом в бандле их искать?
А зачем их искать в бандле? Бандл загружен, шрифты подключены, загружены, им назначено имя. Нужно просто указывать шрифт в стилях в font-family по имени и всё.
@EasyITChannel Я подключил шрифты, у них путь допустим: ../../src/fonts/Arial.ttf В бандле потом они теряют свои пути, ну либо я что-то не так делаю
чел харош кста
@easy_it/cordova-ser-generator это вы сделали себе форк генератора в свой репозоиторий и доработали его? А что именно вы доработали?
Очень полезный контент! Подобные кейсы часто встречаются
Вы правы, почти все видео делаю исходя из опыта в продакшн. Правда иногда это понятно только тем, кто тоже имеет подобный опыт ;)
Круто, отличное видео Лайк, подписка)
Спасибо за просмотр.
Привет. Подскажите кто нибудь, почему в папке Example1 две одинаковые папки EasyRunTracker с одинаковым набором папок и файлов?
Добрый день, очень сложно сказать что-то по поводу этого вопроса. В Git находится одна папка с одним набором файлов. В этом легко убедиться если зайти через веб-браузер по ссылке. Мне, если честно еще не доводилось увидеть двух одинаковых папок рядом, по моему скромному опыту операционные системы не допускают такого.
@EasyITChannel я имею ввиду папки проекта в вашем видео, но и в моем vs code тоже самое.
ах это :) Это среда разработки так отображает. Это одни и те же файлы, example1/EasyRunTracker это гит репозиторий, а та что в корне это проект Манки скрипта. Вот так отображается. Если открыть проект прямо из папки проекта, а не из корня репозитория то будет одна папка. Но это ерунда, не берите в голову.
Спасибо за видео
И Вам спасибо за просмотр.
Спасибо)
👍👍👍👍
Выглядит,как проект на коленки, хотя так и есть. Но спасибо, было интересно.
Спасибо за просмотр.
Спасибо🙏💕 сколько времени вы нам сэкономили, не передать
Спасибо на добром слове.
Вы очень крутой, очень рад, что нашел ваш канал. Спасибо за контент! У вас очень много прям крутейших видео с важными темами.
Большое спасибо за поддержку, стараюсь выкладывать полезное, в первую очередь, с практической точки зрения. И в максимально простом изложении. Не всегда получается, но цель такая есть.
спасибо 🙏
Посмотрел видос - еще больше запутался
Так бывает. Особенно когда и изначально четкого понимания не было, а были догадки навеянные знанием как это устроено в других языках. Более новое видео посмотрели?
Vite сборка в режиме dev работает, а билд крашится почему то
Скорее всего связано с тем, что момента выпуска видео прошло уже порядочно времени и версии программ поменялись. Как дойдут руки - поправлю.
@Graymar112 Обновил репозиторий. Просто обновил пакеты до последних и установил type в package.json - для новой версии vite это обязательно. Должно работать.
куда пропали?😇
Работы навалилось много. Нет времени на хобби ;)
куда пропали? 😇
спасибо за контент и труды 🙂
Пожалуйста. Главное, чтобы польза была. Вам тоже спасибо за поддержку.
а где первая часть?
на канале
В тот момент когда я об этом говорю в правом верхнем углу появляется ссылка на видео. вот такая ua-cam.com/video/cVzwEowLe08/v-deo.html
напишите кто-нибудь комент с таймкодами, буду очень признателен
Добавил.
Да, устноавка пакетов действительно сложна, мне пришлось написать целых 10 букв и нажать тяжелую кнопку "Ввод", а про какойто "Пробел' коих в командах много я вообще молчу. Че за пробел, не понятно, ведь этой буквы даже в алфавите нет, напридумавают эти линуксоиды своих пробелов...
Так а где видео с циферблатами?
Так а нет его. По крайней мере пока.
Спасибо большое ❤❤❤
И Вам спасибо за просмотр. И поддержку.
Музычка зачет
Спасибо. Очень полезно. Если будет возможность раскрыть тему weakMap и weakSet и есть опыт работы с ними, поделитесь, пожалуйста
Хорошо. Спасибо за просмотр.
Спасибо 🙏
символ это ж буква, че тут непонятного
И то верно ;)
@@EasyITChannel 😂
лайк неглядя
Спасибо!) Как раз столкнулся с заменой 1 и последнего элемента местами)
Спасибо за фидбэк:)
очень годно
unreal top
последний пример как раз спрашивали на собесе, про блок отрисовки
ваш канал - кладинец топ инфы, Спасибо огромное! Лайк, подписка! Даешь Electron)
Спасибо за просмотр ;) Инфа хоть и кажется простой (не всем, конечно), но собранна и переработана не за один месяц/год. В первую очередь о практической ценности думаю, что мне было трудно добыть и что помогло.
спасибо
top
Для тех кто не понял почему setTimeout в 3 примере работает так медленно, там задержка ноль это на самом деле около 4мс, поэтому проц не нагружается
Не верно. То что у тайм-аута с нулевой задержкой на самом деле есть реальная задержка в 4мс в данном случае не является причиной. Причина именно такой последовательности срабатывания обработчиков в том, что setTimout создает кроме задержки еще и макротаск. То есть сначала будет задержка на указанное время, а потом функция попадет в очередь макротасков и выполняется по обычным правилам event loop. «Проц» при этом нагружается абсолютно также, просто между отдельными макрозадачами происходит отрисовка интерфейса и пользователю кажется что нет подвисаний как если бы тоже самое делалось в while(true) цикле. Внимательно пересмотрите видео, Вы просто ничего не поняли. За деревьями не увидели леса.
@@EasyITChannel получается что отрисовка каждые 100 по счетчику, а не всё сразу. Это понятно. Но если бы не задержка на сеттаймаут, цикл прошёл бы очень быстро и всё бы зависло. Когда вы стали менять условия в цикле, в конце видео, зависания, доказывают это
Я про то что цикл проходит моментально, он не должен так долго считать
Дело не в этом. Чтобы понять в чем причина нужно просто понимать как работает эвент луп (данный ролик как раз об этом). Все довольно просто, не нужно ничего предполагать или придумывать. Например, счетчики. 1. выполняется один макротаск из очереди 2. выполняются обработчики ВСЕХ зарезолвленных микротасков 3. выполняется перерендер UI. 4. переход к пункту 1. Если макротаска нет (представьте, такое бывает), то вызывается обработчики зарезолвленных микротасков (промисов) и т.д. по кругу Сет таймаут с любой задержкой создает макротаск. Функция-обработчик это тело макротаска. Обработчик попадет в очередь после задержки, указанной для сетТаймаут. Пока висит таймаут с этой задачей ничего не происходит. Когда таймаут завершится функция попадет в очередь макротасков как отдельный макротаск. В нашем случае, если задать сетТаймаут 0, то эта функция попадет в очередь сразу и кроме того это гарантированно приведет к тому, что функция сработает ПОСЛЕ как минимум одного ререндера. Но если функция в сетТаймауте будет тяжелая, то на время ее выполнения все зависнет, т.к. это макротаск. Пока он работает к ререндеру JS перейти не может. Именно поэтому и висит, и разгрузка происходит не потому, что у таймаута маленькая задержка (или большая) а потому, что это новый макротаск. Улавливаете? Смысл совсем в другом, не в задержке. Сама по себе задержка ничем не поможет. Если просто завесить макротаск с помощью while(true), то и UI зависнет до его завершения.
@@EasyITChannel теперь понял, спасибо за очень подробное объяснение. Недавно провалил 2 собеседования, одно в вк, другое в уралсиб. Теперь вот изучаю всё, чтобы в следующий чтобы пройти. Про микро и макротаски спрашивали и там и там. В вк еще надо было полифил для Promise.all написать, то есть надо знать всё методы js, уметь написать самому. Ну и всё что на learnjavascript, надо знать, прям хорошо. Не считая regex конечно
Console.log это не макро. Автор сам не разобрался до конца. Но пример интересный
Это очень смешное утверждение. Примерно как - надпись на заборе это не забор. Вам нужно для начала научиться слушать и понимать услышанное. При необходимости пересмотреть несколько раз, а уже потом высказывать умные мысли. Конечно, Вы легко сможете указать место, где автор сказал, что консоль лог это макротаск. :)
спасибо 🙏
Спасибо за просмотр!
Отличное видео, искал похожий материал. Подписка)
Спасибо за просмотр, приятно что есть польза.
спасибо 🙏
Спасибо!!!!!
Спасибо!!!!!!
Wizard UI (пользовательский интерфейс мастера) - это подход к дизайну интерфейса, при котором пользователю предлагается последовательно пройти ряд шагов для выполнения задачи. Представьте себе анкету или форму, которую нужно заполнить поэтапно. Каждый шаг обычно состоит из: - **Инструкции:** краткого объяснения, что нужно сделать на этом шаге. - **Поля ввода:** для ввода информации пользователем. - **Кнопок:** для перехода к следующему шагу, возврата к предыдущему или отмены операции. **Преимущества Wizard UI:** * **Простота:** разбивает сложные задачи на более мелкие и управляемые этапы. * **Понятность:** пользователь всегда знает, на каком этапе он находится и что от него требуется. * **Минимизация ошибок:** уменьшает вероятность пропуска важной информации. **Примеры Wizard UI:** * **Регистрация на сайте:** ввод личных данных, подтверждение email, выбор пароля. * **Онлайн-оплата:** выбор способа оплаты, ввод данных карты, подтверждение платежа. * **Настройка устройства:** подключение к Wi-Fi, выбор языка, создание учетной записи. В контексте Telegram-ботов, Wizard UI позволяет создавать интерактивные диалоги, которые помогают пользователю шаг за шагом выполнить нужную задачу, например, оформить заказ или записаться на прием.
Недавно познакомились с ChatGPT? Соглашусь, поначалу впечатляет.
@@EasyITChannel Я не знал ,что такое Wizard UI , думаю многие тоже не знают
Ну так это нормальный способ самообразования. Услышал незнакомое слово, остановил видео, нашел объяснение, изучил, пошел дальше. Это просто невозможно в одном видео дать объяснение всем используемым терминам. Вы не знаете что такое Wizard UI, кто-то не знает что такое переменная, еще кто-то не знает что такое телеграм. Не получается всё всегда объяснять полностью. Спасибо за Вашу активность и обратную связь.
🎯 Key points for quick navigation: 00:15 *🧙♂️ В этом видеоуроке рассказывается, как использовать встроенный во фреймворк Telegraf функционал Wizard для создания пошаговых диалогов (визардов) в Telegram-ботах.* 00:30 *🤖 Wizard в Telegram-ботах - это способ последовательно запрашивать у пользователя информацию, сохранять полученные ответы и выполнять действия, когда все необходимые данные собраны.* 01:38 *🗄️ В примере используется база данных с одной таблицей для хранения информации о загруженных видео. Реализованы три визарда для добавления, поиска и удаления видео.* 02:04 *🏗️ Для создания визарда используется объект `Stage`, которому передается массив сцен (`scenes`). Каждая сцена представляет собой отдельный шаг визарда.* 03:05 *➡️ Для управления переходами между шагами визарда используются методы `next()`, `back()` и `leave()`.* 04:44 *🚀 Запуск нужного визарда осуществляется с помощью метода `enter()`, которому передается идентификатор сцены.* 05:24 *📥 В примере показано, как реализовать добавление видео: запрос имени, загрузка файла, добавление опционального описания.* 07:37 *📁 Для загрузки видео используется проверка типа сообщения (видео или документ). Идентификатор загруженного файла сохраняется для дальнейшей работы.* 09:31 *🔎 Реализован контекстный поиск видео по базе данных. Если результатов несколько, пользователю предлагается выбрать нужное видео.* 10:09 *💾 В качестве базы данных используется SQLite. Приведены примеры функций для работы с базой данных: создание таблицы, вставка, получение и удаление данных.* 14:44 *⚠️ Указывается на ограничение размера загружаемых файлов в Telegram.* Made with HARPA AI
Спасибо. Добавил.