Сегодня было анонсировано следующее поколение инструментария для JavaScript от автора Vue и Vite. В рамках начального финансирования было привлечено $4.6 миллиона, при этом основными инвесторами стали Accel и Amplify. В свете этого анонса важно понять контекст, в котором он происходит, и значимость изменений, которые он приносит.

Пятнадцать лет назад JavaScript был в основном языком сценариев для браузеров. Сегодня он стал самым широко используемым языком, применяемым для создания веб-приложений, мобильных приложений, игр и даже Интернета вещей (IoT). Несмотря на развитие множества инструментов для решения все более сложных задач, экосистема JavaScript остаётся фрагментированной, что делает настройку совместной работы зависимостей одной из самых сложных задач. 

Эван Ю вложил значительные усилия в изучение стека инструментов JavaScript и разработку абстракций для упрощения работы разработчиков, что привело к созданию Vite в 2020 году. За четыре года Vite стал одним из ведущих инструментов для веб-разработки, поддерживаемым множеством мета-фреймворков и обладающим более чем 15 миллионами загрузок в неделю. Vite зарекомендовал себя как общий инфраструктурный слой для следующего поколения веб-фреймворков.

Еженедельные загрузки Vite с 2020 года в NPM
Еженедельные загрузки Vite с 2020 года в NPM

Сообщество, оказавшее доверие Vite, побудило автора глубоко задуматься о будущем проекта. Несмотря на значительное улучшение опыта разработчиков, Vite по-прежнему зависит от множества абстракций и обходных путей для сглаживания несоответствий между зависимостями. Внутри он страдает от дублирования парсинга и сериализации, что ограничивает его производительность. Попытки адаптировать новый бандлер Rolldown для нужд Vite показали, что проблемы Vite отражают общие проблемы экосистемы JavaScript: фрагментация, несовместимость и неэффективность. Для кардинального изменения ситуации необходим единый инструментарий.

Теперь представьте себе такой набор инструментов:

  • Унификация: использование одного и того же AST, resolver и module interop для всех задач (парсинг, преобразование, линтинг, форматирование, пакетирование, минификация, тестирование), устранение несоответствий и снижение избыточных затрат на парсинг.

  • Высокая производительность: написан на компилируемом языке, разработан с нуля для скорости, с максимальным распараллеливанием и поддержкой JS-плагинов, не требующих больших затрат. За средства, выделенные на производительность, открываются более амбициозные возможности, которые улучшают не только работу разработчиков, но и конечных пользователей.

  • Композитность: каждый компонент цепочки инструментов может быть использован независимо друг от друга, предлагая строительные блоки для расширенной кастомизации.

  • Независимость от времени выполнения: не привязан ни к одной конкретной среде выполнения JavaScript — обеспечивает одинаковые возможности для разработчиков во всех окружениях.

Такой набор инструментов не только усовершенствует Vite, но и приведет к значительным улучшениям во всей экосистеме JavaScript. Это амбициозное видение, и для его реализации требуется команда, работающая на полную ставку, — то, что было невозможно в рамках независимой модели устойчивого развития моих прошлых проектов. Именно поэтому была основана компания VoidZero.

За последний год была собрана команда с глубоким опытом работы с инструментарием JavaScript, включая создателей и основных участников таких широко распространенных проектов с открытым исходным кодом, как Vite, Vitest, Oxc , а также бывших основных участников Rspack .

Ведётся упорная работа над созданием фундаментальных элементов задуманного инструментария. В дополнение к постоянным улучшениям Vite были проделаны следующие этапы:

  • Самый быстрый и наиболее соответствующий спецификации парсер JavaScript (oxc-parser), в 3 раза быстрее SWC — бенчмарк

  • Самый быстрый Node.js-совместимый resolver (oxc-resolver), в 28 раз быстрее, чем enhanced-resolve — бенчмарк

  • Самый быстрый преобразователь TypeScript / JSX (oxc-transform), в 4 раза быстрее SWC — бенчмарк

  • Самый быстрый линтер (oxlint), в 50-100 раз быстрее ESLint — бенчмарк

  • Самый функциональный инструмент для запуска тестов веб-приложений (Vitest)

  • Самый быстрый сборщик (Rolldown), построенный на основе Oxc. Быстрее, чем esbuild и все другие бандлеры Rust — бенчмарк (в настоящее время в альфа-версии)

