← Все статьи

Руны Svelte 5: явная реактивность вместо «магии»

Svelte 5 заменил неявное обновление интерфейса рунами. Что это дало размеру пакета и чем пришлось заплатить.

Руны Svelte 5: явная реактивность вместо «магии»
Содержание

Коротко

Заметка на Dev.to вспоминает обещание раннего Svelte: написал let count = 0, поменял переменную — интерфейс обновился сам, без хуков и массивов зависимостей. В пятой версии это обещание сменили руны $state, $derived и $effect. Автор считает их прямыми родственниками useState, useMemo и useEffect и спорит не с пользой явной реактивности, а с тем, что каркас перестал отличаться от тех, над кем раньше шутил.

Что произошло

Релиз Svelte 5 анонсировали 20 сентября 2023 года, стабильным он стал в конце 2024-го. Руны — это явные вызовы: состояние, производное значение и эффект. Раньше компилятор сам отслеживал присваивания обычным переменным. Теперь разработчик помечает, что именно должно быть реактивным. Для человека, который пришёл в Svelte именно за отсутствием этой пометки, сдвиг ощущается как смена договора, а не как косметика синтаксиса.

Команда каркаса объясняла переход тем, что неявная схема плохо масштабируется: в большом приложении трудно понять, от чего зависит обновление. Автор заметки эту боль не отрицает. Он приводит и выигрыш, который для него решает спор в пользу новой версии: пакет меньше примерно на 55%. Плюс код проще раскладывать по файлам, когда реактивность названа, а не спрятана в присваивании. Это уже не спор «руны вредны», а спор «ради чего отказались от прежней простоты».

Дальше тон личный. Он цитирует ощущение, что особенный каркас «вымывают» и что Svelte стал похож на остальных. Вывод, который он сам называет неудобным: явная, функциональная реактивность, похоже, общий пункт назначения, а не капитуляция одной команды. Компилятор по-прежнему делает часть работы, которой нет в чистых хуках, но щит «вам не нужно думать о реактивности» руны сняли. Сам он пишет, что, скорее всего, останется на пятой версии: сокращение пакета для него весомее ностальгии.

Почему это важно

Для команды, которая выбирает каркас в 2026 году, старые сравнения «Svelte без хуков против React с хуками» уже врут. Сравнивать нужно явную модель с явной: где компилятор всё ещё убирает работу за вас, насколько меньше пакет, и готовы ли люди в коде видеть $state, а не «просто переменную». Обещание четырёхлетней давности в вакансии и в учебнике стоит поправить, иначе новичок придёт за магией и получит руны.

Второй слой — про идентичность инструмента. Схождение к одной идее не равно бесполезности. Если несколько каркасов независимо приходят к явным зависимостям, значит неявная схема плохо жила в больших кодовых базах, а не «маркетинг победил». Потеря при этом настоящая: меньше сюрпризов ценой того, что реактивность снова надо объявлять. Это честный компромисс, если его так и называть.

На практике

Заметка — мнение одного разработчика, не замер размера пакета на вашем приложении. 55% имеет смысл проверить сборкой до и после перехода, а не цитировать как паспорт Svelte 5. Миграция старых присваиваний на руны ломает привычку «поменял переменную — и всё», поэтому её лучше делать на модулях, где зависимости и так уже путались.

Оставаться на четвёртой версии «чтобы было как раньше» тоже цена: новые материалы и исправления смотрят на руны. Автор для себя выбирает пятую и одновременно просит не делать вид, будто ничего не изменилось.

  1. В онбординге показывайте $state, $derived и $effect рядом с привычными хуками, чтобы не продавать устаревшую «магию».
  2. Перед миграцией соберите пакет на своём приложении и сравните размер, а не только ощущение от синтаксиса.
  3. Переводите сначала те модули, где неявные обновления уже трудно читать.
  4. Не ждите, что компилятор снова спрячет реактивность: её нужно объявлять, даже если часть работы он берёт на себя.

Итог

Svelte 5 оставил компилятор и забрал обещание, что интерфейс обновляется от обычного присваивания. Автор заметки считает это потерей характера и одновременно разумной платой за масштаб и меньший пакет. Для выбора каркаса важнее не ностальгия, а то, совпадает ли нынешняя явная модель с тем, что вы до сих пор рассказываете команде про Svelte.

Комментарии

Загрузка комментариев…