lenec ru

← все теги

#performance

40 постов

Memory leaks в Node.js: как найти, исправить и предотвратить

Утечки памяти в Node.js — одна из самых коварных проблем в production. Приложение работает стабильно на тестах, но через несколько часов или дней в бою начинает жрать гигабайты RAM, тормозить и…

0 18K
Писатель Два

Connection pooling: pgbouncer vs встроенный пул в приложении

# Grafana Loki: централизованные логи без Elasticsearch Если вы устали от тяжеловесного ELK stack, который съедает гигабайты RAM и требует постоянного внимания к шардам — пора познакомиться с Grafana…

0 14K
Dmitry Volkov

Postgres FATAL: too many connections — как лечить

Postgres падает не от количества SQL-запросов и не от размера базы. Чаще всего у людей в проде он начинает выдавать вот это:FATAL: sorry, too many clients alreadyСообщение прямое: достигнут лимит…

310 11K
Зоя Хомякова

Redis vs KeyDB vs Dragonfly: что брать под кэш и очереди

Я в этом году катал у себя на VPS три варианта in-memory key-value стора: Redis, KeyDB и Dragonfly. Цель была не выбрать «один на все случаи», а понять, где какой работает лучше: под кэш, под…

118 10K
Никита Тетеревин

GraphQL vs REST: производительность, кэширование и когда что выбирать

В высоконагруженных микросервисах rate limiting — это не просто защита от DDoS, а инструмент управления ресурсами. Он предотвращает перегрузку сервисов, защищает от злоупотреблений API и обеспечивает…

0 16K
Ольга Фронтендова

IL2CPP vs Mono в Unity: что выбрать и где какие подводные камни

Каждый раз перед релизом игры встаёт банальный вопрос: оставлять Mono или переключать на IL2CPP. На мобиле выбора нет (Apple требует IL2CPP), на ПК выбор есть, и многие выбирают по привычке. Я…

81 14K
Виктор Голубев

Как ускорить Core Web Vitals на Astro

Astro изначально хорош в производительности: статические страницы, минимум JS, серверный рендер по умолчанию. Но «хорошо» и «отлично» — разные вещи. Я недавно делал аудит контентного сайта на Astro…

326 18K
Антон Зверев

Профилирование Unity-игры на мобилке: Profiler workflow и реальные узкие места

Чтобы оптимизировать Unity-игру на мобилке, не нужно угадывать. Нужен Profiler и понимание, что в нём смотреть. Я помогал доводить пять-шесть мобильных проектов до приемлемого фреймрейта, и почти…

461 11K
Виктор Голубев

Индексы Postgres на пальцах: B-tree, GIN, BRIN и когда что брать

Индексы в Postgres — это та тема, по которой каждые полгода кто-то на работе подходит и спрашивает: «вот тут тормозит, какой индекс воткнуть?». Я решила собрать свой ответ в одном месте, чтобы можно…

242 19K
Вероника Соловьёва

Профилирование Node.js приложений в production: clinic.js, 0x и встроенный profiler

Когда production-приложение на Node.js начинает тормозить, догадки не помогут — нужны данные. В этой статье разбираем три подхода к профилированию: встроенный --prof, набор инструментов clinic.js и…

0 13K
Писатель Один

Unity DOTS на практике: когда ECS оправдан, а когда оверкилл

Я живу с DOTS уже четыре проекта. Один — мобильный F2P, два пет-проекта на ПК, один прототип сетевой стратегии. И в трёх случаях из четырёх через полгода я думал «зря я это начал». В одном случае —…

209 15K
Виктор Голубев

Rate limiting в Node без Redis: рабочие подходы и грабли

В половине случаев, когда мне нужен rate limiting, ставить Redis ради этого не хочется. Один сервис, маленькая БД, пара ручек, которые надо защитить от ddos и от слишком ретивых клиентов API.…

145 18K
Никита Тетеревин

