Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  • ru
    Игры
    Образование
    Искусственный Интеллект
    Новости
    Бекенд, разработка серверов
    Фронтенд
    Мобильная разработка
    Языки программирования
    Разработка игр | 3D | 2D
    Базы данных
    CMS
    Системное Администрирование
    Операционные системы
    Маркетинг
    Девайсы
    Сообщество
    Юмор, Мемы

  • en
    Humor
    News
    AI
    Programming languages
    Frontend
    GameDev

  • Блоги

Авторизуйтесь, чтобы написать сообщение

  • Все категории
  • hannadevH
    hannadev
    Middleware как антипаттерн Node.js 2026: миграция на Fastify

    Обложка: Middleware как антипаттерн в Node.js 2026: миграция с Express на Fastify с явной передачей контекста вместо неявного расширения request-response объектов

    Middleware в Express превратился в источник скрытых зависимостей и неявных модификаций объектов request-response. Это создаёт проблемы с трассировкой данных и тестированием. Современный подход — явная передача контекста вместо расширения глобальных объектов.

    В этой статье разберём, почему паттерн middleware стал антипаттерном, как это влияет на архитектуру приложений, и как мигрировать на Fastify с явной передачей контекста. Это касается каждого, кто серьёзно относится к качеству кода.

    Почему middleware Express это проблема

    В Express middleware работает как цепочка ответственности из паттернов Gang of Four. Звучит красиво, но на практике каждый middleware может незаметно добавить данные в объект request или response. Ты пишешь обработчик маршрута и не знаешь, какие поля и методы уже добавили предыдущие middleware.

    Представь: логирование добавляет req.id, аутентификация добавляет req.user, валидация добавляет req.validated, а какой-то свой middleware добавляет req.context. Всё это неявно, в разных местах кода. Когда ты ищешь баг или пишешь тесты, ты должен помнить о всех этих скрытых расширениях. Это просто боль.

    Вот к чему это приводит на практике:

    • Неявные зависимости: функция зависит от данных в req, но это не видно из сигнатуры функции
    • Сложность тестирования: нужно мокировать весь объект request со всеми добавленными полями
    • Проблемы с типизацией: TypeScript не может проверить, какие свойства есть на request в каждой точке цепочки
    • Трудность отладки: откуда взялось это поле на объекте? Какой middleware его добавил? Нужно искать по всему коду
    • Хрупкость кода: добавил новый middleware — и вдруг что-то сломалось, потому что он перезаписал какое-то поле

    От неявности к явности: как работает контекст

    Вместо того чтобы полагаться на неявное расширение объектов, современный подход — это явная передача контекста как аргумента функции. Контекст содержит всё, что нужно обработчику: информацию о пользователе, логгер, конфигурацию, состояние запроса.

    Это не просто синтаксический сахар. Явная передача контекста делает код более предсказуемым и удобным для статического анализа. Когда ты видишь async (ctx) => { }, сразу понятно, какие данные нужны функции. IDE подскажет все доступные поля. TypeScript будет ругаться, если ты обращаешься к несуществующему полю.

    Как это выглядит в коде:

    // Express: неявная зависимость
    app.use((req, res, next) => {
      req.userId = extractUserId(req.headers);
      next();
    });
    
    app.get('/api/user', (req, res) => {
      // откуда взялся req.userId? Нужно помнить про middleware выше
      const user = getUserById(req.userId);
      res.json(user);
    });
    
    // Fastify: явная передача
    app.addHook('preHandler', async (req, reply) => {
      req.userId = extractUserId(req.headers);
    });
    
    app.get('/api/user', async (req, reply) => {
      const user = getUserById(req.userId);
      return user;
    });
    
    // Лучший вариант: явный контекст
    interface AppContext {
      userId: string;
      logger: Logger;
      db: Database;
    }
    
    const handler = async (ctx: AppContext) => {
      const user = await ctx.db.user.findById(ctx.userId);
      return user;
    };
    

    Замечу: явность не значит, что нужно передавать параметры через 10 уровней функций. Контекст — это один объект, который содержит всё необходимое. Вместо fn(req, res, next, logger, db, config, ...) ты пишешь fn(ctx). Это чище.

    Fastify vs Express: архитектурные различия

    Fastify изначально разработан с учётом современных подходов. Его декоратор (hooks и плагины) работают иначе, чем Express middleware. Fastify не полагается на расширение объектов request-response, хотя технически это возможно.

    В Fastify ты можешь работать с контекстом через встроенные механизмы, которые делают это явным:

    Аспект Express Fastify
    Middleware Расширяет req-res объекты Hooks работают с контекстом
    Типизация Сложная типизация расширений req Встроенная поддержка типов
    Плагины Модификация глобального приложения Инкапсулированные области видимости
    Контекст Неявный, через req Явный, через параметры хука
    Декораторы Добавляются на prototype Регистрируются в приложении

    Вот что особенно крутого в Fastify:

    • Области видимости плагинов: каждый плагин имеет свой scope, данные не утекают в другие части приложения
    • Reply-объект чище: ты не расширяешь его, а просто возвращаешь данные
    • Встроенная сериализация: Fastify сериализует ответ на основе JSON-схемы, никакой магии
    • Контекст через декораторы: fastify.decorate() чётко показывает, что ты добавляешь в приложение

    Пошаговая миграция с Express на Fastify

    Миграция не означает переписывать всё с нуля. Можно делать это постепенно, заменяя middleware на явные обработчики контекста.

    Шаг 1: Создай интерфейс контекста

    Определи, какие данные нужны в контексте запроса:

    interface RequestContext {
      userId?: string;
      user?: User;
      requestId: string;
      logger: Logger;
      db: Database;
      cache: Cache;
    }
    

    Шаг 2: Замени middleware на hooks в Fastify

    // Вместо Express middleware
    app.addHook('preHandler', async (req, reply) => {
      req.context = {
        requestId: req.id,
        logger: logger.child({ requestId: req.id }),
        db: db,
        cache: cache
      };
    });
    
    // Аутентификация
    app.addHook('preHandler', async (req, reply) => {
      const token = req.headers.authorization?.replace('Bearer ', '');
      if (token) {
        req.context.userId = decodeToken(token);
        req.context.user = await req.context.db.user.findById(req.context.userId);
      }
    });
    

    Шаг 3: Обнови обработчики маршрутов

    // До миграции (Express)
    app.get('/api/user/:id', async (req, res) => {
      const user = await req.db.user.findById(req.params.id);
      req.logger.info('User fetched', { userId: req.params.id });
      res.json(user);
    });
    
    // После миграции (Fastify)
    app.get<{ Params: { id: string } }>('/api/user/:id', async (req, reply) => {
      const ctx = req.context as RequestContext;
      const user = await ctx.db.user.findById(req.params.id);
      ctx.logger.info('User fetched', { userId: req.params.id });
      return user;
    });
    

    Шаг 4: Избавься от магии, используй явные функции

    Итоговый паттерн: обработчик маршрута получает контекст явно, а логика находится в отдельных функциях:n

    const fetchUser = async (ctx: RequestContext, userId: string) => {
      const user = await ctx.db.user.findById(userId);
      ctx.logger.info('User fetched', { userId });
      return user;
    };
    
    app.get<{ Params: { id: string } }>('/api/user/:id', async (req, reply) => {
      const user = await fetchUser(req.context, req.params.id);
      return user;
    });
    

    Логика бизнеса теперь отделена от фреймворка. Функции легко тестировать, они не зависят от Express или Fastify.

    Реальные проблемы, которые решает явный контекст

    Это не просто вопрос эстетики или чистоты кода. Явный контекст решает реальные проблемы:

    Проблема 1: Утечки данных между запросами

    В Express легко случайно сохранить данные одного запроса в другом, если middleware использует замыкания или глобальные переменные. С явным контекстом каждый запрос имеет свой scope.

    Проблема 2: Сложность интеграции новых инструментов

    Когда приходит новый инструмент (трейсинг, метрики, аналитика), нужно добавить ещё один middleware. С явным контекстом ты просто добавляешь новое поле в интерфейс и всё работает.

    Проблема 3: Тестирование обработчиков

    Тестировать функцию, которая получает контекст аргументом, проще, чем мокировать весь объект request. Вот реальный пример:

    // Тест с явным контекстом
    const mockCtx: RequestContext = {
      userId: 'test-user',
      requestId: 'req-123',
      logger: mockLogger,
      db: mockDb,
      cache: mockCache
    };
    
    const result = await fetchUser(mockCtx, 'user-1');
    assert(result.id === 'user-1');
    

    Сравни это с мокированием всего Express request-объекта — это кошмар.

    Проблема 4: Отладка и логирование

    Знаешь, куда попадают данные? В контекст. Знаешь, где контекст создаётся? В hooks. Логирование становится простым и предсказуемым.

    Как структурировать приложение при явном контексте

    После миграции на явный контекст логично переструктурировать приложение. Вот что рекомендуется:

    • Слой handlers: функции, которые получают контекст и параметры запроса, возвращают результат
    • Слой services: бизнес-логика, которая использует контекст (логгер, БД, кэш)
    • Слой data: работа с БД, кэшем, внешними API
    • Слой utils: вспомогательные функции, которые не нуждаются в контексте

    Пример структуры:

    src/
      handlers/
        user.ts       // обработчики маршрутов
      services/
        user.ts       // бизнес-логика
      data/
        user.ts       // запросы к БД
      types/
        context.ts    // интерфейсы контекста
      app.ts          // создание приложения
    

    Каждый слой знает только о слое ниже, не наоборот. Контекст проходит сверху вниз, неся всё необходимое.

    Оставить Express или переходить?

    Если у тебя уже есть большой проект на Express, не обязательно срочно мигрировать. Но новые проекты лучше начинать с Fastify или другого современного фреймворка, который изначально поддерживает явный контекст.

    Есть ещё альтернативы: Oak для Deno, Hono для edge, Elysia для TypeScript. Все они построены на принципе явного контекста и не требуют манипуляций с объектами request-response.

    Главное — осознать, что неявная передача данных через расширение объектов это не масштабируется и не тестируется. Явность всегда выигрывает в долгосрочной перспективе.


    0 0 0 Ответить
  • GameFishG
    GameFish
    Scott Pilgrim EX вышла вчера: отзывы о пиксельном beat'em up и 144 FPS на слабых ПК

    Обложка: Scott Pilgrim EX вышла вчера: первые отзывы о пиксельном beat'em up и оптимизация на слабых ПК для 144 FPS

    Scott Pilgrim EX вчера завезли - пиксельный beat’em up по комиксам Скотта Пилигрима. Ребята на Steam уже накидали положительных отзывов, хвалят механики и кооп. Если железо слабое, не паникуй - разгоним до 144 FPS без апгрейда.

    Игра вышла 20 марта на ПК, консолях и Switch. Кампания на 4 часа, но с мета-прогрессом и побочками не заскучаешь. Отзывы в Steam - положительные, 79/100 на Metacritic. Это сиквел культовой Scott Pilgrim vs. The World, только лучше анимации и комбо.

    Первые отзывы: что пишут геймеры

    Ребята тестили вчера всю ночь, и фидбек огонь. Кампания короткая, но механики имба - разнообразные комбо, 7 персонажей с уникальными скиллами. Скотт, Рамона, Рокси, Лукас - каждый рвет толпы веганов, роботов и демонов в Торонто будущего. Анимации пиксельные, но плавные, без статтеров на нормальных настройках. Побочки добавляют реиграбельности, кооп до 4 человек онлайн или локал - чистый кайф для каток с пацанами.

    Мета-прогрессия - редкость в beat’em up, прокачка персов через раунды. Саундтрек 8-битный, ностальгия по старым аркадам. Минусы? Коротко, боссы иногда однотипные. Но за 4 часа нагнуть сюжет - солидно. На Metacritic 79 баллов, Steam - положительные на основе сотен отзывов.

    • Плюсы по отзывам: Плавные комбо, кооп без лагов, пиксель-арт топ.
    • Минусы: Кампания 3-5 часов, мало контента для хардкора.
    • Кто в теме: Фанаты оригинала в восторге, новички тоже втягиваются.
    • Нюанс: Русская локализация текста - читабельно.
    Аспект Оценка в отзывах Коммент
    Механики 9/10 Комбо-имба, лучше оригинала
    Графика 8/10 Пиксельный стиль, анимации огонь
    Кооп 9/10 До 4 игроков, без фризов
    Длина 6/10 4 часа на сюжет

    Слабое железо? Гайд на 144 FPS

    Оптимизация в Scott Pilgrim EX - не топ, но на слабых ПК летает после твиков. 2.5D beat’em up с пикселями не жрет ресурсы, как AAA. Тестили на GTX 1050, i5 8gen - без дропов до 144 FPS. Главное - вырубить ненужное, андервольт GPU, если троттлинг. Веганы и демоны не будут фризить, если конфиг правильный. Разработчики завезли VSync и лимитер, но дефолтно жрет CPU на толпах.

    На встроенной графике типа Intel UHD тянет 60+ FPS, с твиками - 144. Память жрет мало, 4-6 ГБ хватит. Steam демо показало: без лагов на low-end. Проблемы? Редкие статтеры на загрузках, фиксится в настройках. Кооп онлайн стабилен, если роутер не кривой.

    1. Видео: Low preset, отключить AA (мыло не нужно), разрешение 1080p или ниже.
    2. FPS лимит: 144 в движке + RivaTuner для глобального.
    3. Драйвера: Новые NVIDIA/AMD, DCH версии.
    4. Андервольтинг: MSI Afterburner - минус 100 мВ на GPU, троттлинг уйдет.
    5. Фон: Выруби Discord overlay, антивирус в исключения.
    Сборка ПК FPS на high FPS после твиков Примечание
    GTX 1050 + i5 80-100 144 stable Без RT
    RX 570 + Ryzen 3 120 144+ Топ для бюджета
    Intel UHD + i3 60 120-144 Low only
    GTX 1650 + i7 144 144 uncapped Имба

    Таблица сабельных конфигов

    Команда консоли Steam Эффект FPS буст
    -dx11 +fps_max 144 DirectX11, лимит +20-30%
    -nojoy -novid Без джойстика, интро +10 FPS
    -freq 144 Монитор 144Hz Стабил

    Боссы и мета: как нагнуть сложность

    Боссы в Scott Pilgrim EX - мясо, но на хардкоре требуют тайминга. Семь персов с разными билдами: Скотт на комбо, Рамона на скорость. Мета - прокачка через мета-прогрессию, апгрейды переносятся. Толпы мобов учат позиционированию, кооп спасает от вайпа. Тестили билды: фулл дамаг или танк - зависит от катки.

    Локации большие, сайдквесты с коллекционками. Демоны и роботы в Торонто - пиксельный хаос, но комбо-чейны рвут. Минусы оптимизации: на слабом CPU дропы в толпе, фикс - low particles. Кооп онлайн через Steam - без приваток, но стабильно.

    • Билд Скотта: Усилить комбо, апгрейд AOE - для соло.
    • Рамона: Даш и скорость, идеал для коопа.
    • Топ мета: Мета-прогрессия на unlock персов.
    • Нюанс: Разблокировка после сюжетки.

    Готовые конфиги для доминации

    Конфиги из форумов: INI файл в AppData, твики реестра для FPS. RivaTuner профиль на 144 lock. Для ноутов - high performance в панели. Жрет 4 ГБ VRAM max, на 2 ГБ тянет low. Онлайн кооп фикс - портфорвард 27015 UDP.

    • MSI Afterburner: Curve +100 MHz core, -150 power limit.
    • INI правки: GraphicsQuality=Low, Particles=0.
    • Windows: Отключи Game Mode, если фризы.

    Кооп и моды: что дальше

    Кооп - сердце игры, до 4 игроков рвут серверы демонов. Моды уже в Steam Workshop: новые скины, бесконечный режим. Оригинал был кривым портом, здесь оптимизация лучше, но на Switch фризы. Оставили за кадром полную длину с DLC - ждем патчей на контент.

    Мета эволюционирует с апдейтами, билды меняются. Если 144 FPS не держит - апгрейд GPU в планах, но твики спасут 90% сборок. Геймеры бомбят на короткость, но реплей на боссах затягивает.


    0 0 0 Ответить
  • hannadevH
    hannadev
    React 19.2.4: Патч CVE-2026-23864 против DoS в RSC без авторизации

    Обложка: React 19.2.4: Патч CVE-2026-23864 для защиты RSC-серверов от DoS-атак без авторизации

    React 19.2.4 вышел с патчем для CVE-2026-23864 - это фикс нескольких DoS-уязвимостей в React Server Components. Злоумышленники шлют специально crafted HTTP-запросы на Server Function endpoints, и сервер валится: крашится, жрёт всю память или CPU до бесконечности.

    Это критично для RSC-серверов без авторизации - атака низкой сложности, по сети, без прав. Патч закрывает дыры, которые пропустили предыдущие фиксы. Обновление спасает от серверных падений в проде. Зачем читать: разберём, что сломано, как фиксится и что проверить в своём стеке.

    Что такое CVE-2026-23864 и почему это боль

    Уязвимость бьёт по React Server Components - архитектуре, где сервер рендерит компоненты и шлёт их клиенту. Предыдущие патчи на DoS были неполными, и research’еры нашли новые векторы: infinite loops в десериализации, неконтролируемое потребление ресурсов. Злоумышленник просто кидает запрос на endpoint Server Functions, и бум - OOM, краш или 100% CPU.

    Это не RCE, но DoS high severity с CVSS 7.5: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H. Аffects даже apps без явных Server Functions, если RSC в стеке. Next.js 13-16 на App Router тоже в зоне риска - один запрос, и твой сервер на нуле. Фреймворки типа Parcel, Turbopack, Webpack под колпаком. Реальный сценарий: ботнет шлёт такие запросы, и твой RSC-сервер off-line без шансов.

    Вот ключевые проблемы, которые фиксит патч:

    • Infinite loops в десериализации: crafted payload заставляет парсер зациклиться, жрёт CPU.
    • Out-of-memory: неконтролируемый аллокейшн объектов из untrusted data.
    • Server crashes: CWE-400 и CWE-502 - uncontrolled resources и bad deserialization.
    Параметр Значение
    Severity High (7.5)
    Attack Vector Network, no auth
    Impact Availability only
    Complexity Low

    Затронутые пакеты и версии

    Под удар попали три основных пакета для RSC: react-server-dom-webpack, react-server-dom-parcel и react-server-dom-turbopack. Уязвимы версии от 19.0.0 до 19.2.3 - это свежие релизы, так что если не апдейтил вручную, то сидишь на уязвимке. Даже если не юзаешь Server Functions явно, RSC-архитектура может быть в фоне через фреймворк.

    Патч бэкпорчен в 19.0.4, 19.1.5 и 19.2.4 - апгрейд на любой из них решает проблему. Next.js тоже выпустил фиксы, но корень в React-пакетах. Проверь package.json: если видишь эти либы в уязвимом range, беги апдейтить. В проде без апдейта - лотерея, особенно если endpoints открыты.

    Список affected версий:

    • react-server-dom-webpack: 19.0.0-19.2.3
    • react-server-dom-parcel: 19.0.0-19.2.3
    • react-server-dom-turbopack: 19.0.0-19.2.3
    Пакет Уязвимые версии Патченные
    react-server-dom-webpack 19.0.0–19.2.3 19.0.4, 19.1.5, 19.2.4
    react-server-dom-parcel 19.0.0–19.2.3 19.0.4, 19.1.5, 19.2.4
    react-server-dom-turbopack 19.0.0–19.2.3 19.0.4, 19.1.5, 19.2.4

    Как апдейтить и проверить фикс

    Апдейт - это пара команд в терминале, но с нюансами. Для чистого React: npm update или yarn upgrade на патченные версии. В Next.js юзай codemod: npx @next/codemod@canary upgrade latest - он подтянет всё нужное, включая React deps. После апдейта запусти тесты на RSC-рендер и нагрузь endpoints самодельными payloads, чтоб убедиться.

    Не забудь: если SSR/RSC в проде без rate limiting или auth, добавь middleware для защиты. Линтеры типа eslint-plugin-security могут флагить потенциальные дыры. В dev-режиме Turbopack/Webpack теперь safer парсят payloads. Пересобери бандл и деплой - кофе ещё горячий.

    Шаги для апдейта:

    1. Проверь версии: npm ls react-server-dom-*
    2. Апгрейдь: npm i react-server-dom-webpack@19.2.4 (и аналоги)
    3. Для Next.js: npx @next/codemod@canary upgrade latest
    4. Тестируй: нагрузь endpoints с crafted requests.
    5. Деплой и мониторь логи на OOM/CPU spikes.

    Пример быстрого чека в package.json:

    {
      "react-server-dom-webpack": "^19.2.4"
    }
    

    За кулисами патча: что фиксили

    React-тим закрыла неполные фиксы из прошлых CVE - теперь парсер RSC жёстче валидирует payloads, лимитирует глубину десериализации и аллокейшн. Это не ломает legit трафик, но блочит crafted атаки. Нюанс: если кастомные Server Functions парсят untrusted data вручную, добавь свою валидацию поверх патча. В 19.2.4 оптимизировали memory handling - меньше OOM даже на валидных больших payloads.

    Фикс бэкпорчен аккуратно, без breaking changes в API. Если юзаешь RSC с фреймворками, проверь их changelogs - Next.js уже синхрон. В будущем жди больше scrutiny на RSC, т.к. это killer-feature для perf, но security на первом месте.

    Ключевые изменения в патче:

    • Лимиты на recursion depth в deserializer.
    • Resource quotas для CPU/memory per request.
    • Enhanced validation для Server Function args.

    RSC без DoS: что мониторить дальше

    Патч 19.2.4 делает RSC-серверы устойчивыми к этим DoS, но дыры в custom коде или misconfigs остаются. Подумай о rate limiting на RSC-endpoints и auth wrappers - без них открытые серверы по-прежнему магнит для ботов.

    В RSC-экосистеме жди эволюции: новые хуки для secure parsing, встроенный DoS-защитник. Если стек на 19.x, обновляйся сразу - это не optional, а must-have для продакшена.


    0 0 0 Ответить
  • GameFishG
    GameFish
    Borderlands 4 Mad Ellie вышла вчера: отзывы о хоррор-кампании и 144 FPS на RTX 50xx в коопе

    Обложка: Borderlands 4 Mad Ellie вышла вчера: первые отзывы о хоррор-кампании и оптимизация на RTX 50xx для 144 FPS в коопе

    Короче, Mad Ellie and the Vault of the Damned для Borderlands 4 вчера завезли - 26 марта релиз случился, и стримеры уже катку рубят. Хоррор-кампания на Шепчущем леднике жрет нервы, а оптимизация под RTX 50xx позволяет в коопе держать 144 FPS без фризов. Это поможет нагнуть боссов и не лагать с тимой.

    Первые отзывы летят: кто-то бомбит на кривые текстуры, но лут имба, а C4SH - новый ваулт-хантер - рвет шаблон. Разберем, что народ говорит о сюжете и как выжать максимум фпс на свежем железе. Без воды - сразу к делу, чтобы ты мог прыгнуть в катку и доминировать.

    Хоррор-кампания Mad Ellie: мясо, монолиты и отзывы стримеров

    Вчера народ запустил DLC, и сразу отзывы посыпались - Шепчущий ледник получился мрачным, с космическим хоррором, где Элли с Манкубусом рубят инопланетный монолит. Кровавые тона, новые квесты, 16 мини-боссов и два жирных - все это тянет на 10-15 часов катки. Сримеры хвалят атмосферу: темные коридоры с шепотом жрут нервы, но жалуются на скрипты, где враги спавнятся статтерами. Логично переходим к фидбеку - Gearbox завезли больше лута, чем в предыдущих DLC, но оптимизация под вопросом.

    Примеры из чатов: один тиммейт на стриме орал, что C4SH с магической колодой - имба в коопе, рвет толпы мистическими скиллами. Другие бомбят на побочки - типа, Пикл вернулся, но диалоги затянуты. Общий вердикт: кампания топ для фанатов хоррора, но без базара базовой игры не разберешься в лоре.

    • Атмосфера имба: Ледник с обломками кораблей - чистый космо-хоррор, шепот и кровь держат в тонусе.
    • C4SH - свежак: Робот с картами дает новые билды, легендарки и перламутрка летят рекой (3 пушки + 11 итемов).
    • Боссы жесткие: Два главных + 16 мини - требуют тимы, иначе троттлинг от перегрузки.
    • Косметика: 28 шмоток для кастомизации, но некоторые с багами текстур.
    Аспект Положительные отзывы Негатив Рейтинг из 10
    Сюжет Мрачный хоррор, возвраты NPC Затянутые диалоги 8.5
    Лут Перламутр + легендарки Редкие дропы 9.0
    Атмосфера Шепот, кровь Скрипты врагов 9.2

    Оптимизация под RTX 50xx: 144 FPS в коопе без лагов

    На RTX 5090 и 5080 Mad Ellie летает - вчера тестеры на форумах ковыряли драйвера и конфиги, выжимая 144+ фпс в 4K коопе. Проблема в базовой Borderlands 4: троттлинг на высоких настройках, жрет VRAM как не в себя, но патч с релизом DLC подкрутил шейдеры. DLSS 4 и Frame Gen - ключ к имбе, без них фризы в босс-файтах. Логично - переходим к настройкам: андервольтинг + свежие драйвера NVIDIA решают 90% статтеров.

    Ребята на реддите и форумах тестили всю ночь: на 5090 с i9-15900K - 200 фпс на ультра, но в коопе с 4 рылом дроп до 120 без оптимизации. Gearbox завезли общий прогресс аккаунта - теперь не фармишь заново, но мультиплеер жрет трафик. Примеры: один конфиг срезал нагрузку на 30%, другой - выжал 144 locked.

    • DLSS и Reflex: Врубай Quality + On - фпс +50%, инпут лаг минимальный.
    • Андервольтинг GPU: Снижай на 100мВ - троттлинг уходит, температура ниже 70C.
    • RAM и VRAM: Минимум 32GB DDR5 + 24GB VRAM на 50xx - иначе фризы в леднике.
    • Кооп-фикс: Ограничь фоновые процессы, вруби Resizable BAR.
    Сборка Разрешение FPS ультра FPS с DLSS Температура
    RTX 5090 + i9 4K 120 180+ 68C
    RTX 5080 + Ryzen 9 1440p 140 200 72C
    RTX 5070 Ti 1080p 100 144 75C

    Конфиг для 144 FPS locked в Mad Ellie кооп

    Готовый .ini патч от тестеров - кидай в Documents/My Games/Borderlands4/Config. [Engine.ini] добавь: r.DynamicRes.OperationMode=0, r.ScreenPercentage=100. В NVIDIA Control Panel: Low Latency On, Texture Filtering High Performance. Тестировано на 50xx - статтеры ушли. В игре: VSync Off, Motion Blur Off, Shadows Medium для стабильности. С этим нагнешь любой сервер, даже с рандомами.

    • r.NGX.DLSS=1 (Quality)
    • t.MaxFPS=144
    • foliage.DensityScale=0.5
    • r.Shadow.MaxResolution=1024

    Чит-коды лута и мета-билды под C4SH

    C4SH мета - магическая колода для AOE-дамага, комбо с Элли на хилле. Тестеры нашли эксплойты: фарм перламутровки у мини-боссов повторно через ресет. Легендарки дропаются чаще в коопе, билд на криты рвет монолит. Примеры билдов из чатов: стек на скорость + урон от карт.

    Билды, что ломают DLC

    • AOE-имба: C4SH с картами + класс-мод на сплеш, рвет толпы на леднике.
    • Босс-мелтер: Элли с хай-скором + легендарный шотган, 2 фазы за минуту.
    • Кооп-хилер: Манкубус-билд на щиты, держит тиму в хоррор-зонах.
    Билд Сильные стороны Слабости Для коопа?
    AOE C4SH Толпы врагов Боссы Да
    DPS Элли Сингл-таргет Мобы Нет
    Танк Манку Выживание ДПС Да

    Гринд после хоррора: что дальше в роадмапе

    Роадмап 2026 жирный - рейдовый босс в апреле, Takedown в мае, Story Pack 2 летом. Общий прогресс упростил фарм, но оптимизация под 50xx еще сырая. Народ думает: ждем патчей на статтеры или уже нагоняем рейтинги в кооп-рейдах. Хоррор-контент топ, но сервера иногда фризят под нагрузкой.


    0 0 0 Ответить
  • hannadevH
    hannadev
    Next.js 16: Turbopack по умолчанию, async params и next.config.ts для full-stack

    Обложка: Next.js 16: Turbopack по умолчанию с async params и нативным next.config.ts для оптимизации full-stack приложений

    Next.js 16 меняет правила игры для full-stack приложений. Turbopack стал дефолтным бандлером - сборки в 2-5 раз быстрее, Fast Refresh до 10x шустрее. Async params и searchParams упрощают стриминг и concurrent рендер, а нативный next.config.ts избавляет от JS-магии.

    Это решает боли больших проектов: долгие билды, блокирующий рендер, конфиг в JS вместо TS. Теперь код чище, оптимизации нативные, стейт кеша стабильный. Разберём, как мигрировать и выжать максимум из фич.

    Turbopack по умолчанию - конец webpack-эры

    Turbopack теперь дефолт во всех режимах: dev, build, даже в CI/CD. Это Rust-монстр с unified graph - один граф для client/server, никаких мульти-компиляторов. Incremental computation кеширует на уровне функций, lazy bundling собирает только запрошенное. В реальных аппах compile time падает на 67-900%, Fast Refresh летает.

    На больших проектах это спасение: раньше webpack жрал минуты на cold start, Turbopack с file system caching (beta) стартует мгновенно. Поддержка postcss.config.ts, SRI, tree shaking dynamic imports. Server Fast Refresh перезагружает только changed модули - рендер сервера как в браузере.

    Ключевые плюсы Turbopack:

    • 2-5x быстрее production builds - без конфиг-чейнджей.
    • 5-10x Fast Refresh - изменения видны instantly.
    • Unified graph - client/server в одном графе, меньше overhead.
    • Tree shaking на dynamic imports - бандл чище.
    Опция Dev Prod Что даёт
    turbopackInferModuleSideEffects true true Лучший tree shaking
    turbopackScopeHoisting false true Быстрее execution
    turbopackClientSideNestedAsyncChunking false true Оптимизированные чанки

    Если webpack нужен - opt-out через флаг, но зачем?

    Async params и searchParams - стриминг без блоков

    Params и searchParams теперь Promise по дефолту. Раньше sync доступ блокировали рендер: Next.js ждал URL-parse, DB-валидацию, network. Async позволяет стримить shell страницы, пока params резолвятся в фоне. Идеально для concurrent rendering и streaming.

    В page/layout компонентах типы меняются: params: Promise<{slug: string}>. Await’им и деструктурируем. generateStaticParams тоже async. Client’ы юзают useParams() хук. TypeScript типы строгие - [key: string]: string | string[] | undefined для searchParams.

    Пример миграции:

    // Next.js 15 - sync
    export default function Page({ params }: { params: { id: string } }) {
      return <div>{params.id}</div>;
    }
    
    // Next.js 16 - async
    export default async function Page({ params }: { params: Promise<{ id: string }> }) {
      const { id } = await params;
      return <div>{id}</div>;
    }
    

    Что обновить:

    • Все page/layout с params/searchParams - добавь async/await.
    • cookies(), headers(), draftMode() - тоже async.
    • generateStaticParams - верни Promise.
    Sync (старое) Async (новое) Почему лучше
    params.id await params Стриминг shell
    searchParams.sort await searchParams Concurrent рендер
    Блокировка рендера Background resolve Быстрее TTFB

    Нативный next.config.ts и новые caching APIs

    Next.config.ts теперь нативный - никаких “use client” хаков или JS-конфига. TS из коробки, автокомплит, типизация. Turbopack понимает .ts конфиг без танцев. Плюс стабильные caching APIs: revalidateTag(), updateTag(), refresh() - точный контроль кеша без ISR-хаков.

    Function-level caching через “use cache”. Cookies/headers async, deprecated флаги убраны (AMP, next lint). next/image с новыми дефолтами оптимизации. Middleware -> proxy.ts для чёткой network boundary.

    Новый кеш в действии:

    // lib/data.ts
    "use cache";
    
    export async function getRecommendations(userId: string) {
      const prefs = await fetchPreferences(userId);
      return await fetchRecommendations(prefs);
    }
    
    // API route для invalidation
    import { updateTag } from 'next/cache';
    export async function POST(req) {
      const { tag } = await req.json();
      await updateTag(tag);
      return Response.json({ ok: true });
    }
    

    Кешируй осознанно:

    • revalidateTag(‘posts-1’) - инвалидируй по тегу.
    • updateTag() - обнови без full revalidate.
    • refresh() - принудительный рефреш роута.

    Оптимизации full-stack под Next.js 16

    Full-stack аппы выигрывают от комбо: Turbopack ускоряет бэкендерский рендер, async params - фронт-стриминг, TS-конфиг - maintainability. Pair с headless CMS (типа Strapi/Payload) - webhook’и на updateTag для instant invalidation. i18n централизованно, image security tightened.

    В продакшене аудить breaking changes: async миграция, image defaults, removed AMP. CI/CD с Turbopack caching - билды летают. React 19.2 интеграция - новые хуки, compiler opts.

    Потенциал огромный:

    • Server Actions + async params = reactive full-stack.
    • Turbopack traces - дебаг slow builds.
    • Nested async chunking - меньше network.

    Фичи, которые ждут доработки

    Next.js 16 - солидный релиз, но Turbopack file system caching пока beta, некоторые webpack-plugins требуют адаптации. Async миграция в legacy коде - рутина, но скрипты ускорят. Стоит присмотреться к proxy.ts вместо middleware - чище архитектура.

    Дальше ждём stable Turbopack в edge runtime, deeper React 19 фичи. Для full-stack подумайте о hybrid рендере: static + dynamic по тегам. Оптимизации бесконечны - экспериментируйте с cache components.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    Интеграция Temporal API, TypeDoc и Prettier для автоматизации docs в TS: гайд 2026

    Обложка: Как интегрировать Temporal API с TypeDoc и Prettier для автоматизированной документации дат в TypeScript-проектах: гайд 2026

    В TypeScript-проектах с Temporal API часто приходится документировать workflows, activities и датовые структуры. Ручная работа с docs отнимает часы, а код меняется - и всё устаревает. Этот гайд покажет, как связать Temporal, TypeDoc и Prettier в пайплайн для автогенерации чистой документации. Получится статический сайт с актуальными примерами, форматированный идеально.

    Такой подход экономит время: один npm-скрипт - и docs готовы к деплою. Подходит для пет-проектов или продакшена с worker’ами. Разберём установку, конфиг и автоматизацию шаг за шагом.

    Что такое Temporal API и зачем docs автоматизировать

    Temporal - это платформа для оркестрации долгоживущих процессов в TS/Node.js. Workflows и activities там пишутся с датами, таймерами, ретраями - всё асинхронно и надёжно. Но без docs новички тонут в коде: как понять, какие даты передавать в activity или как сериализовать Date в workflow?

    TypeDoc парсит JSDoc-комменты и генерит HTML-сайт с типами, примерами. Prettier держит код и конфиги в одном стиле - никаких споров о кавычках или отступах. Вместе они решают проблему: код меняется - docs обновляются автоматически. Представь worker с background-check: даты проверок, статусы - всё документируется на лету. Логично перейти к настройке: сначала ставим пакеты, потом конфиги.

    • Установи Temporal TS SDK: npm i @temporalio/client @temporalio/worker
    • Добавь TypeDoc глобально или локально: npm i -D typedoc
    • Prettier для форматирования: npm i -D prettier
    • В tsconfig.json включи strict режим для точных типов дат.
    Инструмент Роль в пайплайне Пример флаг
    Temporal Workflows/Activities с датами scheduleToCloseTimeout: '1d'
    TypeDoc Генерация HTML из JSDoc --excludePrivate
    Prettier Форматирование .md и .json semi: false

    Настройка TypeDoc под Temporal workflows

    TypeDoc сканнит TS-файлы, pulls JSDoc и строит дерево классов. Для Temporal фокусируйся на interfaces для дат: interface CheckDate { start: Date; end: Date; }. В комментах добавляй @link на Temporal типы - документация станет интерактивной.

    Пример workflow с датами: worker регистрирует activities, TypeDoc описывает каждый метод. Prettier форматирует JSDoc - отступы ровные, код в блоках. Без этого docs - каша. А с пайплайном: измени Date в коде - перегенерируй и готово. Теперь к шагам конфигурации.

    1. Создай typedoc.json:
      {
        "entryPoints": ["src/workflows.ts"],
        "out": "docs",
        "readme": "README.md",
        "excludePrivate": true,
        "excludeExternals": true
      }
      
    2. В JSDoc для activity: /** @param dates: Date[] Проверяет сроки workflow */
    3. Нюанс: Temporal даты сериализуются в ISO - укажи в docs @returns string (ISO Date).
    4. Запуск: npx typedoc - получишь сайт в /docs.

    Сравнение до/после:

    Без автоматизации С TypeDoc + Prettier
    Ручные .md файлы Авто-HTML с типами
    Устаревшие даты Связь с кодом
    Разный стиль Prettier-идеал

    Интеграция Prettier в пайплайн документации

    Prettier - must-have для TS-проектов с Temporal: форматирует не только код, но и .rc файлы, JSDoc. Без него конфиги TypeDoc - с разными отступами, а README с двойными кавычками. Добавь скрипт в package.json - и всё на автопилоте.

    В Temporal-приложениях activities часто имеют Date-параметры: Prettier сделает их читаемыми. Пример: в workflows.ts форматирует new Date() в аккуратный блок. Связь с TypeDoc: сначала prettier src/, потом typedoc. Это цепочка: чистый код -> чистые docs. Разберём .prettierrc и npm-скрипты.

    • .prettierrc (в формате JS для комментариев):
      module.exports = {
        semi: false,
        singleQuote: true,
        trailingComma: 'es5',
        printWidth: 80
      };
      
    • Скрипт в package.json: "docs": "prettier . && typedoc"
    • Важно: Исключи node_modules: --ignore-path .prettierignore.
    • Интегрируй с VSCode: extension auto-format on save.

    Для Temporal добавь в .prettierignore: dist/, но держи src/ под форматированием.

    Автоматизация всего пайплайна с датами в фокусе

    Temporal workflows полны дат: retry dates, timeouts. Автоматизируй docs через GitHub Actions или локальный скрипт. TypeDoc увидит изменения в Date-типах, Prettier - отформатирует. Результат: деплоишь worker - docs обновлены.

    Пример worker кода с docs:

    import { Worker } from '@temporalio/worker';
    
    /** 
     * Workflow с датами проверок.
     * @param startDate - начало периода
     */
    export async function checkWorkflow(startDate: Date) { ... }
    

    Prettier сделает отступы, TypeDoc - с��раницу. Добавь husky для pre-commit: git commit -> format -> typedoc preview.

    1. Husky + lint-staged: npm i -D husky lint-staged
    2. .husky/pre-commit: npx lint-staged
    3. lint-staged: { '*.ts': 'prettier --write', '*.json': 'prettier --write' }
    4. CI-скрипт: npm run docs && deploy-to-gh-pages.
    5. Фича для 2026: Typedoc plugin для Temporal - auto-link workflows.
    Шаг пайплайна Команда Вывод
    Format npm run format Чистый код
    Docs gen npx typedoc HTML сайт
    Deploy gh-pages -d docs Онлайн docs

    Пайплайн готов - даты документированы на века

    Temporal + TypeDoc + Prettier дают docs, которые живут с кодом: измени Date в activity - сайт обновится. Осталось доработать: custom themes для TypeDoc под бренд, или интеграция с Temporal UI для live-примеров.

    В 2026 такие пайплайны - стандарт для TS-команд. Подумай о тестах: snapshot docs после каждого билда. Или ML-промпт для auto-JSDoc - но это уже следующий уровень.


    0 0 0 Ответить
  • GameFishG
    GameFish
    Legacy of Kain: Ascendance вышла вчера - отзывы о боях и 144 FPS на RTX 50xx

    Обложка: Legacy of Kain: Ascendance вышла вчера - первые отзывы о вампирских боях и оптимизация на RTX 50xx для 144 FPS

    Legacy of Kain: Ascendance вчера завезли на все платформы. Ребята на форумах уже катали полночи, делятся первыми впечатлениями от вампирских боек и оптимизации. Это 2D-акшн-платформер с быстрым геймплеем, где Kain и Raziel рубят врагов в Nosgoth.

    Зачем читать: разберём фидбек по комбатам, найдём слабые места в перформансе и дадим конфиги для RTX 50xx под 144 FPS. Поможет избежать фризов и статтеров с первого запуска, нагнуть боссов без лагов. Всё по делу, без спойлеров сюжета.

    Вампирские бои: имба или кривой порт?

    Первыми катнули на PS5, Xbox Series и PC - все пишут, что комбаты fluid combat на уровне, вертикальная механика прыжков и дашей позволяет комбоить толпы. Три протагониста с разными стилями: Kain - тяжёлый дамаг, Raziel - мобильность с когтями, третий - магические способности. Форумчане хвалят skill-driven play, где ascendance зарабатывается кровью через апгрейды. Но есть претензии: на Switch фреймрейт падает в боях, а на PC без тюнинга троттлинг жрёт CPU.

    Примеры из стримов: один стример набрал 50 убийств за минуту в арене, другой бомбит на мыльное сглаживание в пиксель-арте. Логика простая - бои заточены под ретро, но с современным флоу, как в Ninja Gaiden. Переходим к списку типичных жалоб и фиксам.

    • Комбо-система имба: цепочки ударов + вампирские перки дают 200+ DPS, но требует тайминга - промахнёшься, и мобы контратакуют.
    • Нюанс с контролем: на геймпаде идеально, клавиатура просит ремапа для даш-роллов.
    • Вертикальные секции: прыжки между платформами - пик геймплея, но камера иногда клипает.
    • Боссы с фазами требуют свитча персонажей - без этого не пробьёшь щиты.
    Платформа Бои (оценка/10) Слабые места
    PC (RTX 50xx) 9.2 Требует DLSS для плавности
    PS5 8.8 Редкие дропы FPS в кат-сценах
    Xbox Series 9.0 Стабильно, но без RT
    Switch 2 7.5 Фризы в толпе мобов

    Оптимизация на RTX 50xx: 144 FPS без пота

    На топовом железе игра летает, но стоковые сеты жрут VRAM как не в себя - 12 ГБ на ультра с RT. Форумщики тестили на 5090: базово 120 FPS в 1440p, с андервольтингом и DLSS 3.5 выжимают 200+. Проблема в пиксель-арте с шейдерами - троттлинг на 80C, если кулер слабый. Crystal Dynamics завезли поддержку Frame Generation, но без патча статтеры в вертикальных зонах.

    Реальные тесты: парень с 5080 в 4K держит 144 FPS на high, отключив RT - нагрев 65C. Ещё один с 5090Ti бомбит на кривая порта - жрёт 300 Вт в пике, но после OC стабильно 144+ locked. Логично: игра 2026 года, RTX 50xx - мета, но нужен тюнинг. Вот готовые конфиги.

    1. DLSS + FG включи сразу: Quality mode, FPS с 90 до 160 в боях.
    2. Андервольт GPU на -100mV: снижает троттлинг, температура -10C без потери фпс.
    3. NVIDIA Profile Inspector: cap FPS на 144, VSync off, Low Latency Ultra.
    4. RAM 32+ ГБ - иначе статтеры от подгрузки текстур.
    5. Драйверы 56x.xx - фиксят краши в Nosgoth-хабах.
    Сеттинг 1440p FPS 4K FPS VRAM usage
    Ultra RT 110 70 14 ГБ
    High DLSS 144 locked 100 9 ГБ
    Medium OC 180 144 7 ГБ

    Конфиг .ini для 144 FPS

    Открой config.ini в %appdata%/LoK Ascendance:

    [Graphics]
    Resolution=2560x1440
    VSync=0
    DLSS=1
    FrameGen=1
    RT=0
    TextureQuality=High
    
    [Performance]
    FPSCap=144
    Latency=Ultra
    Undervolt=-100
    

    Сохрани, перезапусти - и вперёд рвать серверы. Тестили на 5090 - ноль фризов.

    Что форумчане говорят о релизе

    Общий рейтинг на metacritic-like - 8.7/10, хвалят voice acting от оригинального каста, саундтрек Celldweller качает. Минусы: короткая кампания 8-10 часов, NG+ добавляет реплей. Стримеры отмечают интеграцию кат-сцен - не выкидывает из геймплея. На PC оптимизация лучше консолей, но Switch страдает от порта.

    Детали из чатов: 70% пишут про бои как лучшие в серии, 20% ноют на боссов без чекпоинтов. Логично подводим к таблице настроек по железу.

    • Плюсы боёв: разнообразие перков, blood earn механика.
    • Минус: редкие коллизии в платформах.
    • Кооп локальный - идеально для каток с коопом.
    • Мета-билды: Kain для дамага, Raziel для спидрана.
    Железо Стабильные FPS Рекомендации
    RTX 5090 200+ Ultra all
    RTX 5080 144 DLSS Quality
    RTX 4070 100 Medium + FG

    Гайд по нагнутым билдам

    Билды тестили на релиз-серверах: фокус на vampiric abilities - апгрейд крыльев для вертикалки, blood drain для хила. Форум топ: комбо Kain dash + Raziel claw - ваншот толпы. Против боссов свитч на магического перса для дебаффов. Без этого фарм вечный.

    Примеры: в арене 3 волны - билд с перк Ascendance Blood даёт +50% скорости. Тестили - time attack на 2 минуты короче. Переходим к списку.

    1. Kain Heavy: Strength perks, dash damage x2.
    2. Raziel Agile: Claw chain + glide для платформ.
    3. Mage Hybrid: Spells pierce щиты, heal on kill.
    4. Общий апгрейд: Prioritize mobility - лагов меньше.
    Билд DPS Мобильность Vs боссы
    Kain High Medium 9/10
    Raziel Medium High 7/10
    Mage High Low 10/10

    Нагрев и апгрейд под будущие патчи

    Игра вышла вчера, патчи впереди - ждём фиксов для Switch и RT на PC. Остаётся за кадром мультиплеер, но слухи о arena mode. Стоит подумать над custom shaders для моддеров - пиксель-арт тюнится легко. Форумчане уже рвут демо Lok 6 из коллекции, ждут контент. Короче, серия ожила, но оптимизация доработается.


    0 0 0 Ответить
  • hannadevH
    hannadev
    React 19 Compiler + Actions API: автооптимизация async форм без мемоизации

    Обложка: React 19 Compiler с Actions API для автоматической оптимизации асинхронных операций в формах без ручной мемоизации

    React 19 Compiler меняет правила игры для асинхронных форм. Вместе с Actions API он автоматически оптимизирует рендеры, убирая boilerplate с useCallback и memo. Забудьте ручную мемоизацию - теперь стейт обновляется отзывчиво, даже при тяжёлых запросах.

    Это решает боль с перерендерами в формах: кнопки не дергаются, данные показываются мгновенно с optimistic updates. Код становится чище, бандл меньше, а UX - огонь. Погнали разбирать, как это работает на практике.

    Compiler: автоматическая мемоизация под капотом

    React Compiler - это killer-фича React 19. Он сканирует код на этапе сборки и автоматически мемоирует компоненты, хуки и колбэки. Нет нужды таскать useMemo, useCallback или React.memo - компилятор сам оптимизирует, чтобы избежать лишних рендеров.

    Для async операций в формах это магия: раньше submit-handler перерендеривал всю форму при каждом изменении стейта. Теперь Compiler видит паттерны и кэширует их умно. Представь форму профиля - input меняется, но тяжёлый async submit не триггерит цепочку ререндеров. Плюс интегрируется с Actions API для серверных вызовов без race conditions.

    В итоге бандл летает, а линтер не ноет на пропс-дриллинг. Вот ключевые оптимизации:

    • Авто-мемоизация колбэков: submitAction не пересоздаётся при каждом рендере, даже если стейт формы меняется.
    • Смарт-кэш стейта: Compiler понимает зависимости и не трогает чистые части UI во время async.
    • Zero-config для форм: Никаких wrapper’ов - просто пиши action и хук, компилятор подхватит.
    До Compiler С Compiler + Actions
    useCallback для submit, memo для Form Автооптимизация, код в 2 раза короче
    Ручной трекинг pending/error useActionState берёт на себя
    Перерендеры при optimistic updates Только нужные части UI обновляются

    Нюанс: Compiler работает только в build-time, dev-режим показывает предупреждения для дебаггинга.

    Actions API: async без боли

    Actions - это серверные функции с директивой ‘use server’, которые клиент вызывает прямо из формы. Они тянут за собой стейт: pending, error, success - всё автоматически. useActionState хук возвращает [state, action, isPending] - и вуаля, форма управляется без кастомного редьюсера.

    Пример: форма редактирования профиля. Пользователь меняет имя, жмёт submit - action улетает на сервер, UI показывает optimistic name сразу, кнопка disables через isPending. Если сервер вернул ошибку, откат без лишнего кода. Compiler здесь усиливает: action не ре-креируется зря, мемоизация на автопилоте.

    Код супер-короткий:

    const [state, submitAction, isPending] = useActionState(updateProfile, {error: null});
    
    <form action={submitAction}>
      <input name="name" />
      <button disabled={isPending}>Сохранить</button>
    </form>
    

    Серверный action:

    'use server';
    
    export async function updateProfile(prevState, formData) {
      const name = formData.get('name');
      // async запрос к БД
      if (!valid) return {error: 'Имя короткое'};
      return {success: true};
    }
    

    Преимущества в списке:

    • Optimistic updates с useOptimistic: Покажи изменения сразу, откати при ошибке - Compiler оптимизирует рендеры.
    • useFormStatus для кнопок: Ближайшая форма в статусе pending? Кнопка сама disabled.
    • Интеграция с SSR: Actions работают в Server Components, рендер на сервере без гидратации проблем.
    Хук Что даёт для форм Compiler бонус
    useActionState state + action + pending Мемоизация стейта
    useOptimistic Мгновенный UI Нет ререндеров фона
    useFormStatus Статус submit Авто-оптимизация кнопок

    Важно: Actions стабильны только с React 19 RC+, проверь next.js совместимость.

    Практика: форма с полной оптимизацией

    Соберём реальную форму регистрации. Actions API + Compiler = ноль мемоизации, но всё летает. Стейты: loading spinner, error message, optimistic preview. Компилятор видит, что input-ончэйнджи не дергают submit, и не рендерит зря.

    Шаг за шагом: action на сервере валидирует и сохраняет юзера. Клиент: useActionState трекает, useOptimistic показывает ‘Добро пожаловать, [name]!’ сразу. Если fail - откат + error toast. Без этого был бы useEffect-hell с race conditions.

    Ключевые трюки:

    1. Серверный action с ретраями: Встроенная обработка ошибок, prevState для retry.
    2. Формы без JS: action в работает даже без клиентского бандла.
    3. Интеграция с use(): Для async data в рендере - const user = use(fetchUser()); Compiler кэширует.

    Пример полного снippet’а:

    function RegisterForm() {
      const [state, registerAction, pending] = useActionState(registerUser, null);
      const [optimisticEmail, addOptimistic] = useOptimistic('', (state, email) => email);
    
      return (
        <form action={registerAction}>
          <input name="email" onChange={e => addOptimistic(e.target.value)} />
          {state?.error && <p>{state.error}</p>}
          <button disabled={pending}>Регистрация</button>
        </form>
      );
    }
    

    Это сокращает код на 70% vs старый useState + useEffect. Compiler tip: Добавь babel-plugin-react-compiler в vite/rollup для prod.

    Когда Compiler + Actions взлетают на максимум

    Комбо идеально для дашбордов, CRUD-форм, чатов. Async мутации без лагов: список обновляется optimistic, сервер подтверждает - рендер только дельты. В Next.js 15+ Turbopack ускоряет билд с Compiler’ом.

    Ограничения честно: не для динамических eval-кодов, нужен стабильный build. Но для 90% форм - dream come true. Подумай над миграцией legacy-форм: начни с простых actions, Compiler сам подхватит оптимизации. А дальше эксперименты с use в Server Components для hybrid SSR.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    Интеграция Cursor AI с TypeScript и Node.js для автоматизации код-ревью в пет-проектах: DIY-гайд 2026

    Обложка: Как интегрировать Cursor AI с TypeScript и Node.js для автоматизации код-ревью в пет-проектах: DIY-гайд 2026

    Cursor AI - это AI-редактор на базе VS Code, который идеально заточен под TypeScript и Node.js. С ним автоматизировать код-ревью в пет-проектах становится проще простого: меньше рутины, больше фокуса на архитектуре.

    Зачем это нужно? Пет-проекты часто тонут в мелочах - типизация, рефакторинг, тесты. Cursor берёт это на себя через смарт-промпты и .cursorrules, ускоряя процесс в разы. Получишь готовый workflow для ревью без лишних инструментов.

    Настройка Cursor AI под TypeScript/Node.js стек

    Cursor работает как турбо-VS Code с AI внутри, но заточен именно под JS/TS. Установка простая: скачиваешь с официалки, логинишься под Pro (бесплатка для тестов хватит), импортируешь расширения из VS Code. Главное - создать .cursorrules в корне проекта. Это файл с правилами для AI: там задаёшь стиль кода, типизацию, паттерны. Без него Cursor будет гадать, а с ним - выдавать код под твой стек.

    Пример: в Node.js пет-проекте с Express и TypeScript .cursorrules решает, чтобы все функции шли с JSDoc, async/await и строгой типизацией. Тестировал на репо с API - AI сразу предлагает фиксы для уязвимостей вроде SQL-инъекций или утечек памяти. Логично перейти к базовым горячим клавишам, они ускоряют ревью.

    • Ctrl+K (Cmd+K): Выдели код, напиши промпт вроде “Добавь типизацию TypeScript и обработку ошибок” - AI перепишет фрагмент.
    • Ctrl+L (Cmd+L): Чат с проектом - спрашивай “Найди баги в роутере auth”. Получишь анализ всего codebase.
    • Tab: Автодополнение с контекстом - для TS предлагат unimported типы и импорты.
    • @файл: В чате ссылайся на конкретные модули для точного ревью.
    Фича Что делает в ревью Пример промпта
    Ctrl+K Локальный рефакторинг “Рефакторь в функциональный стиль с async/await”
    Ctrl+L Глобальный анализ “Проверь на производительность весь сервер”
    Tab Быстрые фиксы Авто-типизация переменных

    Создание скрипта для автоматизированного код-ревью

    Автоматизация ревью - это когда Cursor не просто подсказывает, а сам генерит отчёт с фиксами. Пишешь Node.js скрипт на TS, который парсит файлы, шлёт в Cursor Agent Mode и применяет изменения. Agent Mode - это многошаговый режим: “Проанализируй роутеры, найди уязвимости, добавь тесты, закоммить”. В пет-проектах это спасает от ручного чесания репозитория.

    Представь API на Node.js с Prisma: скрипт сканирует эндпоинты, Cursor проверяет на race conditions, типы и ESLint-виолейшены. Выход - патч с diffs. Подводит к списку шагов: от установки зависимостей до деплоя скрипта как npm-скрипта.

    1. Установи deps: npm i -D typescript @types/node ts-node.
    2. Создай review.ts: читай файлы через fs, генерируй промпт с @контекстом.
    3. Интегрируй Cursor API (через Composer): отправляй батчи кода на анализ.
    4. Применяй фиксы: git apply или ручной merge.
    5. Добавь CI: в package.json “review”: “ts-node review.ts”.

    Код примера review.ts:

    import fs from 'fs';
    import path from 'path';
    
    async function reviewFiles(dir: string) {
      const files = fs.readdirSync(dir).filter(f => f.endsWith('.ts'));
      for (const file of files) {
        const code = fs.readFileSync(path.join(dir, file), 'utf8');
        const prompt = `@${file} Проверь типы, добавь JSDoc, оптимизируй. `;
        // Здесь Cursor Composer API
        console.log(`Ревью ${file}: ${await cursorReview(prompt + code)}`);
      }
    }
    

    Промпты и .cursorrules для Node.js пет-проектов

    Промпты - сердце автоматизации. В Cursor они понимают контекст проекта, особенно TS/Node. .cursorrules усиливает: пишешь правила вроде “Всегда strict TS, Zustand для стейта, React Query для сервера”. Для ревью добавляешь проверки на security, perf и best practices. Реальные примеры: “Добавь rate limiting в роутеры” - и вуаля, готовый middleware.

    В пет-проекте с WebSocket-сервером промпт “Проверь на утечки соединений, добавь graceful shutdown” генерит хуки для process.on(‘SIGTERM’). Логично к списку готовых промптов и таблице сравнения с ручным ревью.

    • “Рефакторь handlers на async/await с try-catch”.
    • “Добавь unit-тесты для всех public API”.
    • “Проверь на SQL-инъекции в Prisma queries”.
    • Нюанс: Для больших проектов юзай @project - анализирует всё репо.
    Ручное ревью Cursor автоматизация
    2 часа на 10 файлов 10 мин с отчётом
    Пропускает edge-кейсы Ловит 90% багов
    Субъективно По .cursorrules

    Масштабирование на CI/CD и мультипроекты

    В пет-проектах ревью должно работать в GitHub Actions или локально. Cursor интегрируется через CLI или API, скрипт пушит фиксы в PR. Для мультипроектов - monorepo с Turborepo: один .cursorrules на все пакеты. Agent Mode берёт на себя ревью changesets.

    Пример: в Node.js монопо с frontend/backend Cursor ревьюит кросс-стек: “Синхронизируй типы между client/server”. Подводит к шагам деплоя и лимитам Pro-тарифа.

    • Настрой GitHub Action: cursor-review on pull_request.
    • Лимит: 500 запросов/день на Pro, для пет-проектов хватит.
    • Важно: Privacy Mode - код не уходит на сервера Cursor.

    Cursor в продакшене пет-проектов - что дальше

    Автоматизация ревью через Cursor меняет игру для TS/Node.js: от хаоса к чистому коду за минуты. Осталось доработать: интегрировать с SonarQube для метрик или LLM для архитектурных советов.

    Дальше думай о кастомных агентах - они уже в роадмапе 2026. Или комбо с другими тулами вроде Cline для edge-кейсов. В пет-проектах это эволюционирует в full AI-devops.


    0 0 0 Ответить
  • hannadevH
    hannadev
    React 19.2: useEffectEvent и Activity для чатов с Partial Pre-rendering

    Обложка: React 19.2: useEffectEvent с Activity для стабильных уведомлений в чат-компонентах с Partial Pre-rendering

    В React 19.2 хук useEffectEvent и компонент решают проблемы с лишними ререндерами в чат-компонентах. Они позволяют стабилизировать уведомления и события, не засоряя зависимости эффектов. Это упрощает код для реального времени, особенно с Partial Pre-rendering.

    Чаты часто страдают от переподключений из-за мелких стейт-изменений вроде темы или muted. useEffectEvent выносит event-логику из эффекта, сохраняя актуальные пропсы. Activity добавляет контроль видимости для SSR-оптимизаций. Получится чистый бандл без лишних сайд-эффектов.

    useEffectEvent: стабильные события без перезапусков

    useEffectEvent - это хук, который оборачивает колбэки для эффектов. Он создает стабильную ссылку на функцию, где всегда свежие стейты и пропсы. В чатах это решает проблему: смена темы не триггерит реконнект комнаты. Раньше приходилось танцевать с useCallback и рефами, чтобы не добавлять лишние зависимости в useEffect.

    Представь чат-компонент: подключаешься к roomId, показываешь уведомление с theme. Без хука эффект зависит от [roomId, theme], и любая смена темы рвет соединение. С useEffectEvent onConnected() всегда видит latest theme, но эффект зависит только от roomId. Линтер ругается, если юзать не в эффекте - это защита от misuse.

    Ключевые правила использования:

    • Определяй хук прямо перед useEffect, который его юзает.
    • Только для event-like логики: уведомления, аналитика, DOM-события из эффекта.
    • Не передавай в другие компоненты или хуки - это не useCallback.
    Сравнение подходов Без useEffectEvent С useEffectEvent
    Зависимости эффекта [roomId, theme] - лишние рестарты [roomId] - стабильный коннект
    Доступ к стейту Только на момент создания Всегда актуальный
    Код useCallback + рефы, боль Один хук, чисто

    Activity для чат-уведомлений в Partial Pre-rendering

    - компонент, который детектит, активен ли кусок UI. В React 19.2 он интегрируется с Partial Pre-rendering: сервер рендерит статичные части, а динамику (уведомления чата) - на клиенте. Для чатов это киллер-фича: уведомления не флашат при гидратации.

    В типичном чате Activity оборачивает badge с новыми сообщениями. Пропс activity управляет видимостью: true - показывай, false - спрячь до рендера. Это предотвращает SSR-мигания, когда сервер не знает о WebSocket-данных. Комбинируй с useEffectEvent для уведомлений - получишь smooth чат без лагов.

    Плюсы Activity в чатах:

    • Контроль SSR: статичные части пререндерятся, динамика ждет.
    • Интеграция с Suspense: батчинг обновлений для стейта сообщений.
    • Простота: Badge.

    Пример кода:

    function ChatNotifications({ newMessages, theme }) {
      const showNew = useEffectEvent(() => {
        if (newMessages > 0) {
          showToast(`New messages! Theme: ${theme}`, theme);
        }
      });
    
      useEffect(() => {
        if (newMessages > 0) showNew();
      }, [newMessages]);
    
      return (
        <Activity activity={newMessages > 0}>
          <div className="badge">+{newMessages}</div>
        </Activity>
      );
    }
    

    Комбо: useEffectEvent + Activity в реальном чате

    Соберем чат-компонент: WebSocket-коннект, уведомления, Partial Pre-rendering. useEffectEvent убирает theme/muted из зависимостей, Activity прячет badge до активности. Эффект запускается только по roomId - никаких лишних реконнектов. В SSR сервер рендерит пустой чат, клиент дорисовывает уведомления без фликера.

    Проблемы старого подхода: эффект рестартится на каждый стейт-чейндж, чат отваливается. Новое: стабильный коннект + актуальные пропсы + умный рендер. Линтер хвалит, бандл меньше, UX на уровне. Тестировал в продакшене - уведомления летают как ракета.

    Список оптимизаций:

    • Стабилизируй все DOM-event handlers через useEffectEvent.
    • Оборачивай уведомления и badges в Activity для SSR.
    • Не забывай cleanup: return () => connection.disconnect().
    • Комбинируй с cacheSignal для фетчинга сообщений.
    Метрика До React 19.2 После
    Рестарты эффекта 5+ на смену темы 0
    Время гидратации 500ms с фликером 150ms smooth
    Размер бандла +20% от useCallback Оптимально

    Когда не хватит этих фич

    useEffectEvent и Activity закрывают 80% кейсов чат-компонентов, но для сложных сценариев думай о Signals или full Suspense. Осталось за кадром: интеграция с React Server Components для стримминга сообщений. Или как батчить уведомления с useTransition. В реальных проектах это ускорит TTI в 2 раза.

    Тестируй на Partial Pre-rendering - увидишь магию. Дальше копай cacheSignal для query-логики в чатах.


    0 0 0 Ответить
  • hannadevH
    hannadev
    React 19: useActionState и useFormStatus для форм без боли

    Обложка: React 19: useActionState с useFormStatus для упрощения состояний форм с автоматической обработкой ошибок и загрузки

    React 19 упрощает работу с формами через useActionState и useFormStatus. Эти хуки берут на себя стейт загрузки, ошибки и pending-состояния. Забудьте про кастомные useState для каждого сабмита - теперь всё автоматом.

    Проблема знакомая: форма отправляется, кнопка не блочится, юзер спамит сабмиты, ошибки не показываются. useActionState решает это одним махом, а useFormStatus даёт точный статус внутри формы. Получается чистый код без лишнего бойлерплейта.

    useFormStatus: статус формы без телепатии

    useFormStatus - хук из react-dom, который читает состояние родительской

    . Он возвращает pending (идёт ли отправка), data (FormData с полями) и другие детали. Главное ограничение: вызывать только внутри компонента, вложенного в form с action. Никаких onSubmit - только action={…}.

    Представь форму логина. Кнопка должна дизейблиться на время запроса, а под ней показываться “Логин: username…”. Без этого хука пришлось бы пробрасывать стейт через контекст или props drilling. Теперь просто кидаешь useFormStatus в кнопку или спиннер - и всё работает из коробки. Логично подводит к реальным примерам.

    Вот базовый usage:

    • pending: true пока action выполняется. Идеально для disabled на кнопке.
    • data: FormData с name/value полей. Можно get(‘username’) и показать в UI.
    • Нюанс: работает только для ближайшей , игнорит вложенные или параллельные.
    import { useFormStatus } from 'react-dom';
    
    function SubmitButton() {
      const { pending, data } = useFormStatus();
      return (
        <button disabled={pending}>
          {pending ? 'Отправляем...' : 'Сабмит'}
          {pending && data?.get('username') && 'Логин: ' + data.get('username')}
        </button>
      );
    }
    
    Поле Тип Описание
    pending boolean true во время action
    data FormData/null Данные формы или null
    method string/null GET/POST из form
    action function/null Функция из action пропа

    useActionState: стейт + action в одном флаконе

    useActionState из ‘react’ - это тройка: [state, action, isPending]. Передаёшь функцию-обработчик, initialState - и хук сам обновляет стейт после сабмита. Функция получает prevState и FormData, возвращает новый стейт. Автоматически управляет pending.

    Кастомный пример: форма добавления юзера. Отправляем на сервер, ловим ошибку или список. Без хука - useState для errors, отдельный для loading, синхронизация вручную. Здесь action цепляется к form action={action}, стейт рендерит ошибки/результат. Киллер-фича - optimistic updates в связке с useOptimistic.

    Ключевые фичи:

    • state: текущее состояние после action (error, data, success).
    • action: готовую функцию для .
    • isPending: true во время выполнения (новое в React 19).
    • Важно: функция async, возвращает новое состояние для ререндера.
    const updateName = async (prevState, formData) => {
      const name = formData.get('name');
      try {
        // API call
        return { name, error: null };
      } catch {
        return { ...prevState, error: 'Ошибка сервера' };
      }
    };
    
    const [state, formAction, isPending] = useActionState(updateName, { name: '', error: null });
    
    <form action={formAction}>
      <input name="name" />
      <button disabled={isPending}>Обновить</button>
      {state.error && <p>{state.error}</p>}
    </form>
    

    Комбо useActionState + useFormStatus: формы без костылей

    Вместе эти хуки - мечта фронтендера. useActionState держит глобальный стейт формы (ошибки, данные), useFormStatus - локальный статус для кнопок/спиннеров внутри. Разделение идеальное: state для результата, status для UX во время pending.

    Реальный кейс - upload файла. useActionState обрабатывает серверный ответ {success, message}, useFormStatus блочит кнопку и показывает прогресс с data.get(‘file’).name. Нет нужды в Redux или Context - чистый React. Подводит к сравнению подходов.

    Преимущества связки:

    • Автоматическая блокировка кнопок без props.
    • Ошибки из сервера сразу в стейт без try/catch везде.
    • FormData нативно: никаких controlled inputs с value/onChange.
    • Ограничение: только Server Actions или функции с fetch.
    Старый подход Новый с хуками
    useState(loading), useState(error), useState(data) Один useActionState
    onSubmit с e.preventDefault() form action={…}
    Props drilling для кнопок useFormStatus внутри
    Ручная синхронизация Авто-рендер после action
    function UploadForm() {
      const [state, uploadAction, isUploading] = useActionState(handleUpload, null);
      return (
        <form action={uploadAction}>
          <input name="file" type="file" />
          <SubmitButtonWithStatus /> {/* useFormStatus внутри */}
          {state?.message && <p>{state.message}</p>}
        </form>
      );
    }
    

    Когда хуки показывают зубы: edge cases

    Не всё так радужно - есть нюансы. useFormStatus не видит вложенные формы, useActionState требует action функции. Плюс SSR: pending работает только после hydration. Но плюсы перевешивают.

    Тестировал на login/uprofile формах - спам сабмитов ушёл, ошибки отображаются миганием стейта. Для сложных форм с валидацией комбинируй с react-hook-form, но базовые кейсы покрыты.

    Частые подвохи:

    • Вызов useFormStatus вне - всегда null.
    • Async функции в action: без await стейт не обновится.
    • Инициализация: передавай fallback для SSR.

    Формы эволюционируют дальше

    useActionState с useFormStatus - шаг к declarative формам в React 19. Осталось за кадром useOptimistic для интерактивности и полная замена react-hook-form в простых кейсах. Стоит поэкспериментировать с Server Actions в Next.js - там раскрываются на полную.

    Эти хуки меняют workflow: меньше стейта, больше action. Дальше ждём улучшений в hydration и typed FormData.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    import defer с Webpack и TypeScript: гайд по отложенному импорту для крупных приложений 2026

    Обложка: Как интегрировать import defer с Webpack и TypeScript для оптимизации загрузки крупных веб-приложений: гайд по отложенному импорту модулей 2026

    Крупные веб-приложения тормозят на старте из-за кучи модулей, которые грузятся сразу. import defer решает эту проблему - модули не выполняются, пока не понадобятся. В гайде разберём, как интегрировать его с Webpack и TypeScript для реальной оптимизации.

    Это фича из TypeScript 5.9, которая откладывает выполнение кода до первого доступа к экспортам. Полезно для тяжёлых библиотек или платформо-зависимых фич. Зачем это нужно? Чтобы bundle не раздувался, а app запускался быстрее - особенно в 2026, когда браузеры уже поддерживают нативно.

    Что такое import defer и зачем его юзать в больших проектах

    import defer - это синтаксис из ECMAScript proposal на stage 3. Он позволяет импортировать модуль namespace’ом, но код внутри не выполняется сразу. Только когда достанешь свойство - типа mod.foo(). Обычный import всё прогоняет моментально, даже если фича не нужна.

    Представь: у тебя app с чартами, 3D-рендером и аналитикой. Всё грузится на старте - 5 секунд лаги. С defer рендер подгружается только при клике на кнопку. Webpack с этим дружит экспериментально, TypeScript пропускает синтаксис без трансформа. В 2026 bundler’ы уже зрелые, но нюансы есть - разберём.

    • Синтаксис простой: import defer * as heavyLib from './heavy-lib.js'; - только namespace, named или default не катят.
    • Выполнение откладывается: side-effects типа init() сработают при первом доступе - heavyLib.init().
    • Загрузка происходит сразу: модуль скачивается, но не исполняется - разница в execution.
    • Нюанс: Работает в --module esnext или preserve, без downleveling.
    Обычный import import defer
    Выполняется сразу Откладывается до доступа
    Все side-effects на старте Только при необходимости
    Больше initial bundle time Быстрее запуск app

    Настраиваем TypeScript для import defer

    TypeScript 5.9+ понимает defer из коробки, но не трансформирует - ждёт нативку или bundler. В tsconfig.json ставь “module”: “esnext” или “preserve”. Компилятор проверит типы, но код оставит как есть. Идеально для современных браузеров и Node 20+.

    Проблема: старые браузеры не поймут. Webpack или esbuild возьмут на себя трансформ в Proxy или code splitting. Пример - тяжёлая lib с init(), которая мутирует global. Без defer она сломается на старте, с defer - ждёт вызова. В реальном проекте это спасает от ненужных console.log и сетевых вызовов.

    1. Обнови TS до 5.9+: npm i -D typescript@latest.
    2. В tsconfig:
    {
      "compilerOptions": {
        "module": "esnext",
        "target": "ES2022"
      }
    }
    
    1. Тестируй: tsc --noEmit - синтаксис проверится.

    Важно: Нет type stripping для defer - всё на runtime.

    import defer * as analytics from './analytics.ts';
    
    function trackEvent() {
      analytics.track('click'); // Тут только выполнится init
    }
    

    Интеграция с Webpack: код и конфиг

    Webpack экспериментально мержнул поддержку defer в свежих версиях. Используй ts-loader или swc-loader для TS. В webpack.config.ts настрой rules для .ts(x). Bundler превратит defer в lazy chunk или Proxy - если namespace не утекает, оптимизирует без overhead.

    Пример: app с модалкой, где heavy UI lib. Без defer - весь bundle 2MB, с defer - initial 500KB, остальное on-demand. В production mode Webpack сделает splitChunks. Плюс magic comments для preload: /* webpackPreload: true */. В 2026 это стандарт для SPA.

    • Установи: npm i -D webpack webpack-cli ts-loader typescript.
    • webpack.config.ts:
    import webpack from 'webpack';
    
    export default {
      entry: './src/index.ts',
      module: {
        rules: [{ test: /\.tsx?$/, use: 'ts-loader' }]
      },
      resolve: { extensions: ['.ts', '.js'] },
      experiments: { importDefer: true } // Экспериментально!
    };
    
    • Билдь: npx webpack.
    Loader Поддержка defer Скорость
    ts-loader Через TS 5.9 Средняя
    swc-loader Нативно Быстрее
    babel С плагином Стабильно

    Практические примеры и оптимизации для крупных apps

    Возьми дашборд: график с Chart.js (тяжёлый), таблица и карты. Defer’ь Chart.js - импортируй в компоненте, юзай при рендере. В React/ Vue это lazy component. Webpack разобьёт на chunks: main.js + chart.[hash].js. Initial load - молния.

    Ещё кейс: платформо-специфика. Мобильный детект - defer мобильные шрифты или PWA фичи. Side-effects не сломают десктоп. Тести в Chrome Canary - нативно летает. Минус: Proxy overhead если namespace leak’нет - держи локально.

    1. В React:
    import defer * as Charts from './charts';
    const LazyChart = () => <div>{Charts.Chart()}</div>;
    
    1. Code splitting: Добавь webpackChunkName: "charts".
    2. Метрики: Lighthouse покажет First Contentful Paint на 30-50% лучше.

    Про*: Меньше memory на старте. Контра: Только namespace.

    Фичи, которые Webpack ещё не проглотил

    Экспериментальная поддержка в Webpack значит caveats: не все плагины дружат. Если app на esbuild - жди релиза, пока GitHub issue открыт. TypeScript пасsthrough - типы ок, runtime на bundler. В 2026 подумай о source imports как компаньоне defer.

    Можно комбинировать с dynamic import() для полного lazy. Останется поэкспериментировать с SSR в Next.js - defer там сломает hydration, фикс через no-initialize.


    0 0 0 Ответить
  • hannadevH
    hannadev
    React 19.2: Activity с Partial Pre-rendering для фоновой загрузки в навигационных панелях

    Обложка: React 19.2: Компонент Activity с Partial Pre-rendering для фоновой загрузки данных в навигационных панелях

    React 19.2 приносит Activity - компонент, который меняет подход к фоновой загрузке данных. Вместо условного рендера, который убивает стейт и триггерит лишние useEffect, Activity держит всё в памяти, но рендерит с низким приоритетом. Это идеально для навигационных панелей, где сайдбары или меню нужно предзагружать заранее.

    Partial Pre-rendering дополняет картину: статическая оболочка страницы летит с CDN мгновенно, а динамические части дорисовываются позже через Suspense. Проблема типичных дашбордов с лагами при переключении табов уходит в прошлое. Представь: пользователь кликает на пункт меню - контент уже готов, без спиннеров и подгрузок.

    Что такое Activity и зачем он в навигационных панелях

    Activity - это обёртка для компонентов, которая управляет видимостью через mode: ‘visible’ или ‘hidden’. В hidden-режиме компонент рендерится в фоне, не жрёт ресурсы видимого UI, но сохраняет весь стейт, хуки и данные. Раньше для сайдбара в навигации ты писал isVisible && , и при каждом скрытии - полный unmount, заново fetch данных, ререндеры. Теперь Activity прячет через CSS display: none, держит дерево живым.

    В навигационных панелях это киллер-фича. Пользователь на главной - сайдбар с меню предзагружает данные из CMS или API в фоне. Кликнул на ‘Аналитика’ - переключаем mode на visible, и всё мгновенно, без задержек. Partial Pre-rendering усиливает: статический шелл (кнопки, структура) кэшируется, динамика (графики, таблицы) догоняет асинхронно. Производительность взлетает, особенно в больших дашбордах с lazy-loading.

    • Сохранение стейта: Формы в скрытых табах не теряют ввод пользователя - вернёшься, и данные на месте.
    • Фоновая предзагрузка: use() или TanStack Query prefetch работают незаметно, пока UI responsive.
    • Низкий приоритет рендера: React не блокирует основной поток, hidden-компоненты рендерятся лениво.
    • Интеграция с Suspense: Границы Suspense внутри Activity не ломают стриминг SSR.
    Подход Рендер Стейт Производительность Пример для навигации
    Условный && Удаляет DOM Теряется Быстрый unmount Лаги при возврате
    display: none Скрывает Сохраняется Средняя Лучше, но без предзагрузки
    Activity Фон + низкий приоритет Полностью живой Топ Мгновенные табы
    Partial Pre + Activity CDN шелл + resume Живой Максимум Дашборды enterprise

    Partial Pre-rendering: как это работает под капотом

    Partial Pre-rendering разбивает рендер на фазы: сначала статический prelude (оболочка) генерится на билде и кэшируется в CDN. Динамические дыры (Suspense boundaries) откладываются как postponed. На сервере по запросу resume() достраивает их из сохранённого состояния и стримит в браузер. В связке с Activity это магия: навигационная панель предрендерится статично, а контент табів - в фоне.

    Для навигации пример: главная панель - статический шелл с иконкам�� и лейблами. Каждый таб (аналитика, профиль) в Activity hidden, с prefetch данных. Пользователь кликает - mode=‘visible’, resume заполняет дыры. Нет больше FID-лагов или CLS-скачков. API простые: prerender() возвращает {prelude, postponed}, resume() стримит остаток. В React 19.2 это работает из коробки с React Server Components.

    • prerender(App): Разделяет на стат/дин, prelude на CDN.
    • resume(postponed): Достраивает по запросу, стримит клиенту.
    • Интеграция с Activity: Hidden-табы рендерятся с низким приоритетом внутри postponed.
    • Бенефиты для Core Web Vitals: LCP падает, так как шелл мгновенный.
    • SSR батчинг: Suspense раскрывается пачками, как на клиенте.
    import { prerender, resume } from 'react-dom/server';
    
    const { prelude, postponed } = await prerender(<NavPanel />, { signal });
    // prelude -> CDN
    
    const stream = await resume(<NavPanel />, postponed);
    // Динамика стримится
    

    Практический пример: Activity в навигационной панели

    Представь дашборд с сайдбаром: табы ‘Dashboard’, ‘Users’, ‘Settings’. Каждый - отдельный компонент с fetch из API. Без Activity переключение = unmount + loader + remount. С Activity оборачиваем <Activity mode={activeTab === ‘users’ ? ‘visible’ : ‘hidden’}> . Пока неактивный, он prefetch’ит данные через use(), держит стейт.

    В Partial Pre: корень навигации в prerender, табы - postponed с Activity внутри. Статика (иконки, структура) - CDN. Динамика (таблицы, чарты) resume по клику. Код лаконичный, без бойлерплейта. Нюанс: в hidden всегда display: none, не влияет на layout. Оптимизация бандла: lazy() для табів внутри Activity не ломает предзагрузку.

    function NavPanel() {
      const [activeTab, setActiveTab] = useState('dashboard');
      return (
        <div className="nav-container">
          <Activity mode={activeTab === 'dashboard' ? 'visible' : 'hidden'}>
            <DashboardTab />
          </Activity>
          <Activity mode={activeTab === 'users' ? 'visible' : 'hidden'}>
            <UsersTab prefetchData />
          </Activity>
        </div>
      );
    }
    
    • Prefetch с TanStack: В hidden useQuery prefetch’ит silently.
    • Форм-стейт: Inputs не сбрасываются при смене таба.
    • Модалки и оверлеи: Предрендер в фоне, мгновенный show.

    Нюансы и подводные камни Activity + Partial Pre

    Activity не магия - в hidden рендер ленивый, но если данных тонна, может подтормаживать слабые девайсы. Всегда комбинируй с Suspense для границ. Partial Pre требует серверного setup: prerender на билде, resume на edge. В dev-режиме фоллбэк на full-render. Для навигации мониторь память - hidden Activity сожрёт RAM.

    Тестируй с React Profiler: увидишь, как низкий приоритет рендера разгружает main thread. Интеграция с Next.js? Жди обновлений роутеров. Итог: для панелей с таба - это must-have, оптимизирует TTI и UX без хаков.

    Когда Activity решает твои боли по-настоящему

    Activity с Partial Pre бьёт в цель для навигаций, где табы или сайдбары жрут время на fetch. Стат шелл + фоновая жизнь компонентов = zero-lag switching. Осталось доработать: низкоприоритетные эффекты в hidden, или интеграцию с Offscreen API браузеров.

    В реальных проектах подумай о комбо с useEffectEvent для событий без ререндеров. Или батчинге Suspense в стриминге. Это база для enterprise-дашбордов, где каждая миллисекунда counts.


    0 0 0 Ответить
  • GameFishG
    GameFish
    GreedFall: The Dying World вышла вчера - отзывы по квестам и 60 FPS на слабом ПК

    Обложка: GreedFall: The Dying World вышла вчера первые отзывы о вариативных квестах и оптимизации на слабых ПК для 60 FPS

    GreedFall: The Dying World вчера наконец выкатили из раннего доступа на ПК. Перные отзывы сыплются - народ бомбит на вариативные квесты и оптимизацию под слабые сборки. Это прям имба для фанатов первой части, но с доработками боевки и сюжета.

    Зачем копать тему? Чтобы не слить катку из-за фризов на твоей старой видяхе и выжать 60 FPS без апгрейда. Плюс разберём, как квесты теперь ветвятся - выборы реально влияют, а не фейк. Короче, сразу к делу: гайды, фиксы и вердикты от стримеров.

    Вариативные квесты: больше веток, меньше линеек

    Вчерашний релиз принёс пачку обновлений в квесты - теперь они не рельса, а полноценный граф решений. Народ на форумах отмечает, что заговоры фракций разрастаются: один выбор в диалоге может перевернуть альянсы на Гакане. Пример - квест с Мостовым альянсом: если подружиться с компаньоном-аборигеном, то открывается скрытая ветка с саботажем колонизаторов, где бои с тактической паузой имба.

    Раньше в раннем доступе жаловались на скрипты, но теперь восемь компаньонов тянут отношения динамично - лояльность влияет на исходы. Стримеры тестили: в миссии по спасению от Малихора три финала зависят от дипломатии или насилия. Логично переходит к списку топ-квестов с ветками.

    • Квест ‘Тени Гакана’: 5+ веток, включая предательство фракции - идеально для ролеплейщиков, жрёт 2 часа.
    • ‘Остров Тир-Фради’: Выбор спасает деревню или усиливает злодея Курназа - влияет на глобальный сюжет, имба для реплей.
    • ‘Малихор-заговор’: Дипломатия vs стелс, открывает уникальное оружие - минус: баги в паузе на старте.
    • Компаньонские цепочки: Каждая из 8 имеет 3+ концовки - трогательно, но текстами переполнено.
    Квест Веток Влияние на сюжет Время
    Тени Гакана 5 Высокое 2ч
    Тир-Фради 4 Среднее 1.5ч
    Малихор 3 Глобальное 3ч

    Оптимизация на слабых ПК: 60 FPS без апгрейда

    Spiders подкрутили движок - теперь на GTX 1060 с i5 тянет 60 FPS в 1080p без артефактов. Форумчане вчера ночами тестят: троттлинг CPU ушёл после патча, статтеры в городах Гакана редкость. Пример - в боях с паузой фризы жрали 20% производительности, фиксили андервольтингом и отключкой TAA.

    На интегре (UHD 630) выжимают 45-60 FPS в режиме ‘История’ - лоу сеттинг, но текстуры не мыло. Стримеры хвалят V-Sync фикс и DLSS-подобный апскейл. Переходим к гайду по настройкам - копируй и нагни.

    • Графика: Low/Medium, отключить Motion Blur и Chromatic Aberration - FPS +30% сразу.
    • Андервольтинг GPU: MSI Afterburner на -100mV, лимит 75C - минус троттлинг на 1050 Ti.
    • RAM фикс: Закрой браузер, 16GB минимум - игра жрёт 12GB в хабах.
    • Драйвера: Nvidia 55x.xx, Resizable BAR on - имба для 60 FPS стабильных.
    • Режим ‘Тактик’ off: Для слабаков - снижает нагрузку на 20%.
    Сборка FPS (1080p Low) Фиксы
    GTX 1050 + i5-8400 55-65 Андервольт + V-Sync off
    RX 570 + Ryzen 5 60+ FSR on, TAA off
    Интегра iGPU 45-60 ‘История’ mode

    Первые отзывы: хейт и имба в одном флаконе

    Народ вчера хлынул в Steam - 59% положительных из 700+ отзывов, но свежие ближе к 70%. Бомбят на боевку: пауза крутая, но анимации деревянные, как в первой GreedFall. Квесты хвалят за вариативность, но жалуются на кривые порты компаньонов - иногда диалоги глючат.

    Оптимизация радует слабые ПК: ‘На 1060 60 FPS без лагов - Spiders починили!’ Но критики ругают сюжет за предсказуемость Малихора. Таблица вердиктов от топов.

    Источник Оценка Плюсы Минусы
    Steam 65% Квесты, компаньоны Баги боевки
    Форумы 70% 60 FPS на low Мыльные текстуры
    Стримеры 8/10 Вариативность Оптимизация средняя

    Чит-коды на доминацию в Dying World

    Осталось копать моды на Nexus - уже выкатили пачку для FPS-унлокера и фиксов квестов. Гринд компаньонов даёт имбовое оружие, но тратит часы - подумайте, стоит ли фармить все ветки или рвать сюжет. Баги Малихора в лоре пока не чинят, ждём патч 1.1.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    Bun + Temporal API: надежные scheduler-приложения на TypeScript в 2026

    Обложка: Как интегрировать Bun с Temporal API для создания надежных scheduler-приложений на TypeScript: гайд 2026

    Хочешь строить scheduler-приложения, которые не падают от сбоев? Bun с Temporal API - это комбо для TypeScript-проектов, где задачи выполняются надежно, даже если сервак перезагружается. Разберем, как их интегрировать шаг за шагом.

    Temporal API наконец-то в ES2026 - никаких больше мук с Date, который путает часовые пояса и летние переходы. А Bun уже экспериментально тянет эту фичу через JSC-флаг. Получится scheduler, который планирует задачи, retry-ит фейлы и держит состояние вечно.

    Почему Bun и Temporal - идеал для scheduler’ов

    Bun - это молниеносный рантайм на JavaScriptCore, который в 2026 уже обгоняет Node по скорости. Temporal API добавляет точную работу с датами: PlainDate, ZonedDateTime, Instant - все immutable и без багов. Вместе они решают типичные боли scheduler’ов: дедлайны в разных таймзонах, retry при сбоях, распределенные задачи.

    Представь: бот отправляет рассылки по расписанию. Без Temporal Date сломается на DST, без оркестрации типа Temporal задачи потеряются при рестарте. Bun дает скорость, Temporal - надежность. Тесты показывают: с флагом BUN_JSC_useTemporal тесты Temporal летают за 0.8с, против 228с на полифиллах.

    • Скорость: Bun запускает scheduler в разы быстрее Node, особенно с Temporal.
    • Надежность: Workflows Temporal держат состояние, детерминированы.
    • TypeScript-friendly: Полная типизация из коробки в Bun и Temporal SDK.
    • Экспериментальная фича: Включи BUN_JSC_useTemporal=1 - и Temporal работает нативно.
    Сравнение рантаймов для Temporal
    Рантайм Pass Rate Время тестов Примечание
    --------- ----------- -------------- ------------
    Bun (JSC) 40% 0.8с Блитц-скорость
    temporal-polyfill 88% 6с Медленнее
    @js-temporal/polyfill 84% 228с Тормозит

    Установка и базовый сетап в Bun

    Сначала ставим Bun - curl -fsSL https://bun.sh/install | bash. Temporal SDK для TypeScript тянется через bun add @temporalio/client @temporalio/worker. Не забудь флаг для Temporal API: экспортируй BUN_JSC_useTemporal=1 в .env или терминале. Это включает нативную поддержку в JSC, без полифиллов.

    Запускаем Temporal сервер локально - docker compose из их доков. В TypeScript пишем workflow: функция, которая детерминировано планирует задачи. Activity - реальная логика, типа отправки email. Bun компилит TS в runtime быстрее всех, так что dev-сервер летает.

    Вот базовый пример scheduler’а для ежедневных задач:

    import { defineWorkflow, defineActivity } from '@temporalio/workflow';
    
    const sendReport = defineActivity({
      async fn(date: Temporal.PlainDate) {
        // Логика отправки
        console.log(`Report for ${date.toString()}`);
      }
    });
    
    export const dailyScheduler = defineWorkflow({
      async fn(start: string) {
        const startDate = Temporal.PlainDate.from(start);
        while (true) {
          await sendReport(startDate);
          startDate.add({ days: 1 });
          await proxyActivities.sleep('1d');
        }
      }
    });
    
    • Workflow: Детерминированная логика, Temporal сам retry-ит.
    • Нюанс: Используй proxyActivities для таймаутов - не свои setTimeout.
    • Activity: Stateful код, прокидывай Temporal.PlainDate для дат.
    • Запуск: bun run workflow.ts с worker’ом.

    Интеграция с реальным проектом: пример scheduler’а

    Допустим, строим API для тасков с дедлайнами. Bun-сервер на Bun.serve, Temporal worker в фоне. Клиент SDK стартует workflow с Temporal.ZonedDateTime. При сбое сервера Temporal Cloud или self-hosted кластер подхватит выполнение - zero downtime.

    В Docker: multi-stage build с oven/bun:1-alpine. Проблема с protobufjs в alpine фиксится патчем или сменой на non-alpine. В 2026 Bun уже дошлифовал совместимость с Temporal client - коннект в контейнере без танцев.

    // bunfig.toml
    [env]
    BUN_JSC_useTemporal = "1"
    
    // server.ts
    import { Connection } from '@temporalio/client';
    const connection = await Connection.connect();
    
    Компоненты стека Роль
    Bun Runtime + сервер
    Temporal SDK Workflows/Activities
    Temporal.PlainDate Даты без багов
    TypeScript 6.0 Нативная поддержка Temporal
    • Масштаб: Worker’ы горизонтально, Temporal балансирует.
    • Внимание: Детерминизм - никаких random, Date.now() в workflows.
    • Мониторинг: Веб-UI Temporal показывает все executions.

    Продвинутые фичи: cron, retries и signals

    Temporal workflows тянут cron-стиль: schedule(cron('0 9 * * *')). С Temporal API cron вычисляется точно, с учетом зон. Retries настраиваются в activity options: backoff, max attempts. Signals позволяют менять workflow на лету - отменить задачу из API.

    Пример с retry и signal:

    const options = {
      retry: { maximumAttempts: 5, backoffCoefficient: 2 }
    };
    await proxyActivities(sendReport, options)(date);
    
    • Cron: Интеграция с Temporal scheduler API.
    • Signals/Queries: Изменяй состояние живого workflow.
    • Хак: Для сложных дат комбинируй Instant + ZonedDateTime.

    Scheduler в продакшене: что реально работает

    В 2026 Bun с Temporal - стандарт для надежных таскеров на TS. Масштабируй на кластер, добавь Nexus для cross-namespace. Остается докрутить интеграцию с date pickers - стандарт пока не доделан, но полифиллы рулят. Подумай над tracing через OpenTelemetry для дебагов в проде.


    0 0 0 Ответить
  • hannadevH
    hannadev
    React Server Components: CVE-2025-55182 и защита от RCE в production

    Обложка: React Server Components: критический патч CVE-2025-55182 и защита от RCE в production окружении

    CVE-2025-55182 - это критическая дыра в React Server Components, которая позволяет запустить произвольный код на сервере без авторизации. Уязвимость бьет по react-server-dom пакетам версий 19.0.0-19.2.0 и фреймворкам вроде Next.js 15.x/16.x. Пэтч вышел 3 декабря 2025, но в проде еще полно уязвимых инстансов - до 39% по сканам.

    Зачем разбирать? Чтобы быстро проверить свой стек, понять механику и защитить API от RCE. Это не просто баг, а логическая проблема десериализации в RSC Flight протоколе, которая превращает обычный POST в shell. Пройдем по патчу, уязвимым версиям и шагам для production hardening.

    Механика уязвимости: RSC Flight и десериализация

    RSC Flight - это протокол для передачи компонентов и server actions между сервером и клиентом. Сервер десериализует входящий payload, но в уязвимых версиях нет строгой валидации. Атакующий шлет crafted HTTP POST на endpoint с Server Functions, и бум - prototype pollution через proto приводит к RCE. Никаких creds не нужно, один запрос - и сервер твой.

    Пример: клиент шлет чанк с вредоносным референсом, React его резолвит неправильно, requireModule подхватывает и исполняет код. Это не memory corruption, а логический фейл - сервер трактует данные как инструкции. В Next.js App Router это бьет по всем роутам с server components. Масштаб огромный: React 19, Next.js 15/16, даже Parcel/Vite плагины под ударом.

    • Ключевые шаги атаки:
      • Крафт payload с манипуляцией chunk references.
      • POST на /_rsc endpoint (или аналог в твоем фреймворке).
      • Десериализация вызывает requireModule с attacker-controlled модулем.
    • Почему критично (CVSS 10.0): pre-auth, remote, full code exec.
    Свойство Описание
    Протокол RSC Flight (chunked serialization)
    Триггер Deserialization Server Actions
    Вектор HTTP POST без auth
    Последствия RCE, data breach, ransomware

    Затронутые пакеты и фреймворки

    Уязвимость сидит в react-server-dom-webpack/parcel/turbopack версий 19.0.0, 19.1.0, 19.1.1, 19.2.0. Это базовые либы для SSR в React 19. Next.js 15.x/16.x (App Router) и canary от 14.3.0-canary.77 наследуют баг напрямую. Другие: React Router RSC, Waku, RedwoodSDK, Vite/Parcel RSC plugins - все, что бандлит эти пакеты.

    Проверь package.json: если react-server-dom-* в 19.0-19.2.0 без патча - срочно апдейт. В cloud (GKE, Cloud Run) уязвимые образы висят в 39% окружений по телеметрии. Expo и мобильные тоже под вопросом, если юзают RSC. Патч - 19.0.1, 19.1.2, 19.2.1 для либ, плюс Next.js обновы.

    • Патченные версии:
      1. react-server-dom-webpack@19.0.1+.
      2. Next.js@15.x/16.x с фиксом (проверь changelog).
      3. npm audit или yarn upgrade-interactive.
    • Дополнительно: disable Server Functions временно, если пэтч не сразу.
    Пакет Уязвимые версии Патч
    react-server-dom-webpack 19.0.0-19.2.0 19.0.1+
    Next.js 15.x, 16.x latest
    Vite RSC plugin bundling vuln pkgs update deps

    Патчинг и hardening в production

    Первый шаг - inventory: grep docker images, npm ls в CI/CD. Апгрейдь deps: npm update react-server-dom-webpack@latest. В Next.js - npx next@latest. Redeploy приоритетно public-facing сервисы. Если Kubernetes - обнови images в GKE/eks, ротацию pods.

    Дальше WAF: правила на блок crafted payloads с proto или подозрительными chunk refs. Azure WAF, Cloud Armor - кастом рулс на /_rsc пути. Мониторинг: логи на десериализацию errors, alerts от Defender. Временно disable RSC endpoints через env vars. Тестируй в staging: curl с PoC payload из GitHub (dwisiswant0/CVE-2025-55182).

    • Checklist для продa:
      • Audit deps: npm audit --production.
      • WAF рулс: block payloads с ‘R:’ prefix или oversized chunks.
      • Rotate secrets post-patch - на всякий.
      • MDVM сканы для coverage.
    Решение Время Эффективность
    Пэтч deps 1-2ч 100%
    WAF rules 30мин 90% (compensating)
    Disable RSC 5мин Полная изоляция

    Защита на уровне стека: что дальше

    Пэтч решает CVE-2025-55182, но RSC архитектура все равно требует paranoia. Думай о strict payload validation в кастом handlers - не полагайся на фреймворк blindly. Интегрируй schema validation (Zod/Yup) перед десериализацией Server Actions. В проде - rate limiting на RSC endpoints, CSP для client payloads.

    Масштаб экспозишена показывает: 39% cloud инстансов уязвимы, так что inventory - must have. Следующий шаг - audit всех serverless (Cloud Run, Vercel) на бандлы с vuln pkgs. Остается прототипировать custom RSC guards, если фичи критичны. Это эволюция - от client-side к secure-by-default серверу.


    0 0 0 Ответить
  • GameFishG
    GameFish
    Screamer вышла: первые впечатления и оптимизация

    Ну вот и свершилось — Screamer официально уже в продаже. Боевые гонки от Milestone с неоновой эстетикой аниме захватили рынок ровно вчера. Релиз прошёл гладко, серверы держат, и уже есть первые отзывы о том, как эта штука ведёт себя на железе.

    Вопрос оптимизации встал ещё до выхода, потому что Unreal Engine 5 — зверь жадный до ресурсов. Разработчики обещали стабильные 60 FPS на консолях, но на ПК всё сложнее. RTX 50xx серии явно готовы к роли флагмана, но нужно понимать, на каких настройках ловить свои 144 фрейма.

    Что везли в Screamer

    Это не просто переиздание старушки из 90-х — это полноценный перезапуск с новой философией. Турнир, где каждый персонаж преследует свои цели: кто-то мстит, кого-то гложет амбиция, кто-то просто хочет победить. Пять фракций по пять гонщиков — солдаты, учёные, криминальные лидеры, звёзды и бизнес-магнаты. Каждый управляет своей машиной со своим набором способностей.

    Сюжетные линии переплетаются по мере прохождения турнира, и вот это вот действительно цепляет. Не просто стартовал, обогнал всех, приехал на финиш — нет. В Screamer ты включен в настоящее противостояние, где судьбы гонщиков решаются не только на трассе, но и вне её.

    Визуальный стиль — это смесь киберпанка и аниме. Трассы горят неоном, машины выглядят так, будто их нарисовал японский концепт-художник, а атмосфера во время гонок становится буквально взрывной. Но это не ради красоты — это работает на погружение в турнир.

    Механика боевых гонок ECHO System

    Вот здесь начинается самое интересное. Обычная гонка скучна, а Milestone сделали боевую катку. Технология ECHO позволяет игрокам переключаться между режимами Boost, Strike и Shield. Boost даёт ускорение, Strike — атака на соперников, Shield — защита. Включи Overdrive — и вся трасса становится хаосом, где выживает только самый расчётливый.

    Механика базируется на балансе ресурсов Sync и Entropy. Ты не можешь бесконечно атаковать или ускоряться — нужно правильно чередовать ходы, следить за энергией, комбинировать действия. Это придаёт геймплею стратегический слой, превращая гонки в настоящий шахматный поединок на скорости 200 км/ч.

    Режимы игры требуют разного подхода:

    • Screamer Tournament — классический турнир с сюжетом, где ты проходишь через несколько этапов и раскрываешь историю своего персонажа
    • Командные состязания — здесь побеждает команда, где ты не просто быстрее всех, но и уничтожаешь врагов вместе с союзниками
    • Overdrive режимы — ты стараешься как можно дольше удержать состояние турбо, пока соперники рвут тебя в клочья
    • Локальный мультиплеер — до четырёх игроков на одном экране, что позволяет устраивать живые турниры на диване
    • Онлайн кроссплей — до 16 игроков в одной гонке с поддержкой кроссплатформенности

    Оптимизация на RTX 50xx: как ловить 144 фрейма

    Unreal Engine 5 в Screamer требует уважения. Игра разработана под консольные 60 FPS, но на ПК ты можешь выжать намного больше. RTX 5090 — король, конечно, но даже RTX 5080 справляется отлично на максимальных настройках.

    Проблема в том, что 144 FPS — это не просто «включил максимум и наслаждайся». Нужна грамотная настройка. Вот что показывают первые тесты и рекомендации разработчиков:

    Настройка RTX 5080 RTX 5090
    Макс графика + 4K 85-95 FPS 140+ FPS
    Макс графика + 1440p 110-125 FPS 180+ FPS
    Высокие + 4K 120-135 FPS 200+ FPS
    Высокие + 1440p 144+ FPS 250+ FPS

    Обрати внимание на ключевые пункты:

    • DLSS 4 работает как нужно — это не мыльное сглаживание, а реальная магия, которая даёт 30-40% прироста производительности без видимых потерь в качестве
    • FSR 3.1 — альтернатива для владельцев карт по дешевле, даёт меньше прироста, но всё равно помогает
    • Ray Tracing на максимум жрёт память и мощность — отключи его в 2K и 4K, если хочешь 144+ фреймов
    • Шейдеры и текстуры — вот там сидит основной дроп производительности, а не в RT

    Проблемы и троттлинг на первой неделе

    Первые сутки выхода показали, что на максимальных настройках некоторые карты начинают дросселироваться. Это нормально для первого дня, когда на серверы давит весь интернет. Но есть нюансы.

    Некоторые владельцы RTX 5070 жаловались на непредсказуемый фризы в командных режимах с 16 игроками — это вопрос оптимизации сетевого кода, а не самой графики. Разработчики уже заявили, что будет патч через неделю. На консолях этого нет — там ровные 60 FPS без проблем.

    Вторая проблема — память. На ультра настройках в 4K Screamer может использовать 12-14 Гб видеопамяти. RTX 5090 с её 32 Гб смеётся, а вот RTX 5070 с 8 Гб начинает потеть. Решение простое: либо снизь текстуры с Ultra на High, либо уменьшай разрешение.

    Что проверить в первую очередь:

    • Отключи Ray Tracing полностью на первый прогон
    • Выставь DLSS на Balanced или Performance — это даст чистый прирост 30-35%
    • Текстуры — ставь High, если память тесновата, а не Ultra
    • Motion Blur убей на месте — это только портит восприятие в гонке
    • Локальный рендеринг урезай до 90% — глаз не заметит, а FPS вырастет на 10-15

    Первые отзывы: что говорят геймеры

    Сообщество уже разделилось на два лагеря. Одни в восторге от сюжета и механики ECHO System — говорят, что наконец-то появилась гонка с душой, а не очередная симуляция подвески. Другие ломаются на оптимизацию и просят больше FPS-ориентированных опций.

    Среди положительных моментов:

    • Сюжет реально цепляет — персонажи живые, их мотивация понятна, конфликты развиваются логично
    • Геймплей динамичный — система ECHO работает гладко, балансировка ресурсов требует мозга, а не просто рефлексов
    • Графика шикарная — неоновый стиль выглядит не как попытка быть модным, а как органичная часть вселенной
    • Мультиплеер стабилен — кроссплей работает, найти игроков можно за секунды

    Негативное:

    • Фризы в многопользовательских матчах на первые дни
    • Требовательность к памяти видеокарты
    • Отсутствие русской локализации
    • Некоторые считают режимы слишком похожи друг на друга

    Как пройти Screamer без лагов

    Практические советы для максимального комфорта. Во-первых, обнови драйверы видеокарты — это не совет, это приказ. Milestone выпустила оптимальные профили, и NVIDIA уже интегрировала их в Game Ready драйверы.

    Во-вторых, заведи отдельный SSD под игру. Кэширование текстур происходит постоянно, и если винт медленный, ты будешь видеть поп-ин деталей даже в 4K. NVMe на 1 Тб обойдёшься минимум в 4-5 тыс., но это здоровье твоей катки.

    В-третьих, закрой лишние приложения — хром с 40 вкладками, дискорд, OBS, стриминг. Screamer требует на минимум 12 Гб оперативной памяти, плюс видеопамять, плюс процессор. Каждый гигабайт имеет значение.

    В-четвёртых, попробуй разгон памяти видеокарты:

    • Увеличь частоту памяти на 100-150 МГц — это даст 2-3 FPS бесплатно
    • Ядро гони аккуратно, максимум на 50-75 МГц — выше риск артефактов
    • Вольтаж не трогай, если не знаешь, что делаешь

    Для RTX 50xx серии есть официальные профили в NVIDIA GFXBench — используй их как стартовую точку, потом экспериментируй.

    Перспективы и обновления

    Milestone уже говорит, что это ранний доступ, хотя и полнофункциональный. До полноценного релиза остаётся примерно полтора года, и контент будет добавляться постоянно. Новые персонажи, трассы, механики — всё это обещано в планах развития.

    Первый пач выходит через неделю, там заделают мультипллеерские фризы и доработают балансировку ECHO System. Второй пач в апреле будет касаться оптимизации сетевого кода — разработчики слышат жалобы и быстро реагируют.

    Звучит, как история успеха — и это действительно так. Screamer не просто вернулась, она вернулась с нормальной идеей и нормальной реализацией. Да, есть недочёты, да, оптимизация требует внимания — но в целом это то, чего ждали фанаты аркадных гонок.

    Вопрос, который остаётся открытым — удержит ли Screamer игроков на дистанции. Мультиплеерные игры живут сообществом, и если контент будет добавляться регулярно, а серверы оставаться стабильными, то у неё большое будущее. Если же Milestone забросит проект или патчи будут редкими — ну, погибнет ещё одна отличная идея.


    0 0 0 Ответить
  • hannadevH
    hannadev
    React 19 Server Components с 'use server' для параллельного data fetching в дашбордах

    Обложка: React 19 Server Components с директивой 'use server' для параллельного data fetching в дашбордах

    React 19 меняет правила игры для дашбордов. Server Components рендерятся на сервере, тянут данные напрямую из баз и API, без лишних клиентских фетчей. Это решает вечную боль - водопадные запросы, где один hangs блокирует всё.

    Параллельный data fetching становится нормой: несколько async вызовов в одном компоненте летят одновременно. Директива ‘use server’ открывает Server Actions для мутаций данных. Результат - дашборды грузятся молниеносно, бандл остаётся лёгким, стейт минимальный.

    Server Components: база для дашбордов

    Server Components в React 19 - это компоненты, которые рендерятся на сервере до попадания в браузер. Они не добавляют JS в клиентский бандл, но могут fetch’ить данные из БД или API прямо в коде. В дашбордах это киллер-фича: метрики, графики, таблицы - всё подгружается параллельно без useEffect-хаоса.

    Представь дашборд с продажами, пользователями и аналитикой. Без Server Components пришлось бы кидать N фетчей с клиента - водопад, задержки, race conditions. С ними async fetch’и в компоненте запускаются параллельно, сервер собирает HTML с данными и шлёт готовый. React 19 упрощает: директива ‘use server’ не всегда нужна, файлы в серверном контексте сами становятся серверными.

    • Параллельность из коробки: await fetchUsers(), await fetchSales() в одном компоненте - React ждёт все, не блокируя.
    • Zero bundle overhead: Нет кода в клиенте для статичных частей дашборда.
    • Прямой доступ к БД: db.query() без создания API-эндпоинтов.
    • Streaming рендер: Дашборд начинает показываться, пока данные доп. фетчатся.
    Сравнение подходов Клиентский fetch Server Components
    Запросы Последовательные или с useEffect Параллельные async
    Bundle size +JS для фетчинга 0 добавочного JS
    TTFB Высокий (ждёт JS) Низкий (HTML с данными)
    Интерактивность Полная, но тяжёлая Только где нужно (‘use client’)

    ‘use server’ для Server Actions в дашбордах

    Директива ‘use server’ помечает функции как серверные действия, вызываемые из клиентского кода. В дашбордах это идеально для мутаций: обновление фильтров, экспорт данных, рефреш виджетов. Клиент сериализует аргументы, сервер исполняет, возвращает результат - без кастомных API.

    В React 19 ‘use server’ ставится в начале async-функции или файла. Для дашборда с фильтрами: клиентский компонент вызывает серверное действие с параметрами, сервер фетчит отфильтрованные метрики параллельно и рендерит. Нюанс: аргументы должны быть сериализуемыми (primitive, FormData, Date). Нет нужды в отдельном бэкенде - всё в одном месте.

    // actions.js
    'use server';
    
    export async function fetchDashboard(filters) {
      const [sales, users, metrics] = await Promise.all([
        db.sales(filters),
        db.users(filters),
        db.metrics(filters)
      ]);
      return { sales, users, metrics };
    }
    
    • Автоматическая сериализация: Клиент -> сеть -> сервер, без ручного JSON.
    • Формы и кнопки: <form action={fetchDashboard}> - submit триггерит сервер.
    • Параллельные мутации: Несколько действий в дашборде не конфликтуют.
    • Revalidation: После действия - revalidatePath('/dashboard') для кэша.

    Параллельный fetching в реальном дашборде

    В дашборде параллельный data fetching - это когда виджеты (график продаж, таблица юзеров, KPI) грузят данные одновременно. Server Component агрегирует все await’ы, рендерит JSX с ними. Клиент получает готовый HTML + минимальный JS для интерактива.

    Пример дашборда: корневой Server Component фетчит общие данные, дочерние - специфичные параллельно. React 19 оптимизирует: нет директивы ‘use server’ для чистых RSC, только для actions. Важно: избегай client-only API вроде localStorage в серверном коде - сборка выдаст ошибку.

    // dashboard/page.tsx (Server Component)
    export default async function Dashboard() {
      const [sales, users] = await Promise.all([
        fetchSales(),
        fetchUsers()
      ]);
    
      return (
        <div>
          <SalesChart data={sales} />
          <UsersTable data={users} />
        </div>
      );
    }
    
    Проблема Решение в RSC Выгода для дашборда
    Водопад запросов Promise.all -500ms TTI
    Дубли fetch-логики Сервер агрегирует Меньше багов
    Большой бандл Нет JS для данных +30% perf
    Race conditions Последовательный рендер Стабильный UI

    Комбо RSC + ‘use server’ для живых дашбордов

    Объединяй Server Components с Server Actions для full-stack дашбордов. Сервер рендерит начальный стейт, клиентские хуки добавляют интерактив (фильтры, модалки). ‘use server’ функции обновляют данные на сервере, триггеря re-render.

    В дашборде: SalesChart - клиентский (‘use client’) для зума графика, но fetch - серверный action. Параллельность сохраняется: при фильтре action фетчит несколько источников сразу. Оптимизация: используй Suspense для гранулярного стриминга виджетов.

    • Гибридная архитектура: 80% сервер, 20% клиент.
    • Кэш и reval: revalidateTag('sales') для точечных обновлений.
    • Error boundaries: Обрабатывай фейлы fetch’ей на сервере.
    • Оптимистичные обновления: Клиент меняет UI, сервер подтверждает.

    Масштаб дашбордов на RSC

    Server Components с ‘use server’ тянут дашборды на новый уровень perf’а. Параллельный fetching убивает задержки, серверные действия упрощают CRUD. Осталось доработать edge-кейсы вроде WebSocket’ов для real-time или сложных анимаций - там ‘use client’ рулит.

    Дальше думай о миграции: начинай с простых страниц, измеряй lighthouse. React 19 делает RSC стабильными, но следи за экосистемой - не все либы готовы к серверу.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    Temporal API с Bun и TypeScript: гайд по надежной автоматизации задач с датами в Node.js 2026

    Обложка: Как интегрировать Temporal API с Bun и TypeScript для надежной автоматизации задач с датами в Node.js: гайд 2026

    Temporal API наконец-то вышел из экспериментов и стал стандартом для работы с датами в JavaScript. Забудь про кривые Date - теперь есть immutable объекты, которые правильно парсят строки, учитывают часовые пояса и не ломаются на летнем времени. Это спасет твои скрипты от багов в проде, особенно когда задачи крутятся по расписанию.

    С Bun как рантаймом и TypeScript для типизации получается быстрая и надежная автоматизация. Парсеры напоминаний, cron-джобы для отчетов или биллинг - все это летает без ошибок. В гайде разберем setup, workflows и реальные примеры для сервака на 2026 год.

    Почему Temporal API меняет игру в задачах с датами

    Temporal решает все боли стандартного Date: мутабельность, неоднозначный парсинг и игнор зон. Представь - ты пишешь парсер заказов, а DST ломает расписание. С Temporal.ZonedDateTime это в прошлом: объект знает контекст и сам считает разницу. Bun ускоряет запуск в 10 раз быстрее Node.js, а TypeScript ловит ошибки на этапе компиляции.

    На Reddit уже пишут, что в 2026 это must-have для пет-проектов и продакшена. Без него рискуешь часами дебажить ‘почему дата сдвинулась на час’. С ним - просто создаешь duration и добавляешь к дате, все типобезопасно. Логично перейти к примерам: workflows для напоминаний или обработки подписок.

    • Immutable по умолчанию: Меняешь дату - получаешь новую, старая не трогается.
    • Парсинг из любой строки: ‘2026-03-21 09:00 UTC’ или ISO - Temporal разберет.
    • Часовые пояса нативно: ZonedDateTime учитывает DST и переходы.
    • Duration для расчетов: Добавь дни/часы без риска переполнения.
    Проблема Date Решение Temporal Пример
    Мутабельность Immutable классы date.add(duration) возвращает новый
    Парсинг ‘1/2/3’ Стандартизированный PlainDate.from('2026-03-21')
    DST-баги ZonedDateTime Автоучет сдвигов в ‘Europe/Moscow’
    Разница дат until()/since() start.until(end).toString()

    Setup проекта: Bun + TypeScript + Temporal

    Устанавливаем Bun - это дроп-ин замена Node.js, но быстрее и с встроенным bundler’ом. bun init создает шаблон, добавляем @js-temporal/polyfill пока API не везде нативный. TypeScript конфигим через tsconfig.json с strict: true - типы для Temporal из polyfill.

    Запускаем воркер: bun run worker.ts. Temporal SDK для TypeScript интегрируется через proxyActivities - детерминированные функции без фейлов. В 2026 Bun поддерживает ESM нативно, так что нет нужды в tsx или nodemon. Переходим к workflow’ам для задач с датами.

    1. bun add @js-temporal/polyfill temporalio
    2. bun add -D @types/bun typescript
    3. Создай temporal.config.ts для коннекта к кластеру.
    4. bun tsc && bun run src/worker.ts

    Код воркера:

    import { Worker } from '@temporalio/worker';
    import { NativeConnection } from '@temporalio/client';
    
    async function run() {
      const connection = await NativeConnection.connect({ address: 'localhost:7233' });
      const worker = await Worker.create({
        connection,
        namespace: 'default',
        taskQueue: 'date-tasks',
        workflowsPath: './workflows',
        activities: { /* ... */ },
      });
      await worker.run();
    }
    run();
    

    Нюанс: В Bun используй NativeConnection - быстрее WebConnection на 30%.

    Workflow для автоматизации с датами: напоминания и биллинг

    Workflow - это оркестратор: планирует activity, ждет сигналы, retry при фейлах. Для напоминаний создаем workflow, который проверяет дату через Temporal.Instant.now() и шлет нотифы. Activity - реальная работа: API-колл или email. TypeScript прокси обеспечивает типы end-to-end.

    Пример подписки: workflow стартует ежемесячно, проверяет dueDate с ZonedDateTime, если просрочено - биллит. Сигналы позволяют отменить mid-way. Bun делает cold-start <10ms, идеально для serverless на Vercel или Deno Deploy. Теперь код.

    // workflows.ts
    import { proxyActivities } from '@temporalio/workflow';
    import { Temporal } from '@js-temporal/polyfill';
    
    type Activities = typeof import('./activities');
    const { sendReminder } = proxyActivities<Activities>({});
    
    export async function reminderWorkflow(reminderTime: string): Promise<void> {
      const target = Temporal.ZonedDateTime.from(reminderTime);
      while (Temporal.Now.zonedDateTimeISO('UTC').until(target).total('seconds') > 0) {
        await Temporal.Duration.from({ seconds: 60 }).sleep();
      }
      await sendReminder();
    }
    
    Компонент Описание Таймаут
    Workflow Оркестрация дат Unlimited
    Activity API-call/email 5m
    Signal Отмена Instant

    Масштабирование: от пет-проекта к продакшену

    В проде добавь метрики через Temporal Observability, tracing с OpenTelemetry. Bun с Temporal Nexus соединяет namespaces для микросервисов. Для AI-тасков интегрируй Vercel AI SDK - workflow ждет LLM-ответ, не теряя состояние при рестарте сервака.

    Тестируй с temporal test: симулирует фейлы, проверяет replay. Деплой на Temporal Cloud - zero-ops, плати за usage. В 2026 Bun runtime везде: Railway, Fly.io. Подумай о custom calendars для финансовых дат (settlement days).

    • Мониторинг: Web UI показывает event history.
    • Retry policies: Exponential backoff на activity.
    • Child workflows: Вложенные для сложных цепочек.

    Фичи за кадром: что копать дальше

    Temporal + Bun решает 90% задач с датами, но есть нюансы вроде custom calendars или интеграции с Kafka. Для high-load смотри sharding task queues. В экосистеме 2026 жди нативной поддержки Temporal API без полифилла.

    Экспериментируй с Signals для user-input в workflows или Queries для статуса. Если задачи критичны - добавь Nexus для cross-namespace. Это база, надстрой свой стек под бизнес.


    0 0 0 Ответить
  • GameFishG
    GameFish
    Life is Strange: Reunion вышла 26 марта - отзывы Макс и Члои на PS5 и PC

    Life is Strange: Reunion наконец завезли 26 марта на PS5 и PC. Макс и Хлоя снова в деле после 10 лет разлуки, продолжают Double Exposure и закрывают историю. Первые отзывы от прессы и фанатов уже рвут чат - кто в восторге от атмосферы, кто бомбит на озвучку.

    Демка на 2 часа показала мрачную имбу: напряг, меланхолия в каждом пикселе. Зачем это знать? Чтобы понять, стоит ли фармить катку или скипнуть кривой порт. Рейтинги пока сырые, но визуал и механики тянут на топ.

    Атмосфера и эмоции - сплошной тильт

    Короче, демоверсия Reunion бьет по чувствам жестче, чем оригинал. Постоянное напряжение от саундтрека, диалогов и общей меланхолии - это не просто прогулки по Аркадии Бэй. Журналисты хвалят, как Deck Nine усилили драму: кошмары Макс, приезд Хлои в кампус Каледон, таймер на пожар через 3 дня. Визуал - топ серии, анимации лиц живые, локации детализированы до фризов в памяти.

    Но не все гладко. Фанаты в ярости от озвучки Хлои - опять Рианна ДеВрис, а не Эшли Берч из первой части. После забастовки 2017 вернули старую, и это убийство ностальгии. Один критик отметил неуместные шутки из нулевых и лексикон, который выбешивает. Атмосфера тянет на 9/10, но диалоги иногда просят нерфа.

    • Меланхолия имба: Саундтрек и диалоги давят эмоционально, как в лучшие катки оригинала.
    • Озвучка Хлои - пабджи: Фанаты бомбят, что без Берч персонаж не тот, теряет харизму.
    • Визуал на PS5 топ: Детали окружения, освещение - без статтеров, 60 фпс стабильно.
    • Мелкие фейлы: Шутки старые, как мой старый РИЗЕН без андервольтинга.

    Геймплей - перемотка и бэкток возвращаются

    Макс опять вертит временем, как в первой ЛиС - классика, без которой серия не серия. Хлоя юзает backtalk - словесные дуэли без отката, быстро и жестко. Добавили стелс и пазлы: обезврежи бомбу за таймер, прячься от охраны кампуса. Можно выбрать финал оригинала - спас Хлою или город? Это меняет сюжет Reunion.

    На PC и PS5 оптимизация норм, но пресса ждет полных рейтингов. Нет второстепенных персов из Аркадии - их судьбу расскажут в заметках и чатах, без встреч. Реакция на Double Exposure подтолкнула devs вернуть дуэт, фанаты давили. Геймплей эволюционировал, но рискуют переиграть на ностальгии.

    Платформа Фпс в демке Оптимизация Минусы
    PS5 60 стабильных Топ, без троттлинга Шутки выбешивают
    PC 100+ на RTX Настройки гибкие Жрет VRAM на ультра
    Xbox 60 Норм Порт кривой? Ждем
    • Перемотка времени - кор: Макс спасает ситуацию, как босс.
    • Backtalk Хлои: Быстрые выборы, нервы на пределе, без сейва.
    • Выбор финала: Влияет на катку, ветвление сюжета имба.
    • Пазлы с таймером: Неожиданный хардкор для ЛиС.
    • Обмен фото: Новая фича для лора.

    Отзывы прессы и фанбаза - рейтинги рвут шаблон

    Превью от VG Times и iXBT хвалят мрачность и график - самая красивая ЛиС. Журналисты дали демке высокие баллы за эмоции, но предупреждают о возможной концовке, которая разобьет сердце. Фанаты на форумах делятся: кто-то в тильте от отсутствия Берч, другие рады возврату механик. Обзоры на ggrealm и goha ждут пользовательских оценок.

    Рейтинги пока предрелизные: атмосфера 9/10, геймплей 8/10, звук топ. Минусы - озвучка и юмор. На PS5 визуал выдает 4K без лагов, PC конфиги от медиум до ультра. Фанаты спорят: шаг вперед или ностальгия-фарм? Deck Nine фокусятся на дуэте, игнорят сайд-квесты.

    • Пресса: Эмоции и графика - имба, демо 2 часа затягивает.
    • Фанаты бомбят: Озвучка Хлои - фейл, ожидания ниже плинтуса.
    • Рейтинги PS5: 8.5/10 по превью, стабилити.
    • PC: Гибкость настроек, но жрет ресурсы.
    Аспект Пресса Фанаты
    Атмосфера 9/10 8/10 (озвучка минус)
    Геймплей 8.5/10 9/10
    Графика PS5/PC 9.5/10 Ждем полных

    Что фанаты пропустили в сюжете

    Сюжет Reunion - прямой отклик на хейт Double Exposure: вернули Хлою по просьбе комьюнити. Макс в универе, кошмары мучают, пожар висит дамокловым мечом. Второстепенных из первой не покажут, только упоминания - devs выбрали фокус на паре. Рейтинги растут, но озвучка и старый юмор оставляют вопросы.

    Осталось за кадром: полные концовки и мультиплеер? Нет, чистый нарратив. Стоит подумать, закроет ли это арку Макс или оставит голодными на спин-оффы. Deck Nine явно метят в финал саги - ждем патчей на оптимизацию.


    0 0 0 Ответить
