1fd7fcc3c8
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.6 KiB
4.6 KiB
Phase 3: Ленивая загрузка кода симуляций
Status: ✅ Done (70762be) — vm-harness + owner-in-files инвариант пройдены; нужна браузер-проверка Parent plan: 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+проверка перед работой.