Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Фронтенд
  4. Svelte 5.1: встроенные сигналы и реактивность без компилятора для сверхбыстрых UI

Svelte 5.1: встроенные сигналы и реактивность без компилятора для сверхбыстрых UI

Запланировано Прикреплена Закрыта Перенесена Фронтенд
svelte 5.1сигналыреактивность
1 Сообщения 1 Постеры 59 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал в отредактировано
    #1

    Svelte 5.1 вводит встроенные сигналы - это примитивы реактивности, которые работают без компилятора. Они заменяют старые stores и reactive statements, делая код проще и быстрее. Теперь UI обновляется только там, где нужно, без лишних перерендеров.

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

    Сигналы: основа новой реактивности

    Сигналы в Svelte 5.1 - это простые функции, которые хранят состояние и автоматически отслеживают зависимости. Вместо глобального трекинга, как раньше, они обновляют только используемые части UI. Это похоже на signals из Solid.js, но встроено прямо в Svelte без внешних библиотек.

    Возьмем счетчик: раньше нужен был writable store с подпиской, теперь const count = signal(0). При изменении count обновляется только текст с этим значением. На сервере сигналы сериализуются для SSR, а на клиенте гидратируются без ошибок. Это снижает размер бандла и ускоряет запуск.

    • Создание сигнала: const count = signal(0); - готово, никаких импортов.
    • Чтение: Просто count() в шаблоне или JS, Svelte подпишется автоматически.
    • Обновление: count.update(n => n + 1) или count.set(5) для прямой установки.
    • Нюанс: Сигналы мутабельны только в обновлениях, чтобы избежать race conditions.
    Аспект До Svelte 5.1 Svelte 5.1 с сигналами
    Код состояния Stores + $: signal() + чтение
    Перерендеры Глобальные Локальные, точечные
    SSR Ручная гидратация Автоматическая
    Размер бандла +5-10% Оптимизировано

    Руны: реактивность без компилятора

    Руны - это ключевые слова вроде $state, $derived и $effect, которые добавляют реактивность прямо в JS. Они не требуют компиляции на этапе сборки, работают в рантайме. $state создает сигнал, $derived вычисляет значения на основе зависимостей, $effect запускает сайд-эффекты.

    Пример: $state({ count: 0 }) для объекта, Svelte превратит свойства в сигналы. Измените count, и шаблон обновится. Для производных: const double = $derived(count() * 2). Эффекты: $effect(() => console.log(count())) - логирует при изменениях. Это делает код предсказуемым и переносимым.

    • $state: Для мутабельного состояния, работает с примитивами и объектами.
    • $derived: Вычисляемые значения, пересчитываются только при изменении зависимостей.
      1. Пример: const total = $derived(items().length * price());.
    • $effect: Сайд-эффекты, как подписки или логи.
    • Важно: Руны работают везде - в компонентах, утилитах, даже вне Svelte.

    Преимущество: Нет магических $ префиксов в шаблонах, все явно.

    Примеры сверхбыстрого UI

    В реальных приложениях сигналы ускоряют списки и формы. Для todo-листа: массив в $state, добавление через push, UI обновляется точечно. Формы: bind:value с сигналами валидирует на лету без библиотек. Анимации встроены, transition работает с сигналами из коробки.

    Сравним с React: там useState + useEffect, в Svelte - одна руна. В списке из 1000 элементов только измененный рендерится. На мобильных устройствах разница в FPS огромна. Интеграция с SvelteKit позволяет сигналы на сервере для API.

    • Список задач:
      • $state(todos = []);
      • todos.push({ text: input(), done: false });;
      • Шаблон: {#each $todos as todo} ... {/each}.
    • Форма с валидацией: $derived(isValid = email().includes('@')).
    • Эффект для API: $effect(() => fetch(/api/${id()})).
    Сценарий React (hooks) Svelte 5.1 (сигналы)
    Счетчик 3 строки + эффект 1 строка
    Список map + key each + сигналы
    Производительность Батчинг Точечные обновления
    SSR Next.js hacks Нативно

    Совет: Для больших состояний группируйте в proxy-объекты с $state.

    Взгляд на производительность и будущее

    Сигналы делают Svelte 5.1 лидером по скорости UI - тесты показывают в 2-3 раза меньше операций DOM. Без компилятора код работает в любом JS-окружении, от браузера до Node. Это открывает двери для серверных компонентов и edge computing.

    Остается экспериментировать с комбинациями рун в утилитах. Следующий шаг - полная совместимость с Web Components. Такие изменения меняют подход к фронтенду навсегда.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы