1.6 Серверное взаимодействиеlink

Назначениеlink

SFLoaderPlugin взаимодействует с сервером для получения:

  • Списка необходимых JS и CSS-файлов;
  • Шаблонов Smart-компонентов (если они используются);
  • Конфигураций и зависимостей;
  • Результатов кэшированной сборки (если она уже есть).

Такое взаимодействие необходимо, если проект работает в режиме standAlone: false, то есть не использует пред собранные ассеты, а полагается на динамическую загрузку и серверную генерацию.

Основной запросlink

Загрузчик отправляет GET-запрос на сервер по адресу:

/simai/loader/loader.php

С параметрами, например:

?a=modal,tooltip&relations={"modal":["core"]}&checkFake=true

Передаваемые параметрыlink

Параметр Назначение
a Список компонентов для загрузки
relations Объект зависимостей между компонентами
checkFake Флаг для запроса fake-шаблонов Smart-компонентов
url URL страницы (для формирования pageHash)
load Было обращение к бекенду ранее или нет
gzip Признак поддержки gzip-файлов (Что бы не гонять curl каждый раз)

Серверная обработкаlink

На сервере работает класс Loader.php, который:

  1. Обрабатывает входящие параметры;
  2. Вызывает LoaderAsset, AssetManager, TemplateLoader;
  3. Генерирует:
    1. JS и CSS сборки;
    2. fake-шаблоны;
    3. конфигурацию для инициализации.

Ответ сервераlink

Ответ может содержать:

  • smartFakeContent — сериализованные шаблоны;
  • Список путей к .js и .css-файлам;
  • Идентификаторы кеша (BUNDLE_ID, pageHash);
  • Флаг gzip.
{
  "status": true,
  "js": [
    "/simai/cache/loader/bundle-abc123.js"
  ],
  "css": [
    "/simai/cache/loader/bundle-abc123.css"
  ],
  "smartFakeContent": {
    "templates": {
      ...
    },
    "fakeTemplates": {
      "modal": "<div>...</div>"
    }
  },
  "bundleId": "abc123"
}

Особенностиlink

  • Запрос всегда зависит от текущего URL (хэшируется на сервере);
  • Сервер может вернуть уже готовые сборки;
  • Используется библиотека MatthiasMullie\Minify для объединения и минификации;
  • Для Smart-компонентов вызывается TemplateLoader::buildObject().