Популярные темы:

  • Критическая уязвимость в React.js Next.js (CVE-2025-55182, CVE-2025-66478): Как защитить свой сайт
    AladdinA
    Aladdin
    7
    12
    1.2k

  • Полный гайд по работе с NodeBB CLI
    D
    DeepSeeker
    6
    3
    143

  • for или foreach в javascript: в каких случаях что использовать
    D
    DeepSeeker
    5
    2
    147

  • Подготовка к собесам фронтенд
    Dastan SalmurzaevD
    Dastan Salmurzaev
    5
    5
    186

  • Передача типов в TypeScript в под функции
    kirilljsxK
    kirilljsx
    4
    5
    215

  • Исчерпывающее руководство по конфигурации Nginx
    undefined
    4
    1
    179

  • Проверка стала проще с Zod: как обеспечить точность и качество форм
    kirilljsxK
    kirilljsx
    3
    8
    1.0k

  • Bruno - новый клиент для API (Замена PostMan Insomnia)
    ManulM
    Manul
    3
    2
    1.7k

  • Vue.js и React — необычное сравнение
    D
    DeepSeeker
    3
    10
    1.0k

  • Оптимизация React js приложений. Использование функции debounde()
    ManulM
    Manul
    3
    5
    519

  • Провайдеры в Nest JS - 1.3
    undefined
    3
    1
    339

  • Полный гайд по команде LFTP: Работа с локальными и удалёнными серверами
    undefined
    3
    1
    538

Пользователи в Сети:

hannadevH
hannadev
GameFishG
GameFish

Статистика:

61

В сети

281

Пользователи

1.7k

Темы

2.7k

Сообщения

Категории

  • Главная
  • Новости
  • Фронтенд
  • Бекенд
  • Языки программирования

Контакты

  • Сотрудничество
  • info@exlends.com

© 2024 - 2026 ExLends, Inc. Все права защищены.

Политика конфиденциальности
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Войдите или зарегистрируйтесь для поиска.
  • Первое сообщение
    Последнее сообщение
0
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы