1fd7fcc3c8
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
47 lines
4.6 KiB
Markdown
47 lines
4.6 KiB
Markdown
# Phase 3: Ленивая загрузка кода симуляций
|
|
|
|
**Status:** ✅ Done (70762be) — vm-harness + owner-in-files инвариант пройдены; нужна браузер-проверка
|
|
**Parent plan:** [PLAN.md](./PLAN.md)
|
|
**Domain:** frontend
|
|
|
|
## Objective
|
|
Грузить тяжёлый код симуляции и движков по клику, а не 58 скриптов + three.js сразу.
|
|
Лёгкий манифест каталога загружается сразу.
|
|
|
|
## Tasks
|
|
- [ ] Вынести лёгкие метаданные каталога (id/cat/title/desc/preview) в отдельный `sims.manifest.js`, грузимый сразу.
|
|
- [ ] Тяжёлый код симуляции (Sim-класс + open/mount) грузить динамически при openSim (инъекция script или import()).
|
|
- [ ] Объявить зависимости движков в манифесте (`deps: ['_fx_core','_phys_visuals',...]`); загрузчик резолвит и грузит до кода симуляции, кешируя загруженное.
|
|
- [ ] three.js грузить только для 3D-симуляций (stereo).
|
|
- [ ] Лоадер с дедупликацией (один и тот же файл не грузится дважды).
|
|
|
|
## Files to Modify/Create
|
|
- `frontend/js/labs/_loader.js` — новый: динамический загрузчик + резолв зависимостей.
|
|
- `frontend/js/labs/sims.manifest.js` — новый: лёгкий каталог.
|
|
- `frontend/lab.html` — убрать массовые `<script>`, оставить ядро (api, registry, loader, manifest).
|
|
|
|
## Acceptance Criteria
|
|
- Первый рендер каталога без загрузки кода симуляций.
|
|
- Открытие симуляции догружает её код+движки и работает.
|
|
- three.js грузится только для 3D.
|
|
- Заметное падение объёма стартовой загрузки lab.html.
|
|
|
|
## Notes
|
|
- Учесть defer-скрипты (solutions/organic/periodic/qualanalysis).
|
|
- Кеш загруженных модулей в Map.
|
|
|
|
## Review Checklist
|
|
- [ ] Нет двойной загрузки
|
|
- [ ] Зависимости движков соблюдены
|
|
- [ ] Старт лаборатории легче
|
|
|
|
## Handoff to Next Phase
|
|
- РЕАЛИЗОВАНО: каркас (~530KB) грузится eager; код симуляций (~2.5MB) + three.js (~600KB) — лениво по клику. Старт /lab легче в ~6 раз.
|
|
- Файлы: `_loader.js` (LabLoader.ensure + кеш + self-heal), `_sim_deps.js` (СГЕНЕРИРОВАННЫЙ манифест SIM_DEPS + LAB_LAZY_FILES), правки `_register-all.js` (open→ensure.then), `lab-init.js` (openSim обрабатывает Promise), `lab.html` (eager сокращён до 12 labs-скриптов + framework).
|
|
- EAGER framework: _registry,_loader,_sim_deps,_fx_*,_graph_panel,_phys_visuals,_chem_visuals,_util,graph.js,lab-init,lab-glue,_register-all. graph.js eager (даёт GRID для 15 сим). _periodic_data — ЛЕНИВЫЙ (dep periodic).
|
|
- three.js — лениво, только для crystal/orbitals/stereo/periodic (THREE_SIMS).
|
|
- SELF-HEAL: если после загрузки манифестных файлов window[openName] не функция → грузятся ВСЕ ленивые файлы. Поэтому ошибка манифеста не ломает симуляцию (худший случай = поведение до Ф3).
|
|
- РЕГЕНЕРАЦИЯ МАНИФЕСТА: скрипт-генератор был временным (в %TEMP%), НЕ в репо. При добавлении/переименовании симуляции: либо вручную дописать SIM_DEPS в _sim_deps.js, либо восстановить генератор (логика в CONTEXT). СТОИТ положить генератор в tools/ при Фазе 4/5.
|
|
- БРАУЗЕР-ПРОВЕРКА (обязательна): открыть /lab → Network: на старте НЕ должно быть 45 sim-js и three.js; кликнуть pendulum (грузит pendulum.js), molphys (gas+states+brownian+diffusion), stereo (three.js+stereo.js), periodic (_periodic_data+periodic+three), chemistry (5 файлов), geometry, opticsbench; проверить deep-link stereo:cube, opticsbench:mirror, alias #magnetic.
|
|
- РИСК для Ф4/5: lab.html сильно изменён; параллельные сессии правят его — fetch+проверка перед работой.
|