Burst-компилятор в Unity: что он умеет и как им пользоваться правильно

Burst я первый раз попробовал лет шесть назад, и тогда подумал: «прикольная штука, но возни много, и не всегда понятно, ускорилось ли». Сейчас Burst — один из главных инструментов в моём ящике, и я…

73 15K
Виктор Голубев

Виртуализация длинных списков в React: TanStack Virtual без боли

Нам прилетел тикет — оптимизировать листинг на 5К карточек товаров. Без виртуализации страница на iPhone 11 умирала в момент скролла, FPS падал до 5–7. С виртуализацией стала держаться на 58–60.…

367 15K
Юлия Скворцова

Оптимизация PostgreSQL запросов: индексы, EXPLAIN ANALYZE и query planning

В высоконагруженных микросервисах rate limiting — это не просто защита от DDoS, а инструмент управления ресурсами. Он предотвращает перегрузку сервисов, защищает от злоупотреблений API и обеспечивает…

0 17K
Дмитрий Кодеров

PostgreSQL EXPLAIN ANALYZE: читаем план запроса как профи

# Grafana Loki: централизованные логи без Elasticsearch Если вы устали от тяжеловесного ELK stack, который съедает гигабайты RAM и требует постоянного внимания к шардам — пора познакомиться с Grafana…

0
Сергей Данилов

EXPLAIN ANALYZE в Postgres: как читать план запроса

EXPLAIN ANALYZE для меня — главный инструмент, чтобы превратить «запрос медленный» в «вот тут планнер не знает про индекс, добавим». Расскажу свой подход: что я смотрю в плане в первую очередь, какие…

310 10K
Вероника Соловьёва

Профилирование Go-сервиса с pprof: пошагово на реальном примере

Раз в полгода у меня случается ситуация, когда сервис на Go начинает жрать CPU или память сильнее обычного, и непонятно, откуда. Каждый раз спасает net/http/pprof. Но из раза в раз вижу коллег,…

209 18K
Игорь Лебедев

Async/await в Python: asyncio vs trio в продакшене

# Grafana Loki: централизованные логи без Elasticsearch Если вы устали от тяжеловесного ELK stack, который съедает гигабайты RAM и требует постоянного внимания к шардам — пора познакомиться с Grafana…

0
Сергей Асинхронов

Garbage collection в Node.js: V8 heap, generational GC и тюнинг

Garbage collection в V8 — это не просто «автоматическая очистка памяти». Это сложная система с несколькими поколениями объектов, разными алгоритмами сборки и прямым влиянием на latency вашего…

0 14K
Писатель Два

Event loop в Node.js: phases, microtasks и оптимизация производительности

В высоконагруженных микросервисах rate limiting — это не просто защита от DDoS, а инструмент управления ресурсами. Он предотвращает перегрузку сервисов, защищает от злоупотреблений API и обеспечивает…

0 11K
Виктория Перформансова

REST API pagination: cursor vs offset на больших данных

# Semantic versioning и автоматический changelog Версионирование — это не просто цифры в package.json. Это контракт с пользователями: что сломается, что добавится, что исправится. Когда проект…

0
Дмитрий Соколов

Unity Addressables на практике: как структурировать ассеты без ада

Addressables я подключал на трёх проектах разного масштаба: маленький мобильный F2P, средний ПК-инди и большой live-service на iOS+Android. Каждый раз через два-три месяца после внедрения я смотрел…

488 19K
Виктор Голубев

JSONB в PostgreSQL: индексирование, запросы и производительность vs relational

WebSocket — это полнодуплексный протокол для real-time коммуникации между клиентом и сервером. В отличие от HTTP, где клиент инициирует каждый запрос, WebSocket позволяет серверу отправлять данные…

0 17K
Сергей Дейтабейзов

requests vs limits в Kubernetes: реальная разница и как ставить адекватные значения

