如果我告诉你,未来的 Web 界面不再是平面的像素块,而是在 GPU 中自由呼吸的三维生命体,你会相信吗? 不久前,我做了一个在前端看来近乎"疯狂"的决定—— 用 @react-three/uikit 从零构建一个完整的企业级保险管理系统。 不是 demo,不是玩具,而是包含: 1800+ 行业务代码,零 DOM 节点。 当我第一次在浏览器中看到它流畅运行时,我意识到:我们可能正站在前端开发历史的转折点上。 这段代码看起来像 React——因为它就是 React。 但打开浏览器开发者工具,你会发现整个应用只有一个 所有的按钮、文字、输入框、动画……都活在 GPU 的并行宇宙里。 让我们面对一个残酷的事实: DOM(文档对象模型)是 1998 年的遗产。 它被设计来渲染学术论文和超链接文档。当我们试图用它构建现代应用时,我们是在用写诗的工具写交响乐——可以做到,但处处别扭。 想想我们每天在做的事情: 我们花了 20 年时间在 DOM 的各种限制上打补丁: 每一个"创新"都是在治标不治本。 @react-three/uikit 的答案是:直接绕过 DOM。 传统 Web 应用的渲染管线: 每一步都可能成为瓶颈。一个复杂列表卡顿?你需要虚拟滚动。动画不流畅?你需要 GPU 加速的 CSS。 uikit 的渲染管线: 没有中间商赚差价。 一个 1000 行的列表?GPU 不在乎,它每秒能处理数百万个三角形。 复杂的弹窗动画?不需要 在传统开发中,样式是一个独立的维度: 在 uikit 中,样式就是属性: 没有类名,没有选择器优先级,没有 CSS 特异性战争。 所见即所得,所写即所现。 传统 Web: uikit: 想做一个有深度的卡片层叠效果? 不需要任何 CSS hack,不需要担心 因为你本来就在 3D 空间里。 传统 UI 框架的心智模型: 这导致了经典的 React 陷阱: uikit 继承了 React 的声明式优点,但渲染层更直接: 每一帧,Three.js 场景都是从头构建的。这听起来低效? 不,这正是 GPU 擅长的事情。 GPU 被设计来每秒从头渲染 60+ 帧的复杂 3D 场景。对它来说,一个管理后台的 UI 轻如鸿毛。 同一套代码可以运行在: 这不是"响应式设计"——这是"维度无关设计"。 很多人误解了 React。 React 的核心不是 Virtual DOM。 Virtual DOM 只是一个实现细节,一个在 2013 年解决"如何高效更新 DOM"问题的工程决策。 React 的真正革命是: 这些在 uikit 中完全保留。 useState、useEffect、useContext、自定义 Hook——一切照常工作。 被取代的只是最底层的渲染引擎: Solid.js 的卖点是"没有 Virtual DOM",用细粒度响应式直接更新 DOM。 但它仍然受限于 DOM。 uikit 走得更远:不仅没有 Virtual DOM,连 DOM 本身都没有。 闭上眼睛,想象 2030 年的 Web 开发: 你戴着 AR 眼镜工作。邮件、日历、待办事项……不再困在 2D 矩形里,而是漂浮在你周围的 3D 空间中。 这些应用用什么技术构建? 用传统 DOM 写出来再"移植"到 AR?还是从一开始就用空间原生的 UI 框架? Duolingo 证明了游戏化 UI 的力量。但用 DOM + CSS 做游戏化 UI 太痛苦了。 想象一下,如果每个应用都可以轻松拥有: 当 UI 框架原生支持 3D,游戏化就不再是奢侈品。 设计师用 Figma,开发者用 VSCode。两个世界,永远的翻译损耗。 但如果 UI 本身就是 3D 场景呢? 设计师可以在 Blender/Spline 中直接设计包含交互的界面,开发者只需要接入数据。 不是"设计稿还原",而是"设计即开发"。 我不想把这篇文章写成无脑吹捧。uikit 今天仍有真实的限制: 2013 年的某一天,Facebook 的工程师在 JSConf 上展示了一个叫做 React 的库。 台下一片质疑: "把 HTML 写在 JavaScript 里?疯了吧。" "Virtual DOM?不就是多了一层抽象吗?" "我们的 jQuery 用得好好的。" 十年后,React 改变了前端开发的一切。 2024-2026 年,一群来自 pmndrs 社区的开发者正在做类似的事情。 他们在问: 如果 UI 从第一天起就为 GPU 设计,会是什么样子? 也许十年后回看,答案会让我们惊讶。🚀 告别 DOM!前端开发将迎来一场静默革命
序章:一个疯狂的实验
项目截图




