В серверном JavaScript сложилась устойчивая олигополия движков: практически любой рантайм, с которым мы сталкиваемся на проде, построен либо поверх V8 от Google (Node.js, Deno, Cloudflare workerd), либо на JavaScriptCore от Apple (Bun). Эти движки развиваются десятилетиями, обладают колоссальной мощью JIT-оптимизаций и глубоко проработанными сборщиками мусора. Однако за эту мощь приходится платить весом: базовый бинарник Node.js весит около 140 МБ, Bun — более 61 МБ, а Deno перешагивает за 77 МБ.
Когда речь заходит о микросервисах в контейнерах, CLI-утилитах или бессерверных вызовах (serverless/edge computing), такой оверхед начинает мешать. Если функции требуется отработать за 5 миллисекунд и завершиться, тратить десятки мегабайт оперативной памяти и сотни миллисекунд на инициализацию виртуальной машины V8 — расточительство. Разработчик theMackabu представил независимый проект Ant — серверный рантайм для JavaScript и TypeScript с собственным оригинальным движком Ant Silver, ориентированный на минимальный вес и мгновенный холодный старт.
Архитектура Ant Silver и компиляция через MIR
Главная техническая интрига Ant — отказ от готовых гигантов. Ant Silver написан с нуля: это независимый парсер, интерпретатор AST и компактный сборщик мусора. В отличие от легковесных встраиваемых движков вроде QuickJS, которые традиционно работают только в режиме чистой интерпретации байткода, Ant изначально проектировался с прицелом на околонативную производительность благодаря JIT-компилятору.
Вместо использования тяжеловесной инфраструктуры LLVM, которая увеличила бы размер исполняемого файла на десятки мегабайт и замедлила старт, автор применил форк бэкенда MIR (Medium Internal Representation), созданного Владимиром Макаровым. MIR представляет собой легковесную промежуточную среду для JIT-генерации машинного кода: он быстро преобразует внутренний байткод Ant в инструкции конкретного процессора с минимальными накладными расходами на анализ регистров.
В результате базовый исполняемый файл Ant занимает всего 8.6 МБ, а при сборке с флагом оптимизации по размеру -Os ужимается до рекордных 4.5 МБ. Для сравнения: такой объем сопоставим с легковесными утилитами на Go или специализированными инструментами вроде безголового браузера Lightpanda 1.0, также спроектированного ради холодного старта за миллисекунды.
Холодный старт и соответствие стандартам
В тестах на задержку холодного старта измерялся классический микросервисный сценарий: запуск процесса, инициализация маршрутизатора Hono с двумя эндпоинтами и немедленное завершение без блокировки сокета. Ant продемонстрировал среднее время исполнения в 3.9 мс (с разбросом от 2.1 до 5.3 мс). Bun на движке JavaScriptCore справился за 8.8 мс (в 2.26 раза медленнее), Deno потребовал 18.6 мс, а стандартный Node.js — 29.4 мс (в 7.5 раз дольше).
При разработке нового движка ключевой риск — фрагментация языка и несовместимость со спецификациями ECMAScript. Создатели Ant выбрали стратегию верификации по официальным наборам тестов:
compat-table: 100% прохождение тестов (1511 из 1511 проверок по стандартам от ES5 до ESNext);- Спецификация
Temporal: 100% (все 4603 теста по ревизии от августа 2026 года); - Набор тестов
test262: около 66% (35 590 успешно пройденных тестов из 53 578); - Спецификации WinterTC (Ecma TC55 Minimum Common API): поддержка стандартных глобальных интерфейсов
fetch,Request,Response,URLи потоковReadableStream.
Кроме того, Ant из коробки поддерживает нативный TypeScript — типы просто вырезаются на этапе лексического анализа без необходимости долгого запуска tsc или внешних бандлеров.
Практический сценарий: от микросервиса к профилированию
Посмотрим, как выглядит запуск легковесного API-сервиса на Ant. В первом листинге создадим изолированный маршрутизатор на базе фреймворка Hono:
import { Hono } from 'hono';
const app = new Hono();
// Регистрация легковесных эндпоинтов без накладных расходов V8
app.get('/api/health', (c) => c.json({ status: 'ok', engine: 'Ant Silver' }));
app.get('/api/users/:id', (c) => {
const userId = c.req.param('id');
return c.text(`User ID: ${userId}`);
});
console.log('Маршруты Hono успешно инициализированы в среде Ant Silver');
process.exit(0);
Теперь протестируем сценарий холодного старта и сравним поведение Ant с Bun и Node.js с помощью консольного бенчмарка Hyperfine:
# 1. Запуск изолированного скрипта в среде Ant
ant bench-coldstart.js
# 2. Сравнительный замер задержки инициализации рантаймов (100 итераций)
hyperfine --warmup 10 --runs 100 \
'ant bench-coldstart.js' \
'bun bench-coldstart.js' \
'node bench-coldstart.js'
Компромиссы и инженерный вердикт
Несмотря на впечатляющие 3.9 миллисекунды и компактный размер в 4.5 МБ, использовать Ant как универсальную замену Node.js в продакшене пока рано. Уровень прохождения test262 в 66% означает, что экзотические краевые случаи синтаксиса или тонкие нюансы прототипов объектов могут завершаться непредвиденными ошибками. Кроме того, у Ant нет поддержки нативных C++ аддонов (Node-API / NAN), поэтому библиотеки с бинарными биндингами работать не будут.
Однако как специализированный инструмент Ant выглядит крайне многообещающе. Это идеальная среда для CLI-утилит на TypeScript, встраиваемых сценариев автоматизации в IoT и edge-функций, где критичны каждая миллисекунда холодного старта и каждый мегабайт оперативной памяти. Внимательно следим за развитием движка Ant Silver: конкуренция независимых реализаций всегда идет экосистеме на пользу.
