跳到正文
全部文章

浏览器即时战略:如今一个标签页里究竟能跑什么

·作者:Rene Wang·阅读约 5 分钟

即时战略曾经是浏览器做不了的品类。本文讲清楚什么变了、什么依然困难,以及一款不需要安装的 RTS 因此得到了什么。

在过去二十年里,「浏览器策略游戏」基本等于「靠刷新页面来玩的游戏」:排一个建筑,关掉标签页,四小时后回来看它造好了没有。而即时战略里真正「即时」的那部分——几百个单位同时移动、绕开峭壁寻路、每秒交火三十次——一直属于需要安装的软件,大家也都默认如此。

现在已经不是这样了,而且这个转变发生得很安静,安静到大多数人都没注意。《钢铁浪潮》是一款完整的 RTS:基地建设、单一资源、海陆空三军、最多六个阵营、独立的多人服务器。它跑在一个标签页里。不用下载,没有启动器,也不需要账号。

这篇文章讲的是:这件事为什么成立,以及它至今仍要付出什么代价。

「跑在标签页里」到底意味着多少工作

RTS 是一种带硬性截止时间的模拟。《钢铁浪潮》以固定的 30 Hz 推进世界:每 33 毫秒,所有单位移动一次、所有武器冷却走一格、所有路径推进一步、所有在建建筑消耗一点金属。错过这个截止时间,游戏不会掉一帧,而是整体变慢——玩家会立刻察觉,因为他的坦克迟到了。

渲染是同一份预算里的另一个问题。地图是瓦片网格,镜头可以无级缩放,屏幕上同时有两三百个精灵,外加血条、炮口火光、飞行中的炮弹,以及盖在最上层的战争迷雾。

这两件事都不算「小活」。2026 年真正有意思的地方在于:浏览器把两件事都干了,而且没怎么抱怨。

什么变了

JavaScript 不再是瓶颈。 现代引擎会把数值密集的热点循环即时编译成接近原生的代码,而一个基于类型化数组和扁平对象写成的模拟,能吃到其中大部分收益。《钢铁浪潮》的模拟层没有任何运行时依赖——没有引擎、没有物理库、没有 ECS 框架——这意味着在性能分析器和真正慢的那段代码之间没有任何东西挡着。

Canvas 2D 结果证明够快,前提是你别让它把同一件事做两遍。地形是任何瓦片渲染器里最贵的部分,所以它按区块画一次并缓存下来,以 1:1 合成到缓冲区,再为镜头统一缩放一次。精灵在启动时按 24 个旋转步进烘焙进图集,于是坦克转向只是换一个源矩形,而不是一次带旋转的绘制调用。

多人对战转向了权威服务器。 经典的 RTS 网络模型是同步锁步:每个客户端跑同一份模拟,只交换输入。它对带宽极其友好,代价是要求每台机器算出逐位相同的浮点结果——而浏览器在不同厂商、不同版本之间并不作这种保证。所以诚实的做法是让服务器拥有世界:服务器跑同一套 30 Hz 模拟,每个客户端收到的是经过战争迷雾过滤、只包含自己阵营真正看得见的内容的快照。带宽贵了一些,而「不同步」不再是一类缺陷报告。

安装变成了可选项,而不是不存在。 Service Worker 预缓存外壳,让游戏离线也能打开,并在首次需要时惰性缓存那几十兆的精灵与音乐。把它添加到手机主屏,它会全屏启动,看不到任何浏览器界面。你想要 App 时它是 App,不想要时它只是一个链接。

什么依然困难

后台标签页会被限流。 隐藏的标签页里,动画回调会被压到极慢甚至停止,于是一个假设时间连续的游戏循环,恢复时会一口气补算这段空白,把所有东西瞬移出去。解法并不优雅:页面隐藏时暂停,回到前台时重置时钟。

内存和下载体积是实打实的约束。 四十兆的精灵表,对 Steam 下载来说不算什么,对第一次访问来说却很多——这正是《钢铁浪潮》默认用代码生成美术、而把 PNG 图集作为可选增强的原因。一个必须等 200 MB 到位才能开始的网页游戏,等于没人玩的网页游戏。

模拟开销随地图规模增长,而不只随部队规模增长。 四个阵营各两百个单位同时行军时,中号随机地图约每秒 128 个 tick,大号约 86,两张最大的手工地图约 31——也就是说,刚好卡在模拟所需的 30 Hz 上,一点余量都没有。大地图是一个附带性能账单的设计决定,而寻路占了这笔账的大头。

一套游戏,两种输入模型。 鼠标有右键、有悬停、有 Shift。手指一样都没有,而且会挡住自己正在触摸的东西。这本身就是一个完整的设计问题,我们另写了一篇

换来了什么

好处不只是「不用安装」,而是这款游戏本身就是一个网址。

一条对局链接就能打开游戏。一个百科页面可以直接读取游戏自己的定义文件,因此永远不会和游戏说法不一致。打补丁就是一次部署——没有版本协商,没有启动器,也不会有人落后三个版本还在玩。同一份产物同时服务桌面、手机和平板,而独立服务器可以从同一个源站分发它所服务的客户端。

对于一个受众真正遍布全球、且常常使用普通硬件的品类来说,能够说出「点这里,四秒后你就在玩了」,本身就值很多工程投入。

具体到《钢铁浪潮》

海陆空三条线上共 26 种单位与 24 种建筑,相互克制的兵种体系是一张诚实的表格,而不是一堆特例。可以对最多五个 AI 打遭遇战,有十张精选地图和一个随机地图生成器,多人对战跑在一行命令即可安装的独立服务器上。它能装到手机上,能离线打 AI,而且完全免费。

如果你从没玩过 RTS,或者这十年都没碰过,从这里开始

rtsbrowserengineering