Эти проекты используются ведущими командами инженеров из таких компаний, как OpenAI (веб-клиент ChatGPT), Google, Apple, Microsoft, Visa, Shopify, Cloudflare, Atlassian, Reddit, HuggingFace, Linear и многих других.

Дальнейший план развития

Главная цель на ближайшие месяцы — стабилизировать Rolldown и сделать его единым бандлером для Vite как в процессе разработки, так и в производстве. Уже достигнут значительный прогресс, и планируется выпустить альфа-версию Vite с поддержкой Rolldown к концу текущего года.

В 2025 году работа будет продолжена над другими запланированными функциями Oxc (минификация, форматирование), а также постепенному переходу всей экосистемы Vite на Rolldown и Oxc. Будет вестись тесное сотрудничество с партнёрами по экосистеме и заинтересованными сторонами для обеспечения плавного перехода для конечных пользователей.

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

Ответы на основные вопросы:​

  • Какова связь между этими проектами с открытым исходным кодом и VoidZero?
    Руководство Vite и Vitest осталось таким же, как и раньше. Обе основные команды включают в себя членов, работающих в различных организациях (VoidZero, StackBlitz, NuxtLabs, Astro). VoidZero Inc. нанимает нескольких основных участников Vite и Vitest.

  • Что на счёт Vue?
    VoidZero как бизнес полностью отделен от Vue. Vue останется независимым проектом, но получит приоритетную поддержку от нового инструментария, разработанного VoidZero

  • Почему именно Oxc, а не SWC?
    Многие из членов нашей команды внесли нетривиальный вклад в SWC в прошлом. Помимо чистого преимущества в производительности, Oxc имеет ряд фундаментальных конструктивных отличий от SWC, которые делают его лучшей основой для создаваемого нами сквозного инструментария. Мы поделимся более подробной технической информацией на эту тему в будущих статьях блога. Следите за новостями!

  • Почему Rolldown вместо esbuild / Rollup?
    Нам нужен бандлер, который был бы очень быстрым, хорошо подходил для сборки приложений и был полностью совместим с экосистемой плагинов Vite. Это подробно обсуждается в документации по Rolldown. Построение Rolldown поверх Oxc также открывает возможность параллельно выполнять больше задач, связанных с AST, на этапе пакетирования, например, эмулировать и пакетировать dts с isolatedDeclaration: true.

  • Чем это будет отличаться от предыдущих попыток создать единый инструментарий JS?
    Самая большая проблема унифицированного инструментария — это проблема «нулевого уровня»: он должен набрать критическую массу для экспоненциального принятия, чтобы оправдать дальнейшее развитие, но трудно преодолеть пропасть до того, как он действительно реализует свое видение. У VoidZero такой проблемы нет, потому что Vite уже является самым быстрорастущим инструментарием в экосистеме JavaScript.

Комментарии (8)


  1. flancer
    02.10.2024 05:11
    +3

    Насколько я понял, теперь можно будет более эффективно генерировать триаду JS/HTML/CSS из ESM/CJS/UMD/TS/JSX/TSX/HTMX/Markdown/$mol.tree... Наверное, это добро (если не принимать во внимание, как потом этот зоопарк дебажить).


    1. nin-jin
      02.10.2024 05:11

      https://page.hyoo.ru/#!=8i7ao7_xfyxah/View'8i7ao7_xfyxah'.Details=%D0%95%D0%B4%D0%B8%D0%BD%D1%8B%D0%B9%20AST%20%D1%87%D1%82%D0%BE%D0%B1%D1%8B%20%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D0%B2%D1%81%D0%B5%D0%BC%D0%B8


      1. flancer
        02.10.2024 05:11

        С таким предложением лучше напрямую к ним. Я к AST вообще никаким боком.


      1. functyon
        02.10.2024 05:11

        background-image доставляет.


  1. yarkov
    02.10.2024 05:11
    +7


  1. functyon
    02.10.2024 05:11
    +3

    отличные новости.


  1. slonopotamus
    02.10.2024 05:11
    +1

    экосистема JavaScript остаётся фрагментированной

    ... и в целях борьбы с этой фрагментированностью товарищ запилил не один, не два, а аж три фреймворка!


  1. vsviridov
    02.10.2024 05:11
    +5