Привет! Достаточно давно делился статьей где описывал различные механизмы и подходы которые мы применяем для SSR приложений на Tramvai (сейчас доступна на хабре). Один из механизмов - Request Limiter, модуль который ограничивает количество параллельно обрабатываемых запросов при перегруженном Event Loop приложения, для возможности стабильно отдавать 2xx ответы и рендерить странички даже под большими нагрузками. Работает по похожим принципам с https://github.com/fastify/under-pressure, только не ...
SuperOleg dev notes
Обзоры новостей и статей из мира frontend, интересные кейсы, исследования и мысли вслух https://github.com/SuperOleg39 https://twitter.com/ODrapeza @SuperOleg39
Графики
📊 Средний охват постов
📉 ERR % по дням
📋 Публикации по дням
📎 Типы контента
Лучшие публикации
19 из 19Одна из классных идей в новой CLI - кастомные трейсы в формате Trace Event Format Идея взята у Parcel, Rspack и Next.js, примеры: - https://parceljs.org/features/profiling/#tracing - https://github.com/parcel-bundler/parcel/blob/v2/packages/core/profiler/src/Tracer.js - https://rspack.dev/contribute/development/tracing Написал кастомный трейсер поверх либы chrome-trace-event, пример API: const tracer = new Tracer(); tracer.wrap({ event: 'event' }, async () => { await doSomethingAsync(); }); Во в...
Обновляем React ещё разок если проекты в зоне риска - https://react.dev/blog/2025/12/11/denial-of-service-and-source-code-exposure-in-react-server-components
Привет! Как-то писал про серверные оптимизации ноды, и в частности про параметр --max-semi-space-size - https://t.me/super_oleg_dev/115 Часто появляются новые кейсы которые показывают сколько же нюансов в работе GC ноды. Например, не так давно коллеги разбирались с частыми OOM рестартами приложения. Оказалось, что в условиях ограниченных k8s лимитов, у этого приложения дефолтные значения --max-old-space-size были выше или примерно равны лимиту по памяти для подов этого приложения. Чем больше пар...
Необходимость оборачивание операций, которые мы хотим мониторить, в спаны - приводит к новому челленджу. Допустим в Fastify есть хук onRequest, который в коллбэке передает нам метод done - он содержит весь стек вызовов на обработку текущего запроса, и весь запрос легко обернуть в спан: app.addHook('onRequest', (req, reply, done) => { tracer.trace('GET', async () => { done(); }) }) Но в Tramvai есть базовые механизмы, которые мы тоже хотим мониторить: - линии Command Line Runner - значимые хуки р...
Только сейчас обнаружил что нельзя было оставить комментарии к постам без добавления в группу - чат, в котором я даже не знал что кто-то пытается добавиться... Постарался вернуть как было, а если будет проблема со спамом, спрошу вашего совета как решаете в своих каналах)
А вот из снэпшота с продакшена, такой трейс что не сразу было понятно что его вообще можно раскрыть до конца и найти виновника.
И раз уж зашел разговор о CLI, поделюсь одной из актуальных задач - разработка обновленной @tramvai/cli (уже писал про это короткий пост) Во вложении - дизайн новой CLI, он уже претерпел ряд изменений, но основные концепции остались. Какие основные цели для новой CLI: - решить базовые проблемы с перформансом - основная, webpack MultiCompiler запускает все сборки в одном процессе, серверная и клиентская конкурируют между собой - реализовать удобную систему плагинов (и первым же новым плагином инт...
Пример как выглядит в самом начале ссылка на утекающий код в профайлере.
Привет! Продолжая кейс с высоким потреблением памяти, обнаружили таки утечку в приложении, и она довольно интересная. Есть такая либа day.js, и ее система плагинов - https://day.js.org/docs/en/plugin/plugin В этой документации рекомендованный подход к расширению - перезапись прототипа класса dayjs: // overriding existing API // e.g. extend dayjs().format() const oldFormat = dayjsClass.prototype.format dayjsClass.prototype.format = function(arguments) { // original format result const result = ol...