Forwarded from ai.dot(ufna, dev)
Ах да, основной домен vk (и кстати, кучи сервисов Яндекса) был на com.
Опять же, до сегодня.
Опять же, до сегодня.
Forwarded from Node.JS [ru] | Серверный JavaScript
Неявное зависание Promise.all при отмене AsyncIterator через AbortController
Вы используете
Как возникает утечка
Когда
Диагностика на практике
Добавьте в конец
Совет по исправлению
Всегда оборачивайте тело асинхронного генератора в
Вывод: Каждый
Вы используете
for await...of с асинхронным генератором и AbortController для отмены. Кажется, всё чисто, но Promise.all зависает намертво. Проблема в том, что вызов abort() вызывает return() генератора, но если внутри остался незавершённый промис (таймер, подписка, поток), он просто висит, и Promise.all никогда не завершится.Как возникает утечка
Когда
abort() срабатывает внутри for await...of, итератор завершается. Но если в генераторе есть запущенный, но не завершённый setInterval, await на потоке данных или подписка на событие, этот промис остаётся висеть в памяти. Например, генератор каждую секунду отправляет данные, а при abort обработчик завершает итерацию, но не очищает таймер. Promise.all ждёт этот таймер вечно.Диагностика на практике
Добавьте в конец
return() генератора console.log('return called'). Если return вызывается, а Promise.all не завершается — ищите, какой ресурс утекает. Используйте обёртку с таймаутом: Promise.race([Promise.all(...), AbortSignal.timeout(5000)]). В продакшне это спасёт от вечного ожидания, но не решит корень проблемы.Совет по исправлению
Всегда оборачивайте тело асинхронного генератора в
try/finally. В finally явно очищайте все ресурсы: удаляйте слушатели, отменяйте таймеры, разрешайте ожидающие промисы. Например, если внутри генератора есть setInterval:async function* gen(signal) {
const timer = setInterval(() => {}, 1000);
try {
while (!signal.aborted) {
await new Promise(r => setTimeout(r, 100));
yield data;
}
} finally {
clearInterval(timer);
}
}Вывод: Каждый
yield и await в асинхронном генераторе должен быть гарантированно завершён до конца итерации, иначе return() не прервёт внутренние промисы, что приведёт к невосстанавливаемому зависанию.Forwarded from Shock Design
ДИгадка №38
Дизайнер и изменения логотипа: Коля в процессе работы над баннером столкнулся с проблемой увеличения логотипа. Что же произошло с формой логотипа — прочитайте в статье
Читать на дизайнерс | #урок
Дизайнер и изменения логотипа: Коля в процессе работы над баннером столкнулся с проблемой увеличения логотипа. Что же произошло с формой логотипа — прочитайте в статье
Читать на дизайнерс | #урок
Forwarded from PSD | Дизайн-пространство
ДИгадка №38
Дизайнер и изменения логотипа: Коля в процессе работы над баннером столкнулся с проблемой увеличения логотипа. Что же произошло с формой логотипа — прочитайте в статье
Читать на дизайнерс | #урок
Дизайнер и изменения логотипа: Коля в процессе работы над баннером столкнулся с проблемой увеличения логотипа. Что же произошло с формой логотипа — прочитайте в статье
Читать на дизайнерс | #урок
Forwarded from Дизайн-Телега 🔥
Что происходит вокруг TT Norms®: объясняем по порядку
Спор об использовании шрифта TT Norms® на сайте издательского дома. Какие правовые вопросы возникли и почему шрифт важен не только как дизайн, но и как результат творческого процесса
Читать на дизайнерс | #статья
Спор об использовании шрифта TT Norms® на сайте издательского дома. Какие правовые вопросы возникли и почему шрифт важен не только как дизайн, но и как результат творческого процесса
Читать на дизайнерс | #статья
Forwarded from Новые шрифты
Что происходит вокруг TT Norms®: объясняем по порядку
Спор об использовании шрифта TT Norms® на сайте издательского дома. Какие правовые вопросы возникли и почему шрифт важен не только как дизайн, но и как результат творческого процесса
Читать на дизайнерс | #статья
Спор об использовании шрифта TT Norms® на сайте издательского дома. Какие правовые вопросы возникли и почему шрифт важен не только как дизайн, но и как результат творческого процесса
Читать на дизайнерс | #статья
Forwarded from Дизайн-Телега 🔥
Шрифт Mavoble
💾 Скачать и использовать
https://disk.yandex.ru/d/JV5BDpsVZ5e7DQ
🔎 Посмотреть описание
https://fontesk.com/mavoble-font/
#font #free #cyrillic #latin
💾 Скачать и использовать
https://disk.yandex.ru/d/JV5BDpsVZ5e7DQ
🔎 Посмотреть описание
https://fontesk.com/mavoble-font/
#font #free #cyrillic #latin
Forwarded from Новые шрифты
Шрифт "Phudu" by Duong Tran
Стильный бесплатный гротеск, который вы можете бесплатно использовать в личных и коммерческих проектах. Поддерживаются много языков, но не кириллица. В архиве 5 начертаний.
📂Скачать шрифт📂
#free #latin
Стильный бесплатный гротеск, который вы можете бесплатно использовать в личных и коммерческих проектах. Поддерживаются много языков, но не кириллица. В архиве 5 начертаний.
📂Скачать шрифт📂
#free #latin
Forwarded from UI_UX inspiration
Forwarded from UI_UX inspiration
Forwarded from PSD | Дизайн-пространство
This media is not supported in your browser
VIEW IN TELEGRAM
Animated character with dynamic cloth