// 这不是科幻小说,这是今天就能运行的代码
<Canvas camera={{ position: [0, 0, 22], fov: 32 }} dpr={2}>
<ambientLight intensity={0.75} />
<directionalLight position={[8, 10, 11]} />
<Fullscreen padding={18} backgroundColor="#eef3ff">
<Container borderRadius={18} backgroundColor="#ffffff">
<Text fontSize={24} fontWeight="bold" color="#14284a">
Insurance Policy Workbench
</Text>
</Container>
</Fullscreen>
</Canvas><canvas> 元素。
第一章:DOM 的黄昏
一个 30 年的技术债务
/* 为了让一个弹窗居中,我们需要这些咒语 */
.modal {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 9999; /* 祈祷没有更高的层级 */
}// 为了一个流畅的动画,我们需要担心
requestAnimationFrame(() => {
// 希望浏览器不要卡顿
// 希望重排不要太多
// 希望用户的设备够快
})
第二章:GPU 原生 UI 的五大革命性优势
🎮 优势一:性能天花板直接消失
React → Virtual DOM diff → DOM 更新 → 样式计算 → 布局 → 绘制 → 合成React → Three.js 场景图 → GPU 着色器 → 显示will-change: transform 这种祈祷式优化,因为一切本来就在 GPU 上。🎨 优势二:样式即属性,告别 CSS 心智负担
// 组件
<button className="btn btn-primary btn-lg">Click me</button>
// 样式(在另一个文件、另一个心智模型中)
.btn { /* ... */ }
.btn-primary { /* ... */ }
.btn-lg { /* ... */ }
.btn:hover { /* ... */ }
.btn:active { /* ... */ }
.btn:focus { /* ... */ }
.btn:disabled { /* ... */ }<Container
borderRadius={999}
borderWidth={1}
borderColor={selected ? "#0f766e" : "#c9d9ef"}
backgroundColor={selected ? "#dcf4f2" : "#f6f9ff"}
paddingX={10}
paddingY={7}
hover={{ backgroundColor: "#eaf1ff" }}
cursor="pointer"
>
<Text fontSize={12} color={selected ? "#0f766e" : "#14284a"}>
{option}
</Text>
</Container>hover 是一等公民,不是需要额外声明的伪类。🌌 优势三:3D 是基础能力,不是高级特性
2D 布局 → 默认
3D 效果 → "高级特性",需要 transform-style: preserve-3d、perspective 等
VR/AR → 需要完全不同的技术栈3D 空间 → 默认
2D 界面 → 只是 3D 的一个特例(z=0)
VR/AR → 同一套代码,换个渲染目标<Container positionType="absolute" positionTop={0} positionLeft={0} translateZ={10}>
{/* 浮在上面的卡片 */}
</Container>z-index 的层叠上下文陷阱。🔄 优势四:状态驱动的立即模式渲染
🌍 优势五:真正的跨平台统一
第三章:颠覆前端框架?不,是超越
React 的真正价值是什么?
// 这依然是纯正的 React
function PolicyForm({ form, updateField, submitPolicy }) {
return (
<Container>
<Field label="Holder Name">
<Input
value={form.holderName}
onValueChange={(v) => updateField('holderName', v)}
/>
</Field>
<ActionButton label="Submit" onClick={submitPolicy} />
</Container>
)
}┌─────────────────────────────────────────┐
│ React 核心(状态、调度、协调) │ ← 保留
├─────────────────────────────────────────┤
│ react-reconciler │ ← 保留
├─────────────────────────────────────────┤
│ react-dom → @react-three/fiber │ ← 替换
│ DOM 节点 → Three.js 场景图 │ ← 替换
│ CSS 渲染 → GPU 着色器 │ ← 替换
└─────────────────────────────────────────┘和 Solid.js 比呢?
否
原生
完全 GPU
第四章:想象力时间——未来的前端开发
场景一:空间计算时代的应用
场景二:游戏化的一切
场景三:设计与开发的融合
第五章:诚实的边界
需要时间解决的问题
今天就适合使用的场景
终章:历史的韵脚




