ui: progressive table render + load timer, v1.3.34

This commit is contained in:
“Naeel”
2026-05-03 17:34:07 +04:00
parent f85027e986
commit 4ecaa508ea
4 changed files with 99 additions and 8 deletions
+66
View File
@@ -0,0 +1,66 @@
# Загрузка страницы — 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:
1. Сохраняем токен в localStorage
2. Проверяем 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()` | Таймер в статус-баре |