Skip to content
ai news

TypeScript стал в 10 раз быстрее

Миллионы разработчиков скоро сэкономят часы своего времени каждую неделю, и дело вовсе не в ИИ. Секрет кроется в фундаментальном изменении «под капотом», которое наконец устраняет самое узкое место JavaScript.

Jonah Park
TypeScript стал в 10 раз быстрее

Узкое место, которое мы все игнорировали

TypeScript 7 добился значительного прироста производительности, что наглядно демонстрирует способность нового компилятора собирать VS Code codebase. Этот масштабный проект, включающий 1,3 миллиона строк кода в почти 8000 файлах, теперь компилируется всего за 10 секунд. Это впечатляющее сокращение по сравнению со 125 секундами, требовавшимися предыдущему компилятору, что означает ускорение в 11,9 раза для одной из самых популярных сред разработки.

Технический эксперт Microsoft Андерс Хейлсберг точно определил основную проблему: архитектура JavaScript оптимизирована для пользовательских интерфейсов и веб-браузеров, а не для вычислительно интенсивных задач, необходимых компиляторам. Его фундаментальная однопоточная архитектура серьезно ограничивает масштабируемость, препятствуя эффективному использованию современных многоядерных процессоров для критически важных операций, таких как обработка abstract syntax trees или выполнение комплексной проверки типов.

Хотя в JavaScript существуют Web Workers как механизм параллелизма, они оказываются неэффективными для операций компилятора. Распределение сложных структур данных, таких как разобранные синтаксические деревья, между отдельными потоками требует огромных затрат на сериализацию и десериализацию. Этот процесс преобразования сложных объектов в «сырые» байты и обратно часто потребляет больше вычислительных ресурсов и времени, чем сама работа, что делает Workers непрактичным решением для требований компилятора к общей памяти и высокой пропускной способности.

Почему Go стал идеальным оружием

Переписывание компилятора TypeScript на Go обеспечило существенный прирост производительности. Этот стратегический перенос решил присущие JavaScript ограничения для вычислительно сложных задач. Примерно половина наблюдаемого ускорения обусловлена запуском нативно скомпилированного кода, а оставшаяся половина — высокоэффективной моделью параллелизма с общей памятью в Go.

Go без усилий распределяет вычислительную нагрузку между всеми доступными ядрами CPU. Это резко контрастирует с JavaScript, который в основном остается ограниченным одним ядром при выполнении операций, нагружающих процессор. Современные процессоры все чаще наращивают количество ядер, а не тактовую частоту отдельных ядер, что усиливает способность Go полностью использовать аппаратные ресурсы для параллельной обработки.

Модель параллелизма Go упрощает распределение задач, нагружающих CPU. Она избавляет разработчиков от необходимости управлять сложными потоками или сериализовать и копировать данные между процессами — распространенное «узкое место» в JavaScript при попытках использовать web workers. Такая архитектура делает Go по своей сути более подходящим для операций компилятора, позволяя напрямую обмениваться объектами и обеспечивая оптимизированное parallel execution.

Наконец-то мгновенная обратная связь

Прирост производительности выходит за рамки выполнения компиляции, глубоко влияя на ежедневный developer experience через языковой сервер TypeScript. Предыдущие версии часто заставляли разработчиков сталкиваться с заметными задержками в ожидании результатов проверки типов и подсветки ошибок в их IDE, особенно в обширных кодовых базах. Это часто приводило к досадным паузам в рабочем процессе.

TypeScript 7 фундаментально меняет эту динамику, обеспечивая практически мгновенную обратную связь. Разработчики теперь видят точные результаты проверки типов и привычные «волнистые линии», указывающие на ошибки, за считанные миллисекунды. Эта отзывчивость сохраняется даже при изменении крупномасштабных проектов, эффективно устраняя мучительные ожидания, которые ранее препятствовали непрерывной разработке и продуктивности.

Крайне важно, что новый языковой сервер также может похвастаться значительными улучшениями стабильности. Метрики показывают резкое сокращение числа сбоев в работе: количество неудачных команд языкового сервера снизилось более чем на 80% по сравнению с TypeScript 6. Кроме того, количество аварийных завершений сервера, которые часто прерывают работу, сократилось более чем на 60%.

Эти комплексные улучшения сводят к минимуму необходимость ручных перезапусков и устранения постоянных проблем с инструментарием. Для получения полного обзора этих улучшений и других новых функций обратитесь к официальному анонсу Announcing TypeScript 7.0 - Microsoft Developer Blogs. Портирование на Go, несомненно, изменило скорость отклика и надежность среды разработки TypeScript.

Нравится статья? Получайте такие каждое утро на почту.

одно письмо в день · отписка в два клика · без сторонних трекеров

Как обновиться (и на что обратить внимание)

Пользователи, обновляющиеся до нового компилятора, могут выполнить npm install typescript для получения версии 7. Для пользователей VS Code также необходимо установить специальное расширение 'TypeScript 7', чтобы в полной мере использовать улучшения производительности в IDE. Этот релиз представляет собой прямой перенос существующего компилятора на Go, а не переписывание с нуля.

Такой подход обеспечивает широкую совместимость с существующими кодовыми базами. Разработчикам стоит ожидать, что основным заметным изменением станет резкое увеличение скорости компиляции и повышенная отзывчивость языкового сервера. Функциональное поведение остается в значительной степени идентичным предыдущим версиям TypeScript.

Важным ограничением в этом первоначальном выпуске является отсутствие полностью совместимого программного API. Это упущение напрямую затрагивает несколько ключевых инструментов в экосистеме TypeScript. Проекты, полагающиеся на эти утилиты для таких задач, как линтинг, тестирование или выполнение во время выполнения (runtime), не будут работать корректно с TypeScript 7.0.

В частности, такие интеграции, как:

  • typescript-eslint
  • ts-jest
  • ts-node

Эти и другие подобные инструменты ожидают обновления. Разработчикам следует учесть, что полная совместимость программного API ожидается в предстоящем релизе TypeScript 7.1, который решит эти проблемы зависимостей экосистемы.

Часто задаваемые вопросы

Почему компилятор TypeScript был переписан на Go?

Оригинальный компилятор на базе JavaScript был ограничен однопоточной природой JavaScript, которая плохо подходит для вычислительно интенсивных задач. Язык Go был выбран из-за его нативной производительности и превосходной модели параллелизма с разделяемой памятью, что позволяет компилятору использовать все доступные ядра процессора.

Насколько быстрее TypeScript 7?

Он работает значительно быстрее. Например, он компилирует кодовую базу VS Code объемом 1,3 миллиона строк примерно за 10 секунд по сравнению со 125 секундами у старого компилятора — это почти 12-кратное улучшение. Аналогичные результаты наблюдаются и в других крупных проектах.

Сломает ли TypeScript 7 мои существующие инструменты?

Возможно. Хотя компилятор спроектирован так, чтобы быть совместимым, программный API пока недоступен. Инструменты, зависящие от него, такие как typescript-eslint, ts-jest и ts-node, не будут работать до релиза 7.1.

Как начать использовать TypeScript 7?

Вы можете установить его через npm (npm install typescript). Для наилучшего опыта работы в VS Code вам также необходимо установить специальное расширение 'TypeScript 7' из маркетплейса, так как версия по умолчанию еще не обновлена.

Found this useful? Share it.

For builders

Want Stork to write one of these about your product?

Send us a URL. We use the product, form a view, and publish what we actually think — in 8 languages, labeled Sponsored, with no copy approval on your side. That last part is what makes it worth quoting.

See how it works$500 · AI tools & software only