Skip to content

Ленивая загрузка

Проблема

Реальная CLM-презентация — это 40–80 слайдов, часто с видео. Если держать их все в DOM сразу, память WebView на планшете кончается, и приложение вылетает.

Решение

SlideStore держит в DOM только окно: текущий слайд и preload соседей с каждой стороны (по умолчанию 1). При навигации дальние слайды выгружаются — их компоненты получают disconnectedCallback и освобождают ресурсы. Метаданные (id, заголовок) читаются из HTML заранее, без монтажа, через инертный <template> — поэтому точки навигации и порядок известны всегда.

дек из 6 слайдов, preload = 1

позиция 0:  [0][1]            ← в DOM 2
позиция 3:        [2][3][4]   ← в DOM 3, слайды 0,1 выгружены
позиция 5:           [4][5]   ← в DOM 2

Глубину окна задаёт "preload" в deck.json. Это значение сохраняется внутри .pulse и действует одинаково в студии и офлайн-Viewer.

Проверено тестом

tests/SlideStore.test.mjs подтверждает, что за проход по всему деку из 6 слайдов пик составляет 3 слайда в DOM, а не 6 — порядок и токены персонализации при этом сохраняются.

bash
npm test
# ✔ окно монтирует центр ± preload и выгружает дальние
# ✔ пик слайдов в DOM ограничен окном (3 из 6)
# ✔ preload=0 держит только текущий слайд

Демо-контент («Кардиолекс®») вымышлен.