我盯着屏幕右下角的加载进度条,它卡在86%已经快四十秒了。队友的头像陆续亮起,右下角的小喇叭不断弹出“正在连接”的提示,而我只能听着鼠标点击声,一遍遍看着那个转圈的召唤师图标。等终于进入召唤师峡谷,小地图上已经亮起了红色警示,系统提示“游戏已开始2分11秒”,我的亚索还站在泉水里,对面中单已经升到三级。
这不是偶发情况。过去三个月,我几乎每场排位都要经历同样的折磨。起初我以为是网络波动,但后来发现无论用什么加速器,加载速度始终不变。直到我检查了任务管理器,才发现问题出在硬盘上——我的英雄联盟安装在一块用了六年的机械硬盘里,平均读取速度只有82MB/s,而游戏现在需要的资源加载量早就超出了这块硬盘的承受范围。
英雄联盟这个游戏看似体积不大,实际安装后占用空间超过22GB。每次进入对局,客户端要读取地图模型、英雄皮肤、粒子特效、音效文件,还要同步召唤师符文和天赋数据。我粗略算过,如果完全从机械硬盘读这些数据,总数据量大约1.8GB,而机械硬盘的真实顺序读取速度在100MB/s左右,但随机读取速度只有不到5MB/s。游戏加载恰恰需要大量随机访问,比如读取上百个小文件,每个只有几KB到几百KB不等。这种情况下,机械硬盘的寻道时间就变成了致命瓶颈——平均每次寻道需要14毫秒,而固态硬盘只需要0.1毫秒。我特意用SSD固态硬盘的同事做了对比,他加载同一场景只需要11秒,而我需要1分47秒。差距就是这么大。
除了硬盘,内存也不够用了。我的电脑只有8GB内存,平时开着一个浏览器、一个微信、一个音乐播放器,再加上英雄联盟客户端本身,内存占用已经达到86%。游戏加载过程中需要额外的临时空间来解压和缓存数据,内存不够时系统就会调用虚拟内存,而虚拟内存恰好在我那块机械硬盘上。结果就是,游戏一边从硬盘读数据,一边还要往硬盘写虚拟内存,两个进程争抢硬盘的读写通道,速度直接砍半。我后来关掉所有后台程序,加载时间从1分47秒降到了1分21秒,虽然还是慢,但至少差距缩小了。
网络也是一个因素。虽然加载进度条看起来是在读本地文件,但客户端需要与服务器通信验证版本、获取对局信息。我使用的是家庭宽带,上行带宽只有30Mbps,而游戏对局开始时需要向服务器发送完整的召唤师信息、符文页和天赋配置。如果网络延迟超过100ms,或者丢包率高于2%,客户端就会等待服务器响应,导致进度条卡在某个百分比不动。我通过命令提示符ping了一下服务器,显示平均延迟47ms,丢包率0%,网络本身问题不大。但有些玩家用的WiFi信号不稳定,尤其是隔着两道墙,加载时间就会明显增加。

游戏客户端自身的优化也值得注意。英雄联盟的加载器在一段时间内会超时重试连接,如果网络波动导致握手失败,它不会放弃而会反复尝试,每次超时可能消耗5到10秒。另外,我的启动项里还加载了一些第三方插件,比如语音助手和战绩查询工具,这些工具在游戏启动时会扫描安装目录,生成临时缓存,也会占用硬盘读写资源。我把这些插件全部禁用后,加载时间又缩短了大约10秒。
还有服务器端的因素。高峰时段比如晚上七点到十一点,服务器要同时处理大量对局的初始化请求。这时候即使我的本地配置没问题,进入游戏的时间也会延长。我注意到周末晚上加载速度明显比工作日上午慢,同一台电脑,上午大约40秒加载完毕,晚上则要一分半。服务器端要对每局比赛分配独立的进程,初始化峡谷地图的野怪和兵线数据,这些都在玩家加载时进行同步。如果服务器繁忙,它会通知客户端“正在等待其他玩家”,我的界面就卡在“连接完成,等待服务器响应”这个状态。
最让我无奈的是,游戏加载完成后还会有一小段“英雄联盟”标志动画,这个动画本身也属于文件加载。如果客户端在动画期间还要后期加载地图细节,就会造成假进度条——显示已经100%,实际上还在渲染。我遇到的就是这种,进度条到100%后还要黑屏转圈五秒,然后才进入选英雄后的游戏画面。
解决这个问题,最直接的办法是换一块固态硬盘。我同事用SATA接口的固态,加载只要15秒;如果换成NVMe固态,最快可能8秒。内存至少加到16GB,这样可以避免虚拟内存占用。网络方面,建议用有线连接,不要用WiFi,然后关闭所有后台更新和云同步。客户端修复工具也值得跑一次,我之前用“点击客户端右上角设置-修复”功能,删除了损坏的缓存文件,大概缩短了5%的加载时间。
现在我开始学乖了,每次排位前半小时重启电脑,只开游戏客户端,把QQ、微信、浏览器全部关掉,甚至把输入法切换到默认的英文模式。这样虽然不能完全消除掉队的风险,但至少能把加载时间从两分钟压到一分十秒左右。如果再遇到加载完已经开战的情况,我就只能认命——毕竟我这块七年前的B85主板,不支持M.2接口,要彻底解决就得换电脑。但至少现在我知道了,问题不在我的技术水平,而在那块每转一圈都要喘息的老硬盘。