← 返回博客列表技术栈

性能优化的本质:把资源堆在用户最在意的地方

这篇文章来自最近和几位做游戏开发的朋友的交流,他们分享了一些实际项目里的思考,我尝试把这些观点整理一下,以便于自己学习和思考。

业务理解才是性能优化的起点

很多人谈性能优化,上来就是 profiling 工具、火焰图、bottleneck 分析。这些都对,但在此之前有一个更根本的问题没有被回答:用户到底在意什么?

所谓业务理解,核心只有一件事:知道用户在哪些入口上使用频率最高,对哪些实体的感知最明显。

这个判断一旦确立,性能优化的资源分配策略就清晰了:

  • 用户感知强的地方:集中资源,做到极致
  • 用户感知弱的地方:降级处理,时间换空间,甚至直接做成背景素材

这不是偷懒,这是正确的工程决策。

粒子效果:AI 搞不定的典型问题

游戏性能优化里有一类问题是 AI 至今无法端到端解决的,粒子效果就是典型。

原因不复杂:粒子效果是低频的、弥散的、时间维度上的视觉信息。你很难用文本精确描述「这个地方的粒子效果感觉不够有冲击力」——因为这个判断本身是主观的、动态的、情绪化的。

AI 在图像处理上擅长高频信息——边缘、纹理、轮廓。粒子效果偏偏不是这类信息,它更接近人对「氛围」和「手感」的感知,这类感知在训练数据里极难被标注和量化。

所以粒子效果的优化,本质上依赖的是工程师的眼睛和经验,而不是工具。

这也是性能优化方向长期有壁垒的原因之一:它的核心竞争力是人类感知能力的延伸,不是信息处理问题。

大型游戏的混合存储架构

游戏客户端的存储设计是一个很好的架构思维训练场,因为它几乎囊括了所有存储场景的权衡。

本地存储与远程存储同时存在

主要用户数据必须存在服务器上,原因有两个:联机同步和防止作弊。但并非所有数据都需要走网络——高频读取的轻量配置完全可以存在本地,省掉不必要的网络请求和数据库查询。

客户端本地存储的主流方案:

  • SQLite:嵌入式关系型数据库,移动端和桌面端的标配,适合结构化的本地数据
  • DuckDB:列存储,OLAP 向,适合本地数据分析场景,近年来在 WASM 方向很活跃

为什么游戏行业大量使用 MongoDB

游戏有一个其他行业少见的特点:运营活动频繁,且每次活动几乎都会破坏现有的数据结构。

春节活动要新增灯笼积分字段,周年庆要新增限定皮肤字段,活动结束这些字段又要清理。如果用关系型数据库,每次都要 ALTER TABLE,风险极高,上线成本极大。

MongoDB 的 schema-free 特性天然适合这个场景——字段的增删不需要改表结构,直接在文档层面操作。这不是 MongoDB 设计之初的偶然,官方教程里明确提到 JSON 类型字段的设计初衷就包含游戏行业的需求。

一个典型的大型游戏存储架构

数据类型存储方案原因
用户账号/支付MySQL/PG强一致性、事务
角色属性/背包MongoDB字段灵活、嵌套结构
排行榜/计数器Redis高频读写、实时性
聊天记录Kafka+ES流式处理、全文检索
本地配置SQLite离线、低延迟
行为日志/埋点ClickHouseOLAP 分析

没有最好的数据库,只有最适合这个场景的数据库。架构能力的核心,就是知道在哪个节点用哪把刀。

AI 的复杂度天花板

AI 辅助开发已经是事实,但有一个边界需要清晰认知:当问题的复杂度超过某个阈值,AI 就无法端到端完成了。

举两个极端的例子:

  • 新思(Synopsys)的 IC 仿真器:几十年工程积累,涉及电路理论、数值计算、硬件行为建模,每一个细节都是前人趟过的坑
  • 兼容市场主流 APP 的操作系统:兼容性问题本身就是无数 corner case 的集合,没有穷举完的可能

这类问题有一个共同特点:前面没有现成的路,需要人来开路。

AI 是在已有路径的概率分布上做预测,它天然是个保守主义者。你提供一个它不熟悉的新范式,它会本能地往高概率路径拉,因为那是它的舒适区。底层开拓者的价值恰恰在这里——他们靠第一性原理推导,不是经验复用,而 AI 在这里完全失语。

所以 AI 时代真正稳固的技术方向是什么?

  • 复杂度极高、corner case 极多的底层工程
  • 依赖主观判断和审美的优化工作
  • 需要跨层系统性视角的架构设计

确定性任务的价值已经被 AI 清零。剩下有价值的,全是不确定性。而处理不确定性的能力,恰恰是最难培养的。