Forwarded from PSD | Дизайн-пространство
Айдентики телеком-оператора «Летай»
Летай — крупнейший универсальный оператор связи Республики Татарстан с штаб-квартирой в Казани,
Образ бренда точно отражает его ценности: скорость, открытость, надежность и удобство решений.
Летай — крупнейший универсальный оператор связи Республики Татарстан с штаб-квартирой в Казани,
Образ бренда точно отражает его ценности: скорость, открытость, надежность и удобство решений.
Forwarded from Daily Coding 🔥
🛠 Acra обеспечивает шифрование полей данных на уровне приложений, многоуровневый контроль доступа, защиту от утечки данных из баз и возможности обнаружения вторжений в рамках одного пакета. Acra была специально разработана для распределенных приложений (веб-приложений, серверных и мобильных), которые хранят данные в одной или нескольких базах данных / хранилищах данных.
🌍 Сайт
Daily Coding #инструменты #SQL & Max
🌍 Сайт
Daily Coding #инструменты #SQL & Max
Forwarded from Dezzigners
This media is not supported in your browser
VIEW IN TELEGRAM
🧰 Dominant Color Toolk — создаёт цветовые палитры на основе доминирующих оттенков изображения и автоматически применяет их к слоям
Dezzigners
Dezzigners
Forwarded from Node.JS [ru] | Серверный JavaScript
AbortController в Node.js production: сквозные дедлайны, cleanup ресурсов и защита от «висящих» операций
AbortController важен не как таймаут для
Сквозной дедлайн
У HTTP-запроса, джобы или RPC должен быть один бюджет, который прокидывается вниз: handler - сервис - БД - внешний API - stream - timer.
Типичная ошибка
Не ставьте независимые
Abort кооперативен
Он работает только там, где API принимает
Cleanup обязателен
Вывод:
Сильный production-паттерн - один сквозной
AbortController важен не как таймаут для
fetch, а как контракт жизненного цикла операции. В production частая ошибка - клиент уже ушел, SLA истек, а сокеты, стримы и временные файлы продолжают жить.Сквозной дедлайн
У HTTP-запроса, джобы или RPC должен быть один бюджет, который прокидывается вниз: handler - сервис - БД - внешний API - stream - timer.
const client = new AbortController();
req.on('close', () => {
client.abort(new Error('client disconnected'));
});
const signal = AbortSignal.any([
client.signal,
AbortSignal.timeout(1500)
]);
try {
const r = await fetch(reportUrl, { signal });
await pipeline(r.body, createWriteStream(file), { signal });
} finally {
await rm(tmpDir, {
recursive: true,
force: true
}).catch(() => {});
}
Типичная ошибка
Не ставьте независимые
timeout: 1000 в каждом слое. Так запрос легко живет 3+ секунды, хотя общий SLA был 1 секунда. Практический совет: передавайте сверху signal, а локальный меньший бюджет делайте через AbortSignal.any().Abort кооперативен
Он работает только там, где API принимает
signal: fetch, timers/promises, stream.pipeline, часть fs, http, child_process, клиенты БД. Предупреждение: Promise.race() с таймаутом не отменяет реальную работу, он только перестает ждать результат.Cleanup обязателен
abort() не удалит временные файлы, не вернет connection в pool и не снимет listeners. Освобождайте ресурсы в finally и прокидывайте внутрь signal, а не controller.Вывод:
Сильный production-паттерн - один сквозной
AbortSignal, понятный signal.reason и гарантированный cleanup каждой операции.Forwarded from Designdealer
This media is not supported in your browser
VIEW IN TELEGRAM
HONOR представила MagicOS 11.
Если вам показалось, вам не показалось.
Если вам показалось, вам не показалось.