localStorage仅适合存储Three.js的轻量JSON配置参数,如模型路径、相机位置等,不可存几何体或纹理等二进制资源;需结构化键名、版本校验、UI清理开关,并协同预加载实现秒级复现体验。

localStorage 本身不能直接存储 Three.js 的几何体、纹理或材质等二进制资源,但它非常适合持久化「配置参数」——比如模型路径、光照强度、相机位置、环境色、缩放系数、是否启用阴影等结构化设置。只要参数复现快、加载逻辑清晰,就能实现“秒级复现”体验。
只存轻量 JSON 配置,不存资源本身
localStorage 容量有限(通常 5–10MB),且只能存字符串。正确做法是把资产配置抽象为纯 JS 对象,再用 JSON.stringify() 存入:
- 保存时:提取关键可序列化字段,如
{ modelUrl: "scene.glb", camera: { pos: [0,5,-10], target: [0,0,0] }, light: { intensity: 1.2, color: "#ffffff" } } - 读取后:用
JSON.parse()还原,立即用于初始化场景或更新控制器 - 避免存
THREE.Mesh、THREE.Texture等实例——它们无法被 JSON 序列化,强行调用会丢数据或报错
配合预加载与懒加载策略提升感知速度
“秒级复现”不等于所有资源都从本地磁盘读取,而是让用户感觉“一打开就回到上次状态”。关键在协同设计:
- 启动时先同步读取 localStorage 配置,立刻设置相机、光照、背景色等无需等待的参数
- 模型、HDR 环境贴图等大资源走常规网络加载(可配合
Cache-Control或 Service Worker 缓存) - 用配置中的
modelUrl触发 GLTFLoader 加载,加载完成后再 apply 材质/缩放等依赖模型的设置 - 用户看到的是:界面秒出 + 相机视角已就位 + 环境光已生效 → 模型网格渐进出现,体验流畅
使用键名空间 + 版本号避免配置错乱
大型项目常有多个场景或配置类型,直接用固定 key(如 "sceneConfig")易冲突。建议结构化命名:
- 键名示例:
"three-scene-v2-config-mainHall",含框架名、版本、场景标识 - 写入前检查版本兼容性:读取后先校验
config.version === CURRENT_VERSION,不匹配则降级默认值或忽略 - 敏感配置(如调试开关、性能选项)可单独存为
"three-debug-flags",解耦管理
安全清理与用户可控开关
localStorage 是持久的,但不是永远有效的。需提供明确控制点:
- 在 UI 中加入「恢复默认设置」「清除本地配置」按钮,点击后调用
localStorage.removeItem(key) - 监听
storage事件,跨标签页同步配置变更(例如用户在另一个窗口调整了光照,当前页自动响应) - 首次加载无配置时,不报错,而是 fallback 到内置默认对象,保证场景始终可运行
不复杂但容易忽略:真正影响“秒级”体验的,从来不是 localStorage 读写速度(微秒级),而是你如何把配置还原动作拆解到渲染流程的最早环节,并和资源加载节奏对齐。











