Фрагменты шаблонов в FAST Element образуют механизм повторного использования частей шаблона и управления их жизненным циклом без избыточного рендеринга. Такой подход особенно важен при создании компонентов с насыщенной логикой и большими DOM-структурами.
В FAST фрагменты определяются внутри шаблона с помощью директив. Они позволяют разбивать крупные участки разметки на управляемые блоки, которые могут быть условными, повторяющимися или просто отделёнными для оптимизации.
Ключевая идея: фрагмент рендерится один раз и может обновляться частями, не затрагивая остальной шаблон. Это снижает нагрузку на DOM и уменьшает количество операций по рефлоу.
Фрагменты обеспечивают хранение одного и того же DOM-узла на протяжении всего жизненного цикла компонента. Например, если фрагмент содержит сложный набор элементов, при обновлении привязок FAST обновит только изменившиеся значения, но не будет создавать новый DOM.
Это даёт два преимущества:
FAST предоставляет возможность формировать условные фрагменты с
помощью when и elseWhen. Такие конструкции
формируют дерево возможных DOM-ветвей, переключаемых по условиям без
потери состояния вложенных узлов.
Примерный принцип работы:
Это уменьшает накладные расходы при частом переключении интерфейсных состояний.
Для итеративных структур используется директива repeat,
формирующая список фрагментов. Каждый элемент списка связан с
собственным фрагментом, что позволяет обновлять только те элементы, чьи
данные изменились.
FAST реализует механизм распознавания позиций: при изменении массива не весь список перестраивается заново, а производится сопоставление ключей (или индексов) для выполнения минимального набора операций.
Фрагменты тесно интегрированы с системой привязок. Обновления происходят реактивно, а каждый фрагмент отслеживает только свои зависимости. Такая локализация ускоряет работу и упрощает понимание поведения шаблона.
Особенность: привязки внутри фрагмента не затрагивают другие части шаблона, даже если опираются на те же данные.
Каждый фрагмент имеет внутренний жизненный цикл:
создание → инициализация привязок → активация → обновления → деактивация → освобождение ресурсов
FAST стремится максимально отложить освобождение и повторно использовать созданные узлы. Это позволяет объединить преимущества виртуального DOM и прямой манипуляции с реальным DOM.
Использование фрагментов заменяет шаблонное клонирование при обновлениях на выборочные операции. В результате:
Фрагменты особенно эффективны в компонентах с высокими требованиями к интерактивности, где состояние быстро меняется, а строгий контроль за обновлениями DOM критичен.
Фрагменты включаются в состав компонентных шаблонов FAST Element и работают совместно с реактивными свойствами. При обновлении свойства FAST вызывает процесс обновления привязок, который последовательно проходит по фрагментам и обновляет только нужные части DOM.
Важный момент: фрагменты полностью совместимы с кастомными элементами, включая вложенные компоненты и слоты.
Фрагменты позволяют организовывать шаблон компонентно, но без избыточного количества отдельных компонентов. Это даёт гибкость: сложные шаблоны можно собирать из повторяемых участков без усложнения структуры проекта.
Применяются следующие принципы:
При использовании слотов фрагменты помогают определять, какие порции DOM должны быть отображены в зависимости от содержимого. Такое поведение востребовано при создании UI-библиотек и дизайн-систем.
Слоты могут становиться фрагментами, обеспечивая реактивное поведение даже внутри внешнего контента.
Реактивная модель FAST основана на отслеживании свойств. Изменение свойства запускает пересчёт привязок в соответствующих фрагментах, что уменьшает количество ненужных операций. Это обеспечивает предсказуемую и прозрачную модель обновления состояния.
Свойства, не задействованные во фрагментах, не запускают обновления, что благотворно сказывается на производительности.
Фрагменты шаблонов в FAST Element формируют фундаментальную часть архитектуры, направленную на повышение эффективности, улучшение структуры шаблонов и обеспечение контроля над обновлениями DOM при разработке масштабируемых интерфейсов.