AI 在全站布局里直接引入 three,地球是做出来了,可每个页面都多下载约 180 KB;报告只写「已完成 3D 效果」,你看不出用了哪些对象、出问题该从哪查。
网页 3D · 底座与选型
three.jsthree.js
three.js 把 WebGL 的三角形和着色器包装成场景、相机、网格、灯光、控制器这些有名字的积木;你用这些名字指挥 AI、看懂报告,并要求它只在需要 3D 的页面加载。
从空场景开始,一块块搭出 3D 地球
下面的 3D 画面是真的在用 three.js 渲染,现在什么都没有。按任务清单的顺序加积木:每加一块,画面会变、AI 报告多一行,下面的读数是 WebGL 这一帧实际收到的工作量。试着移除相机或灯光,看画面会怎样。
第 0 步 · 依赖正在按需加载 three…three 是一个 npm 依赖:本站构建实测核心包约 734 KB,压缩传输约 184 KB。只有打开这种 3D 页面时才下载,知识列表和首页不加载它。
加上「拖拽控制器」后才能转
renderer.info- 三角形 / 帧
- —
- 绘制次数 draw call
- —
- 显存里的几何体
- —
Scene场景:装下面所有东西WebGLRenderer渲染器:把相机看到的画到 canvas 上- 还没有加任何积木:报告里只有场景和渲染器两个空架子。
正在按需加载 three.js:这一步只发生在需要 3D 的页面。
知识点:积木名是你和 AI 的共同语言
刚才每一次画面变化,都对应下面一件事。
- three.js 是建在 WebGL 上的库:WebGL 只认三角形和着色器,three.js 让你用「场景、相机、网格、灯光」这样有名字的东西描述画面。
- 积木各管一件事:场景装东西,相机决定从哪看,网格 = 几何体(形状)+ 材质(表面),灯光让标准材质能反光,控制器让用户转动视角。少了相机或灯光,画面就是黑的。
- 三角形数和绘制次数是 three.js 替你算出来的:一个物体至少一次绘制,复用几何体能省显存,但每多一个物体,三角形和绘制次数照样增加。
- three 是一个依赖,有实打实的体积:它应该只在需要 3D 的页面按需加载,不能拖慢整站首屏。
什么时候用、怎么验收
当你想要网页里有能转、能点、能动的 3D 时,three.js 是最常见的默认选择。
- 信号:要做 3D 产品展示、3D 地球 / 地图、可交互的 3D 背景,或者 AI 报告里出现 Scene、Mesh、WebGLRenderer。
- 项目是 React / Next 且 3D 交互多:考虑让 AI 用 React Three Fiber(底下仍是 three.js);只是一段视频或一张图能讲清的效果,先别上 3D。
- 验收一:让 AI 在报告里列出用到的 three.js 对象(相机、网格、灯光、控制器),你能对着画面一一认出来。
- 验收二:打开一个不含 3D 的页面(比如首页),在开发者工具的 Network 里确认没有下载 three;3D 页面则要报告增加了多少 KB。
- 验收三:离开 3D 页面再回来几次,页面不越来越卡,说明 AI 写了释放(dispose)。
正反例:同一个「首页 3D 地球」
需求只差一句话,用户下载的东西差了一个库。
其他页面体积不变;报告写清 PerspectiveCamera、Mesh、DirectionalLight、OrbitControls,地球发黑时你一眼知道该问「灯加了吗」。
快速自测
AI 说「3D 地球已完成」,可你打开页面只看到一团黑色的球形影子,背景星空却正常。最先该问 AI 哪一块积木?
继续查证
术语的技术定义和行为以这些一手或权威资料为准。
下一步学
和本知识点经常一起出现的概念。
用到这个知识点的案例
看看真实的项目蓝图里,three.js是怎么被用上的。