Forwarded from Node.JS [ru] | Серверный JavaScript
Гонки данных в AsyncLocalStorage при HTTP/2: подводный камень, который ловит даже опытных
Используешь
В чём подвох
Как это выглядит на практике
Обычно думают: раз
Почему это ломается
Что делать
* Не используй общие изменяемые объекты внутри ALS для разных потоков. Каждый поток - свой Map, свой instance.
* Проверяй идемпотентность: если
* После завершения потока зови
* Для воркеров передавай контекст явно через
Безопасный вариант
Вывод: Даже с async_hooks явное создание изолированного состояния на каждый поток - единственный надёжный способ избежать гонок данных при HTTP/2 мультиплексировании.
Используешь
AsyncLocalStorage для проброса контекста запроса через всю цепочку обработки? Нормальная практика. Но когда приходит HTTP/2 с мультиплексированием, привычная схема als.run(new Map(), () => next()) может дать сбой. И доки про это молчат.В чём подвох
AsyncLocalStorage в Node.js работает через async_hooks - он привязан к цепочке асинхронных операций. HTTP/2 потоки - это отдельные асинхронные цепочки, которые выполняются конкурентно. Если в коде есть общие ресурсы (пул соединений с БД, общий кеш, переменные на уровне модуля), начинается гонка. Поток A записывает userId в хранилище, поток B его перезаписывает, и A при чтении получает данные B.Как это выглядит на практике
const als = new AsyncLocalStorage();
const server = http2.createServer();
server.on('stream', (stream) => {
als.run(new Map(), async () => {
const store = als.getStore();
store.set('userId', await getUserId(stream));
});
});
Обычно думают: раз
async/await сохраняет контекст через хуки, всё чисто. Но проблема не в разрыве контекста, а в том, что несколько потоков одновременно пишут в один и тот же Map. Асинхронная изоляция работает только для одной цепочки, а не для нескольких параллельных.Почему это ломается
async_hooks корректно отслеживает цепочки Promise. Но HTTP/2 потоки могут попасть в один тик event loop. Если код использует синхронные побочные эффекты после await (вроде store.set), хуки не спасут - данные уже перемешались. Контекст сохраняется, но параллельные set() делают своё дело.Что делать
* Не используй общие изменяемые объекты внутри ALS для разных потоков. Каждый поток - свой Map, свой instance.
* Проверяй идемпотентность: если
setUserId вызывается дважды для одного потока - ок. Но если два потока пишут в один объект - ошибка.* После завершения потока зови
als.disable() - чтобы не копить утечки памяти.* Для воркеров передавай контекст явно через
postMessage. Надеяться, что ALS дотянется до другого процесса, не стоит.Безопасный вариант
server.on('stream', (stream) => {
const store = new Map(); // локальный для потока
store.set('start', Date.now());
als.run(store, () => processStream(stream));
});Вывод: Даже с async_hooks явное создание изолированного состояния на каждый поток - единственный надёжный способ избежать гонок данных при HTTP/2 мультиплексировании.
Forwarded from PSD | Дизайн-пространство
Что требует рынок от мидла? Анализ вакансий продуктовых и UX/UI-дизайнеров
Статья расскажет о рыночной зарплате, формате работы и необходимых навыках. Узнаешь, чего ожидать от работодателей и какие навыки повысят твою конкурентоспособность
Читать на дизайнерс | #дайджест
Статья расскажет о рыночной зарплате, формате работы и необходимых навыках. Узнаешь, чего ожидать от работодателей и какие навыки повысят твою конкурентоспособность
Читать на дизайнерс | #дайджест
Forwarded from Node.JS [ru] | Серверный JavaScript
ИИ vs ЧЕЛОВЕК / AI УЖЕ МНОГОЕ УМЕЕТ, НО НЕ ТАК КАК ТЫ ...
Нейросети уже пишут, рисуют и отвечают 24/7. Это мощно, и мы за прогресс. Но есть вещи, которые алгоритмы никогда не заменят:
— эмпатию к клиенту
— доверие, которое строится годами
— продажи без манипуляций, с душой
⚠️ Технологии — это инструмент, а главное — это ты и твой живой контакт.
Приглашаем тебя в ЭКО-Пространство, где технологии — это фон, а главное — это ты и твой клиент ✔️ В этой ПОДБОРКЕ есть кое-что поважнее алгоритмов — ДОВЕРИЕ. В папке собраны каналы про экологичные продажи, про понимание, про рост без выгорания.
Пусть ИИ пишет тексты, а ты учись создавать отношения. 💚
Добавляй папку в свой актив и делись с друзьями! 📌
Ссылка ➡️ https://t.me/addlist/9wQJPILNMKNkNmNk
👉 Делимся знаниями и аудиторией — растём вместе ⚡️
Нейросети уже пишут, рисуют и отвечают 24/7. Это мощно, и мы за прогресс. Но есть вещи, которые алгоритмы никогда не заменят:
— эмпатию к клиенту
— доверие, которое строится годами
— продажи без манипуляций, с душой
⚠️ Технологии — это инструмент, а главное — это ты и твой живой контакт.
Приглашаем тебя в ЭКО-Пространство, где технологии — это фон, а главное — это ты и твой клиент ✔️ В этой ПОДБОРКЕ есть кое-что поважнее алгоритмов — ДОВЕРИЕ. В папке собраны каналы про экологичные продажи, про понимание, про рост без выгорания.
Пусть ИИ пишет тексты, а ты учись создавать отношения. 💚
Добавляй папку в свой актив и делись с друзьями! 📌
Ссылка ➡️ https://t.me/addlist/9wQJPILNMKNkNmNk
👉 Делимся знаниями и аудиторией — растём вместе ⚡️
Forwarded from Denis News
Extreme Heat conference cancelled due to extreme heat warning (Score: 223 pts in 5 hours)
Link: www.lse.ac.uk
Comments: news.ycombinator.com
The LSE's Extreme Heat conference was cancelled due to a red extreme heat warning from the UK Met Office.
Link: www.lse.ac.uk
Comments: news.ycombinator.com
Grantham Research Institute on climate change and the environment
Extreme Heat: Improving governance and strengthening action around the world - cancelled - Grantham Research Institute on climate…
We regret that this event has been cancelled due to the red extreme heat warning issued by the UK Met Office.
Forwarded from Denis Sexy IT 🤖
Интересный бенчмарк для интернет-продвигаторов:
Небольшой агент раз в сутки смотрит какие виральные тренды есть в тиктоках и постит небольшие «карусели» с аи-картинками на какие-то темы, которые ему кажутся виральными на сегодня, и так по кругу
Пока побеждает 5.5:
https://www.viralbench.ai/
По ссылке есть примеры постов
Небольшой агент раз в сутки смотрит какие виральные тренды есть в тиктоках и постит небольшие «карусели» с аи-картинками на какие-то темы, которые ему кажутся виральными на сегодня, и так по кругу
Пока побеждает 5.5:
https://www.viralbench.ai/
По ссылке есть примеры постов
Forwarded from PSD | Дизайн-пространство
Media is too big
VIEW IN TELEGRAM
Forwarded from Daily Coding 🔥
📖XSS. Cheat Sheet
🖋Assis Rodolfo 2020
XSS Cheat Sheet 2019 Edition — это 38-страничный буклет о межсайтовом скриптинге (XSS), самой распространенной уязвимости во Всемирной паутине. После успеха издания 2018 года мы решили выпустить краткий справочник по XSS для охотников за ошибками, тестировщиков на проникновение, аналитиков безопасности, студентов и энтузиастов в области безопасности веб-приложений.
💾 Скачать книгу
Daily Coding #книги #web & Max
🖋Assis Rodolfo 2020
XSS Cheat Sheet 2019 Edition — это 38-страничный буклет о межсайтовом скриптинге (XSS), самой распространенной уязвимости во Всемирной паутине. После успеха издания 2018 года мы решили выпустить краткий справочник по XSS для охотников за ошибками, тестировщиков на проникновение, аналитиков безопасности, студентов и энтузиастов в области безопасности веб-приложений.
💾 Скачать книгу
Daily Coding #книги #web & Max
Forwarded from PSD | Дизайн-пространство
Кубок дизайна и ИИ
😍 Авито, МТС, ВКонтакте, Сбер и Озон решили выяснить, у кого мощнее дизайнеры. Во всех смыслах.
Мы собрали специалистов из пяти бигтехов и предложили им челлендж, в котором соединились дизайн, ИИ и спорт.
Задача — за полчаса создать полноценный сервис на два экрана. Пользователь должен понять, что от него хотят и принять простое решение: сделать это или нет.
Участники могут получить дополнительное время на разработку, если успешно пройдут физические и интелектуальные испытания.
Что в программе:
◽️ Викторина про ИИ
◽️ Полоса препятствий
◽️ Вайбкодинг приложения
◽️ Финал
Победит тот, кто сделает приложение быстрее и лучше!
Выбирай, где смотреть:
🟠 YouTube
🟠 Вк Видео
🟠 RuTube
Мы собрали специалистов из пяти бигтехов и предложили им челлендж, в котором соединились дизайн, ИИ и спорт.
Задача — за полчаса создать полноценный сервис на два экрана. Пользователь должен понять, что от него хотят и принять простое решение: сделать это или нет.
Участники могут получить дополнительное время на разработку, если успешно пройдут физические и интелектуальные испытания.
Что в программе:
Победит тот, кто сделает приложение быстрее и лучше!
Выбирай, где смотреть:
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Dezzigners
🧰 Gradient and Gold Emoji Pack — большая коллекция из 128 кастомизируемых 3д эмодзи в форматах PNG и Figma для твоих слудующих проектов
Cкачать
Dezzigners
Cкачать
Dezzigners
Forwarded from Node.JS [ru] | Серверный JavaScript
Как WeakRef в EventEmitter блокирует GC на секунды и что с этим делать
В high-load Node.js приложениях EventEmitter с подписками через WeakRef часто приводит к pause-блокировкам GC до 2-5 секунд. Разработчики ошибочно полагают, что WeakRef автоматически решает утечки памяти, но на деле он продлевает жизнь long-lived объектам в old-space.
Причина пауз
WeakRef.deref() возвращает объект только при наличии сильной ссылки. Если такой объект попадает в old-space, V8 на этапе Mark-Sweep-Compact задерживается на его трассировке. Пример:
Пока Listener жив через другую ссылку, GC видит его как long-lived, вызывая блокировку.
Диагностика в production
Запусти
Практический совет
Не используй WeakRef в горячих путях EventEmitter. Вместо этого явно управляй подписками:
Это убирает deref и GC не тратит время на weak-ссылки.
Типичная ошибка
Держать сильную ссылку на объект, подписанный через WeakRef. Правило "never hold weak" нарушено — GC не может собрать ни weak, ни strong объект. Решение: если WeakRef обязателен, объединяй обработчики в один WeakSet для контроля.
Вывод: Проблема не в производительности GC, а в архитектуре — либо откажись от WeakRef в EventEmitter, либо делай подписчики короткоживущими, иначе GC-паузы неизбежны.
В high-load Node.js приложениях EventEmitter с подписками через WeakRef часто приводит к pause-блокировкам GC до 2-5 секунд. Разработчики ошибочно полагают, что WeakRef автоматически решает утечки памяти, но на деле он продлевает жизнь long-lived объектам в old-space.
Причина пауз
WeakRef.deref() возвращает объект только при наличии сильной ссылки. Если такой объект попадает в old-space, V8 на этапе Mark-Sweep-Compact задерживается на его трассировке. Пример:
const { EventEmitter } = require('events');
const emitter = new EventEmitter();
class Listener { handleEvent() { /* тяжелая логика */ } }
const ref = new WeakRef(new Listener());
emitter.on('data', () => ref.deref()?.handleEvent());Пока Listener жив через другую ссылку, GC видит его как long-lived, вызывая блокировку.
Диагностика в production
Запусти
node --trace-gc app.js и ищи строки Mark-sweep с временем более 100мс. Сравни heapUsed через process.memoryUsage() — неравномерный рост указывает на застревание объектов. Используй Chrome DevTools: Allocation Timeline покажет, как объекты переходят из young в old-space.Практический совет
Не используй WeakRef в горячих путях EventEmitter. Вместо этого явно управляй подписками:
class SafeListener { handle() {} }
const l = new SafeListener();
emitter.on('data', l.handle.bind(l));
// Освобождение
emitter.off('data', l.handle.bind(l));Это убирает deref и GC не тратит время на weak-ссылки.
Типичная ошибка
Держать сильную ссылку на объект, подписанный через WeakRef. Правило "never hold weak" нарушено — GC не может собрать ни weak, ни strong объект. Решение: если WeakRef обязателен, объединяй обработчики в один WeakSet для контроля.
Вывод: Проблема не в производительности GC, а в архитектуре — либо откажись от WeakRef в EventEmitter, либо делай подписчики короткоживущими, иначе GC-паузы неизбежны.
Forwarded from PSD | Дизайн-пространство
Каким должен быть сайт для IT-продуктов
Дизайнер при работе в IT-проектах сталкивается с различными точками зрения разных специалистов на продукт. Как справляться с такими вызовами? Узнай в статье!
Читать на дизайнерс | #статья
Дизайнер при работе в IT-проектах сталкивается с различными точками зрения разных специалистов на продукт. Как справляться с такими вызовами? Узнай в статье!
Читать на дизайнерс | #статья
Forwarded from Daily Coding 🔥
Тратите много времени на работу? ИИ уже умеет делать часть задач за Вас
Представьте: тексты пишутся быстрее, аналитика и отчёты собираются за минуты, а рутинные задачи больше не съедают вечер. Именно так сегодня работают специалисты с ИИ‑инструментами — и поэтому становятся востребованнее и дороже на рынке.
Этот бесплатный курс поможет быстро войти в тему без сложной подготовки. В игровом формате Вы внедрите ИИ под задачи бизнеса, выполните реальные проекты и научитесь автоматизировать процессы даже без навыков программирования.
Переходите по ссылке и регистрируйтесь бесплатно — пока навык ИИ не стал обязательным для всех.
Реклама. Информация о рекламодателе по ссылкам в посте.
Представьте: тексты пишутся быстрее, аналитика и отчёты собираются за минуты, а рутинные задачи больше не съедают вечер. Именно так сегодня работают специалисты с ИИ‑инструментами — и поэтому становятся востребованнее и дороже на рынке.
Этот бесплатный курс поможет быстро войти в тему без сложной подготовки. В игровом формате Вы внедрите ИИ под задачи бизнеса, выполните реальные проекты и научитесь автоматизировать процессы даже без навыков программирования.
Переходите по ссылке и регистрируйтесь бесплатно — пока навык ИИ не стал обязательным для всех.
Реклама. Информация о рекламодателе по ссылкам в посте.