теория

Склейка в браузере, без магии

Клиентская композиция звучит страшнее, чем устроена: по частям это знакомая механика.

Оболочка — маленькое приложение, которое загружается первым и умеет три вещи: разобрать адрес и понять, чья это зона; подгрузить бандл зоны нужной версии; отдать ей управление и кусок экрана. Всё. Чем оболочка тоньше, тем реже она меняется — а меняется она в худшем для всех месте: её обновление видят все зоны сразу.

Манифест версий — та самая «карта деплоев»: JSON, где написано «зона рядов — версия 4.12 вон там, зона прогнозов — 7.3 вон там». Деплой зоны — это выложить новый бандл и обновить строчку в манифесте; откат — вернуть строчку. Никто ничего не пересобирает. Узнаёшь паттерн? Это реестр из десятого модуля и request routing из четырнадцатого, встретившиеся в браузере.

У механики загрузки две степени жёсткости. Жёстче — рантайм-федерация: зоны могут делить общие библиотеки и грузить куски друг друга (об этой возможности и её цене — модуль про деплой). Мягче — «мультизоны»: между зонами обычный переход по ссылке с полной загрузкой, внутри зоны — живое приложение. Мягкий вариант скучнее и надёжнее: единственная его цена — секунда белого экрана на переходе между разделами, и наша нарезка сделала эти переходы редкими. Начинать стоит с него: устройство, которое можно объяснить на салфетке, чинится в три ночи без специалиста по федерации.

Про адрес. Правило «оболочка владеет верхом, зона — глубиной» имеет важное следствие: вся навигация — через адрес. Кнопка «открыть прогноз этого ряда» в зоне рядов — это ссылка на «/forecasts/series/1234», а не вызов внутренностей чужой зоны. Адрес — единственный способ для зон «указывать» друг на друга, и он же — публичный контракт для закладок и писем. Одна строка URL оказалась самым честным API терминала: видимым, версионируемым самой природой веба и проверяемым простым кликом.

← назад