3.5 KiB
3.5 KiB
Загрузка страницы — flow (май 2026)
Последовательность при открытии/перезагрузке
1. HTML загружен, JS инициализирован
│
▼
2. checkAuth() (auth.js)
├── localStorage["auth_token"] отсутствует → showLoginOverlay() → СТОП
└── токен есть → setUserAvatar() → hideLoginOverlay() → reloadAll()
│
▼
3. reloadAll() (app.js)
├── показывает в статусе "Загрузка... Nс" (startTimedStatus, тикает каждую секунду)
├── показывает в таблице "⏳ Загружаем функции..."
├── запускает 5 параллельных запросов (Promise.all):
│ GET /console/api/environments
│ GET /console/api/packages
│ GET /console/api/functions ← обычно самый долгий
│ GET /console/api/httptriggers
│ GET /console/api/timetriggers
└── (ждём ответа... может занять 3–10с при cold start)
│
▼
4. Данные получены
├── обновляем счётчики (envs, pkgs, fns, http, cron)
├── рендерим ПЕРВУЮ строку функций немедленно
├── остальные строки добавляем по одной каждые 40мс (setTimeout)
└── по завершении статус: "Загружено N функций за Xс"
Путь через doLogin() (при ручном входе)
После успешного POST /console/api/auth:
- Сохраняем токен в localStorage
- Проверяем GET /console/api/ns/status
ready: false→pollNSStatus()→ показывается init-overlay с прогрессом по стадиямready: true→ сразуreloadAll()
Почему долго
При первой загрузке после простоя:
- Fission
poolmgrможет не иметь прогретых пулов → холодный старт на first request к каждому language env - Kubernetes API (~k8s list всех функций, пакетов) — несколько сотен мс при большом числе объектов
Promise.allждёт самый долгий запрос
Что показывается пользователю (v1.3.34+)
| Момент | Что видит |
|---|---|
| Сразу при запуске | Таблица: "⏳ Загружаем функции..." |
| Каждую секунду | Статус: "Загрузка данных Nс" |
| Первая функция пришла | Первая строка таблицы появляется |
| +40мс × N | Строки добавляются одна за другой |
| Конец | Статус: "Загружено N функций за Xс" |
Файлы
| Файл | Роль |
|---|---|
ui/js/auth.js → checkAuth() |
Точка входа при загрузке страницы |
ui/js/auth.js → doLogin() |
Ручной вход, проверка NS status |
ui/js/app.js → reloadAll() |
Загрузка данных, построчный рендер |
ui/js/init.js → pollNSStatus() |
Ожидание готовности namespace (init overlay) |
ui/js/init.js → startTimedStatus() |
Таймер в статус-баре |