Загрузка...

Putting together a modern backend Javascript developer stack

Thread in JS/TS created by Прокаженный Jan 14, 2026. 228 views

  1. Прокаженный
    Всем привет мои маленькие маслята
    В наше время технологии и фреймворки устаревают очень быстро, и каждому программисту важно оставаться в теме.
    Плюс, после проверки временем часто выясняется, что самые популярные решения были не самыми оптимальными и безопасными.
    Сегодня расскажу про свой стек для разработки backend-приложений на JS/TS.
    Помимо реально быстрой среды исполнения, Bun сразу включает кучу нужных инструментов:
    1. Runtime — холодный старт и общее выполнение в среднем до ~4 раз быстрее Node.js.
    2. Bundler — поддержка JavaScript, TypeScript, JSX/TSX и прочего из коробки.
    3. Package manager — в разы быстрее npm (на практике — до ~20–25x).
    4. Test Runner - представляете тестирование из коробки без мозгоебки ???
    Jest совместимое тестирование имеющее встроенное mock работающее со всем что вам нужно: Typescript, UI/DOM (React)

    По реальным бенчмаркам и практическим тестам:
    - HTTP (Express-подобные фреймворки) — до ~3x больше RPS (Request Per Second)
    - PostgreSQL — до ~2.5x больше тяжёлых запросов за то же время
    - WebSocket — до ~6x больше сообщений

    Для прототипов и проверки гипотез Bun сейчас почти без конкурентов:
    - Встроенный HTTP-сервер с роутингом — можно стартовать без Express/Fastify
    - Нормальная реализация Stream — работа с бинарными данными без утечек памяти
    - Встроенная поддержка SQL — используя строковые литералы вы можете быстро написать запрос и работать с вашей базой данных без каких либо зависимостей
    - Встроенный Redis-клиент — как и все остальное супер оптимизированно и типизированно
    - FFI из коробки открывает вам безграничные возможности по интеграции сторонних нативных библиотек, и можно не только ссылаться как на уже собранную библиотеку, но и на файлы исходного кода C чтобы собирать их и вызывать на ходу
    - Встроенная реализация Secrects для хранения ключей и конфигов без .env-зоопарка
    Всем кто хоть когда нибудь сталкивался с бэкенд логикой на Javascript знакомы такие библиотеки как class-validator и class-transformer
    Основной проблемой этой двоицы является то что они используют runtime reflection из-за чего использовать их в больших нагруженных проектах становится невыносимо: куча аллокаций памяти, медленная работа и тяжело масштабировать

    Как работает Typia
    Она встраивает свои процессы в сборку вашего проекта и генерирует заранее все необходимые вам функции используя оптимальный путь
    Например следующий код в ваших исходниках
    JS
    import typia, { tags } from "typia";
    export const checkString = typia.createIs<string>();
    Превратиться в такой код в конечной сборке:
    JS
    import typia from "typia";
    export const checkString = (() => {
    return (input) => "string" === typeof input;
    })();
    По реальным бенчмаркам и практическим тестам:
    - Валидация типов работает в среднем в 20 000 тысяч раз быстрее чем в class-validator
    - Сериализация обьектов в JSON в среднем в 200 раз быстрее чем в class-transformer

    Также typia имеет и другие фичи:
    - Реализация Protobuf позволяющая конвертировать ваши схемы данных в бинарный формат и обратно
    - Генератор рандомных данных на основе ваших схем, полезно для тестирования
    - Поддержка Nestjs из коробки
    **** — это то, что вы начинаете ценить, когда всё уже упало в проде.
    Если **** медленные, кривые или нечитаемые — вам больно. Если логгер жрёт CPU — вам больно вдвойне.
    Pino решает эту проблему максимально просто и эффективно.

    Что делает Pino:
    - Пишет **** в формате NDJSON — каждая строка это валидный JSON
    - Никакой магии, никакой рефлексии, просто быстрый вывод в stdout
    - Минимальная нагрузка на CPU и память

    Почему это важно:
    - Такой лог сразу можно парсить
    - Его можно без подготовки отправлять в Loki, Elasticsearch, OpenSearch и т.д.
    - Не нужен logstash, grok, regex и прочий ад

    Dev vs Prod:
    В проде — чистый JSON, максимум скорости
    В деве pretty-print, чтобы **** читались глазами, а не болью
    Написать код — это полдела. Важно, чтобы он был читаемым, безопасным и поддерживаемым. Вот набор инструментов, которые превращают хаос в порядок:

    ESLINT + ПЛАГИН БЕЗОПАСНОСТИ
    Стандарт де-факто для линтинга TypeScript/JavaScript. Но главная фишка — eslint-plugin-security, который ловит потенциальные уязвимости прямо на этапе написания кода:
    - Обнаруживает небезопасное использование eval() и new Function()
    - Предупреждает о возможных RegExp DoS атаках
    - Находит использование Math.random() в криптографическом контексте
    - Детектирует потенциальные SQL/NoSQL инъекции

    Настройка с --max-warnings 0 гарантирует, что даже предупреждения не пройдут в продакшн.

    PRETTIER + АВТОСОРТИРОВКА ИМПОРТОВ
    Забудьте про споры о табах vs пробелах. Prettier форматирует код автоматически, а плагин trivago/prettier-plugin-sort-imports держит импорты в порядке:
    - Группировка импортов по категориям (внешние, внутренние, относительные)
    - Алфавитная сортировка
    - Автоматическое удаление неиспользуемых импортов при сохранении

    JSCPD — ДЕТЕКТОР ДУБЛИРОВАНИЯ КОДА
    Copy-paste — корень всех зол. JSCPD находит дублированный код и заставляет рефакторить:
    - Порог в 3% (--threshold 3) — если дублирования больше, сборка падает
    - Работает с TypeScript и JavaScript
    - Показывает конкретные места, где код повторяется
    Дублирование > 5% — это технический долг, который потом аукнется при багфиксах.

    MADGE — АНАЛИЗАТОР ЗАВИСИМОСТЕЙ
    Madge находит циклические зависимости, которые убивают модульность:
    - Обнаруживает circular dependencies (A импортирует B, B импортирует A)
    - Визуализирует граф зависимостей
    - Помогает поддерживать clean architecture

    Циклические зависимости — это гарантированный ад при масштабировании и рефакторинге.

    HUSKY — АВТОМАТИЗАЦИЯ ПРОВЕРОК
    Husky запускает все проверки автоматически перед коммитом
    Это гарантирует, что в репозиторий не попадёт:
    - Код с ошибками типизации
    - Неотформатированный код
    - Код с линтер-ошибками
    - Код без тестов или с падающими тестами

    На проектах с командой >2 человек без этих инструментов код превращается в помойку за месяц. С ними:
    - Единый стиль кода — новый разработчик не увидит разницы, кто писал файл
    - Меньше багов — 70% проблем ловятся на этапе разработки
    - Быстрый онбординг — новички видят ошибки сразу в IDE
    - Безопасность — уязвимости не доезжают до продакшна
    - Легкий рефакторинг — нет страха что-то сломать
     
  2. oiiaioiiao
    если че пацаны, для вашей инфы, у бан рантайм написан на zig, новый лоу-левел язык с мануальным контролем памяти
     
    1. голос
      avataroiiaioiiao, если че, всем похуй. Если ты решил выебнуться, то у тебя плохо получилось
    2. oiiaioiiao
      avatarголос, извини, сгоряча спизданул, просто поделился инфой что хоть и джаваскрипт/тайпскрипт фреймворк, но ядро (райнтайм) написано на другом, низкоуровневом языке, который ещё совсем новый, без какой-то "взрослой" экосистемы, в целом интересный язык просто, zig
Loading...