Files
Learn_System/plans/lab-content-engine/phase-3-lazy-load.md
T
2026-05-30 15:04:08 +03:00

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+проверка перед работой.