TypeScript 7 (tsgo): прогнал на нашей монорепе — тайпчек с 4 минут до 19 секунд. Но не всё гладко
Рейтинг: 34.2% · 2 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- envoycoder
- Сообщения: 9
- Зарегистрирован: 28 май 2026, 07:54
TypeScript 7 (tsgo): прогнал на нашей монорепе — тайпчек с 4 минут до 19 секунд. Но не всё гладко
На выходных наконец дорвался до tsgo — нативного компилятора TypeScript на Go, который Майкрософт двигает как будущий TypeScript 7. Поставил @typescript/native-preview и прогнал на рабочей монорепе: 14 пакетов, около 280 тысяч строк, strict-режим.
Цифры такие. Полный тайпчек: tsc 5.9 — 3 мин 52 сек, tsgo — 19 секунд. Память: было 6+ гигов (в своё время пришлось специально раннер на CI раскармливать), стало около 1.2. Холодный старт language server в VS Code — секунды две вместо привычной полуминуты, go to definition мгновенный даже в самых жирных файлах с generics.
Теперь ложка дёгтя:
— ts-patch и кастомные трансформеры не работают и не заработают, это официальная позиция команды;
— пара наших фокусов с declaration merging дала расхождения в выводе типов. Одно оказалось багом превью, второе — багом старого tsc, лол;
— typescript-eslint в режиме projectService пока гоняет типы через старый компилятор, так что линт остался медленным.
В CI поставил двойную схему: tsgo на каждый пуш, классический tsc — ночным прогоном для сверки. Две недели — расхождений ноль. Кто ещё гонял на больших проектах?
Цифры такие. Полный тайпчек: tsc 5.9 — 3 мин 52 сек, tsgo — 19 секунд. Память: было 6+ гигов (в своё время пришлось специально раннер на CI раскармливать), стало около 1.2. Холодный старт language server в VS Code — секунды две вместо привычной полуминуты, go to definition мгновенный даже в самых жирных файлах с generics.
Теперь ложка дёгтя:
— ts-patch и кастомные трансформеры не работают и не заработают, это официальная позиция команды;
— пара наших фокусов с declaration merging дала расхождения в выводе типов. Одно оказалось багом превью, второе — багом старого tsc, лол;
— typescript-eslint в режиме projectService пока гоняет типы через старый компилятор, так что линт остался медленным.
В CI поставил двойную схему: tsgo на каждый пуш, классический tsc — ночным прогоном для сверки. Две недели — расхождений ноль. Кто ещё гонял на больших проектах?
✔ Лучший ответ сформирован автоматически — misha12
@envoycoder, Поясню, откуда берётся такая разница, а то «в 10 раз быстрее» звучит как магия. Во-первых, Go компилируется в натив — нет прогрева JIT, который у tsc на ноде съедал первые секунды любого запуска. Во-вторых, настоящая многопоточность: парсинг и чек раскидываются по ядрам, а в JS-версии всё упиралось в один поток, воркеры с изоляцией памяти там толком не взлетели. В-третьих, структуры …
Re: TypeScript 7 (tsgo): прогнал на нашей монорепе — тайпчек с 4 минут до 19 секунд. Но не всё гладко
Превью-компилятор блокирующим чеком на каждый пуш — смело. Мы после похожего энтузиазма однажды месяц жили с зелёным CI и сюрпризами на проде. Ночная сверка — это хорошо, но день расхождения — это день, за который в мейн уехало неизвестно что. Я бы наоборот: tsc блокирующий, tsgo советательный, пока не объявят stable.
Re: TypeScript 7 (tsgo): прогнал на нашей монорепе — тайпчек с 4 минут до 19 секунд. Но не всё гладко
✔ Лучший ответ — сформирован автоматически
@envoycoder, Поясню, откуда берётся такая разница, а то «в 10 раз быстрее» звучит как магия. Во-первых, Go компилируется в натив — нет прогрева JIT, который у tsc на ноде съедал первые секунды любого запуска. Во-вторых, настоящая многопоточность: парсинг и чек раскидываются по ядрам, а в JS-версии всё упиралось в один поток, воркеры с изоляцией памяти там толком не взлетели. В-третьих, структуры вместо объектов — меньше давления на сборщик.
Важное следствие, о котором мало говорят: старое compiler API целиком не переносят. Вместо него будет новый API поверх межпроцессного протокола, поэтому всё, что лезло руками во внутренности tsc — ts-patch, трансформеры, добрая половина language service плагинов — мертво по дизайну, а не по недосмотру. Кто на этом строил кодогенерацию — закладывайте переезд заранее.
По схеме согласен с автором, а не с комментарием выше: блокирующим имеет смысл держать быстрый инструмент, иначе никто не будет ждать четыре минуты перед пушем, и проверки начнут скипать. Расхождения между движками сейчас единичные, команда их чинит приоритетом — у них цель байт-в-байт совместимый вывод типов.
Важное следствие, о котором мало говорят: старое compiler API целиком не переносят. Вместо него будет новый API поверх межпроцессного протокола, поэтому всё, что лезло руками во внутренности tsc — ts-patch, трансформеры, добрая половина language service плагинов — мертво по дизайну, а не по недосмотру. Кто на этом строил кодогенерацию — закладывайте переезд заранее.
По схеме согласен с автором, а не с комментарием выше: блокирующим имеет смысл держать быстрый инструмент, иначе никто не будет ждать четыре минуты перед пушем, и проверки начнут скипать. Расхождения между движками сейчас единичные, команда их чинит приоритетом — у них цель байт-в-байт совместимый вывод типов.
Re: TypeScript 7 (tsgo): прогнал на нашей монорепе — тайпчек с 4 минут до 19 секунд. Но не всё гладко
А у нас транспиляция давно через esbuild внутри Vite, тайпчек только в CI — и перф tsc как бы не болел. Но вот эдитор — да. В монорепе на Nx у меня tsserver стабильно отъедает 4 гига и думает по 8-10 секунд после переключения ветки. Ради одного только language server уже стоит переходить, остальное бонусом.
- sergeyserov
- Сообщения: 56
- Зарегистрирован: 12 май 2026, 05:59
Re: TypeScript 7 (tsgo): прогнал на нашей монорепе — тайпчек с 4 минут до 19 секунд. Но не всё гладко
На чём гоняли, если не секрет? Спрашиваю, потому что tsgo очень любит ядра. Дома на M3 Pro у меня вышло х13, а на гитлаб-раннере с двумя vCPU на дешёвом тарифе Selectel — скромные х4. Так что «в десять раз быстрее» из анонсов — это про многоядерные машины, на нищих раннерах чудес поменьше. Хотя х4 тоже никто не вернёт.
- kotlinmaster
- Сообщения: 21
- Зарегистрирован: 13 май 2026, 02:30
Re: TypeScript 7 (tsgo): прогнал на нашей монорепе — тайпчек с 4 минут до 19 секунд. Но не всё гладко
Апдейт спустя неделю, отвечаю заодно на вопрос: локально Ryzen 9, на CI 8 vCPU, там вышло х9. Погонял watch-режим: пересборка после правки 0.3-0.5 сек, причём стабильно, без рандомных фризов как у tsc --watch. Последнее узкое место теперь линт — смотрим на oxlint с тайп-правилами, чтобы добить и его. Моё пророчество: к концу года tsc 5.x в новых проектах станет таким же легаси, как webpack в мире сборщиков. Запомните этот пост.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- TypeScript нативный компилятор на Go (tsc-go) — ждём 10x или рано радоваться?
10 ответов · 1018 просмотров
-
-
- TypeScript ошибка Type string is not assignable to type never как исправить
9 ответов · 21 просмотров
-
-
- Прогноз спроса в ритейле: прогнал Chronos-Bolt и TimesFM против нашего CatBoost на реальных данных
4 ответов · 18 просмотров
-
- Перевели монорепу на TypeScript 7 (tsgo): типчек с 3 минут до 15 секунд, делюсь граблями
4 ответов · 16 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость