Отрисовка на сервере и на клиенте
Сервер отдаёт готовый HTML, который находят поисковые системы, а клиентский код оживляет разметку и дальше обновляет страницы без перезагрузки.
Продукт
Свой веб-фреймворк: серверная отрисовка, живые интерфейсы и один файл на выходе
Задача
Задача заказчика и то, что мешало решить её раньше.
Готовые фронтенд-фреймворки задают свою архитектуру: серверную отрисовку приходится пристраивать сбоку, мультитенантность собирать из обходных путей, а оформление расползается по разметке. Нужна была основа, которая решает это по умолчанию.
Механики
Механики, из которых собран продукт.
Сервер отдаёт готовый HTML, который находят поисковые системы, а клиентский код оживляет разметку и дальше обновляет страницы без перезагрузки.
Один код и разные бренды: механизм оверлеев позволяет вести нескольких заказчиков в одном репозитории.
Стили описываются объектами с токенами темы, поэтому цвета и типографика живут в одном файле, а не расползаются по разметке.
Серверная часть работает на высокопроизводительном HTTP-сервере, а WebSocket встроен во фреймворк, а не приделан сбоку.
Сборка даёт исполняемый файл: развёртывание сводится к копированию, а подготавливать окружение на сервере не требуется.
Конвейер
От адреса в браузере до готовой страницы и её оживления на клиенте. Промежуточной сборки между шагами нет.
Дерево маршрутов объявлено в манифесте регулярными выражениями. Срабатывает первое совпадение: оно определяет страницу и её параметры.
Функция страницы получает контекст, параметры маршрута и строку запроса, читает контент и возвращает данные для шаблона.
Раньше страницы выполняется серверная функция layout: шапка, подвал, тема и язык. Страница получает уже готовое окружение.
Разметка описана в файлах .fr. Страница собирается из блоков, и у каждого блока своя папка: шаблон, логика и стили лежат рядом.
Стили: объекты с токенами темы. Сборщик выдаёт каждому классу свой хеш, склеивает всё в один файл и отбрасывает правила, которых нет в разметке.
Сервер отдаёт полностью собранный HTML: его читают поисковые системы, и он открывается даже там, где не выполняется JavaScript.
Клиентский рантайм находит блоки по разметке и навешивает обработчики. Дальше переходы идут без перезагрузки, а данные приходят по HTTP или WebSocket.
Место в стеке
pastish2: веб-слой между серверной платформой и продуктами.
Сервисы, события, хранилища, маршрутизация запросов. Отвечает за данные и вычисления.
Маршруты, страницы, блоки, шаблоны, стили и клиентский рантайм. Отвечает за то, что видит человек.
Этот сайт, платформа онлайн-обучения Udeu, «Амбиции», бэк-офис колл-центра RC Club.
Результат
Не свойства ради свойств, а следствия для продукта и команды.
Сервер отдаёт готовый HTML: его видят поисковые системы, он открывается на слабом устройстве и не пропадает, если скрипт не загрузился.
Основа своя: нужную возможность добавляют в фреймворк, а не ждут обновления библиотеки и не обходят её ограничения.
Блок: папка из трёх файлов, страница: функция на сервере и шаблон. Маршрут объявляется строкой в манифесте.
Цвета и типографика описаны токенами темы. Смена оформления: это другой набор токенов, а не правка разметки.
Механизм оверлеев собирает разные сайты из общей основы: так Udeu и «Амбиции» делят один код.
Сборка даёт один исполняемый файл. Развёртывание не требует подготавливать окружение на сервере.
Технологии
Платформа, стек и площадки, на которых работает продукт.
Технологии
Платформы
Ссылки
Сайт продукта и материалы о нём.
Живое демо
Демо-доступ предоставляется по запросу.
Развернём white-label, настроим процессы и подключим вашу команду.