Svelte  —  это фронтенд-компилятор, который произвел революцию в области программирования. Простота и принцип предварительного компилирования, лежащие в основе Svelte, позволяют разработчикам быстро осваивать эту технологию. Svelte берет на себя большую часть тяжелой работы, поскольку совершает компиляцию, напрямую работая с вебпаком и не требуя виртуального DOM. В силу вышеупомянутых причин выбор в пользу продвинутого фреймворка Svelte ни у кого не вызывает сомнений.

Проблема

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

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

Решение: ReSvelte

Не найдя готового решения, команда Hoon Park самостоятельно создала инструмент, включающий визуализатор дерева компонентов для приложений Svelte и решающий проблему повторного рендеринга.

Для большего удобства и доступности ReSvelte реализован как расширение VS Code, чтобы разработчикам не нужно было открывать несколько вкладок или отдельных приложений. Отлаживать приложение можно в той же интегрированной среде разработки. Эффективность труда разработчиков стала главным приоритетом для Hoon Park.

Установка

  1. Установите ReSvelte в VS Code Extension MarketPlace.
  2. В нижней части боковой панели появится значок ReSvelte  —  установка прошла успешно!
  3. Загрузите папку Svelte.
  4. Если папка загрузится должным образом, на боковой панели появится дерево компонентов.
  5. Перемещайтесь с помощью клавиши со стрелкой вниз, чтобы развернуть дерево и просмотреть компоненты, отображаемые в приложении.

Основные возможности

  • Простой импорт папки приложения Svelte.
  • Визуализация дерева компонентов.
  • Загрузка элементов с вложенными компонентами.
  • Отображение ключевых показателей производительности приложения (общее количества компонентов и количество повторно рендерируемых компонентов).
  • Журналы ошибок для любых проблем парсинга или рендеринга.

Все основные функции помогают разработчику Svelte разобраться в масштабируемой базе кода. В приложении учтено большинство критических ситуаций, а при обнаружении новых ошибок команда планирует обновлять ReSvelte.

Дерево разделено на компоненты, расположенные в больших ячейках, и элементы, находящиеся в меньших ячейках, которые содержат классические теги HTML-элементов, такие как div, h1 и main. Метрики производительности предназначены для подведения итогов работы приложения с помощью полезных ключевых показателей эффективности (KPI). Журналы ошибок для любых проблем импорта, с которыми сталкивается система, также будут рассматриваться в дополнение к метрикам производительности.

За кадром: поиски и находки

Чтобы начать работу, команде пришлось найти способ рендеринга React в WebView, API расширения VS Code. Так была реализована боковая панель, которая позволила отобразить дополнительную информацию в понятном и удобном для пользователя виде. Настройка TypeScript, WebView и вебпака для совместной работы была трудным, но плодотворным опытом.

Следующий важный шаг был связан с парсингом файлов Svelte. Из-за скудности ресурсов для такой новой технологии команда решила использовать svelte-parse  —  npm-пакет, который не следует путать с собственным парсером Svelte.

Применение svelte-parse дало свободу в выборе именно того, что нужно было получить от парсера. Эта технология позволила вызвать и парсить каждый элемент и компонент Svelte вместе с его соответствующими дочерними элементами. При этом были отфильтрованы все файлы, необходимые для построения дерева компонентов и хранения необходимых данных.

Однако парсер не был совершенен, поэтому пришлось учитывать каждый тег, а не только компоненты и скрипты Svelte. Эти дополнительные теги включали такие элементы, как divs и mains. Следовательно, нужно было рекурсивно вызывать парсер не только для компонентов Svelte, но и для элементов Svelte, чтобы обработать компоненты, которые могли “жить” внутри этих элементов.

После первоначального разбора команде потребовалось придумать алгоритм для проверки каждого экземпляра компонента Svelte. Создание псевдонимов  —  это первый шаг минификации кода, что и выполняет вебпак для оптимизации производительности приложений.

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

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

Планы на будущее

ReSvelte не является законченным продуктом. Приложению предстоит пройти долгий путь развития, и команда предложила множество идей, как можно усовершенствовать продукт. Список улучшений включает, но не ограничивается следующим.

  • Сохранение путей ко всем файлам, что позволит пользователю, кликнув на компонент, перейти к этому файлу для дальнейшего редактирования или подтверждения.
  • Добавление времени рендеринга в метрики производительности.
  • Использование памяти импортированного приложения.
  • Добавление ссылки в дерево компонентов для отображения иерархии.
  • Автоматический поиск компонентов приложения, которые работают не так, как ожидалось, и перевод пользователя в эту область.
  • Функция резервного копирования, которая позволит вносить изменения без риска для текущего состояния приложения.
  • Обновление расширения в режиме реального времени.

Кроме того, ReSvelte  —  продукт с открытым исходным кодом, а значит, каждый может внести в него свой вклад.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Hoon Park: ReSvelte- A Svelte Developer Tool and Component Tree Visualizer (VS Code Extension)

Предыдущая статья8 пунктов по стилю React + TypeScript
Следующая статьяFlutter и SonarQube для статического анализа кода