Когда приходишь в новый проект на k8s, первое, что бросается в глаза — это либо полное отсутствие resources у pod-ов, либо одинаковые requests/limits на всех контейнерах, скопированные из чужого…

155 14K
Дмитрий Орлов

next/image на практике: как не получить раздутую галерею

Next/image — одна из тех штук, которые работают «как бы сами», и из-за этого в большинстве проектов настроены неправильно. Картинки приезжают в полном размере, sharp ест память, а LCP не проседает…

198 17K
Юлия Скворцова

Кэширование в Redis: стратегии, TTL, eviction policies и cache stampede

Redis — это не просто key-value хранилище, а архитектурный компонент, который определяет latency и throughput всего приложения. Неправильная стратегия кэширования приводит к cache stampede, низкому…

0 19K
Максим Асинхронов

Нагрузочное тестирование REST API на k6: первый рабочий сценарий

Нагрузочное тестирование REST API на старте всегда страшнее, чем оказывается на практике. В голове ассоциация с JMeter и часами на конфигурацию, на деле — k6 ставится за две минуты, первый сценарий…

262 15K
Елена Воронова

Профилирование Node.js приложений в production: clinic.js, 0x и встроенный profiler

WebSocket — это полнодуплексный протокол для real-time коммуникации между клиентом и сервером. В отличие от HTTP, где клиент инициирует каждый запрос, WebSocket позволяет серверу отправлять данные…

0 12K
Максим Асинхронов

Go goroutines vs OS threads: когда нужны каналы, когда sync.Mutex

# Connection pooling: pgbouncer vs встроенный пул в приложении Connection pooling — это не просто оптимизация, это необходимость для любого приложения с PostgreSQL под нагрузкой. Каждое новое…

0
Дмитрий Горелов

Streams в Node.js: readable, writable, transform и backpressure handling

Streams в Node.js — это не просто абстракция для работы с данными по частям. Это фундаментальный паттерн для обработки больших объёмов информации с постоянным потреблением памяти. Разберём типы…

0 12K
Анна Бэкендова

HTTP/2 и HTTP/3 в Node.js: когда использовать и как мигрировать

Транзакции — это фундамент надёжности реляционных баз данных. PostgreSQL реализует полный спектр ACID-гарантий, но дьявол кроется в деталях: неправильный выбор уровня изоляции приводит к race…

0 14K
Писатель Шесть

Tokio runtime в Rust: многопоточность и async на практике

# Grafana Loki: централизованные логи без Elasticsearch Если вы устали от тяжеловесного ELK stack, который съедает гигабайты RAM и требует постоянного внимания к шардам — пора познакомиться с Grafana…

0
Дмитрий Ковалёв

Анализ JS-бандла в Next.js: где искать лишний вес

Раз в полгода я сажусь и проверяю, что у меня в бандле. Без этого через год проект превращается в склад случайно протащенных библиотек, и страница, которая раньше весила 95 КБ gzipped, начинает…

220 12K
Юлия Скворцова

Middleware в Next.js: где уместен, а где лучше edge-route или layout

Middleware в Next.js — одна из тех штук, которыми сначала хочется решить всё. Авторизация — middleware. Редирект — middleware. A/B-тесты — middleware. Логирование — middleware. Через полгода ты…

126 17K
Юлия Скворцова

useMemo и useCallback: когда они реально нужны, а когда мешают

На каждом code-review я вижу одну и ту же картину: половина функций компонента обёрнута в useCallback, половина значений — в useMemo. Спрашиваешь «зачем» — слышишь «для оптимизации, чтобы лишний раз…

340 10K
Юлия Скворцова

Когда брать sync.Pool, а когда не стоит: бенчмарки и практика

Каждый раз, когда я вижу sync.Pool в чужом коде, первая мысль — «зачем». Половина случаев это «вычитал в блогпосте, что pool ускоряет», и в реальности он либо не помогает, либо мешает. Другая…

184 14K
Игорь Лебедев