嗨,召唤师们
几个月之前,我们公布了《英雄联盟》客户端的改进计划。今天,分享一些我们所取得的积极进展和遇到的问题,以及我们接下来将要采取的措施。
【新的进展】
我们曾在第一篇客户端文章中提到,第一步的重点将启动时间降低到15秒左右。 为了实现我们的目标,我们合并减少客户端中插件以及Ember应用的数量。
截止至目前,我们在这方面的工作有了新的进展。从下方的图表中你可以看到客户端中的插件和Ember应用总数随时间的变化。每个版本我们都会将它的数量减少一些,相比我们刚开始的时候,现在客户端在引导过程中需要加载的Ember应用和插件数量分别减少了10%和20%。
不过我们也遇到了一些问题,接下来就和大家说一说。
【新的问题】
在前几个版本中,插件的减少使启动时间有了显著的改善。不过在10.3版本期间,我们发现启动时间开始向错误的方向缓慢变化,而10.7版本的整体启动时间呈现出较慢的水平。
大家可以看看下方的图表,为了帮大家更好地理解这张图表,请谨记我们希望看到的是曲线更加贴近图表的左侧(较短的引导时间)。
针对这个问题,可能是因为近几周《英雄联盟》服务器压力的骤增,这对我们服务器来说是一种考验,因此会出现响应时间不够稳定以及客户端启动时间增加的情况。
随着我们提升服务器的容量来应对玩家的大量涌入,我们可能会再次开始看到客户端表现的积极进展。我们还对其他可能的原因进行处理,比如减少引导阶段加载的Javascript 代码数量。
无论导致这次问题的原因是什么,我们都有理由充满希望:像我们在第一篇开发文章中说过的,在解决启动时间和英雄选择锁定时间(这是我们的下一步计划)的过程中,我们同时也在对客户端架构的基础层面进行清理和重做。也就是说我们还在对客户端中的bug进行修复并且深入挖掘一些令大家头疼的基础架构问题。
我们发现一个架构问题与客户端中一个叫做“Affinity”的功能有关。
Affinity的问题
Affinity是我们几年前进行“客户端更新”时推出的一项功能。基本来说它就是一个指定启动程序完成前需要加载哪些插件的工具。
我们发现两个问题与Affinity有关:
1)Affinity出了故障。在2018的某一时间,Affinity被无意中弄坏了。由于Affinity无法正常工作,那么客户端就会默认在引导程序及游戏结束后将每个插件都加载一遍。
2)就算修复,Affinity也解决不了我们的问题。我们认为即便是Affinity按照设计目的正常运作的时候,它也并没有有效地区分插件载入的优先级。简单来说,客户端在引导程序中一直存在加载过多插件的问题。
一句话总结:我们需要用一个更好更有效的方案彻底替代Affinity。
这些发现让我们感到意外,但也证实了我们在对客户端制作之初便深信的一件事:只要花时间对客户端内部进行深入研究,我们就能找出问题的根本原因。
【未来计划】
现在我们已经知道Affinity 并没有在做自己该做的事情,那我们可以添加一个能够正确优先插件加载的方案。这样的话,能让我们减少启动的时间并且放开手脚为客户端做一些其它有用的工作。
这些并不会使我们修复客户端的计划有什么根本性的改变,但有可能会稍微延缓我们的脚步。无论如何,我们都认为这次发现是个好事,因为它为我们指明了更加清晰的方向。如果最终大家能够因此获得问题更加平顺更为稳定的游戏体验,那我们的努力就没有白费。
当我们将客户端引导时间降低到我们满意的范围之内时,我们就会开启“客户端清理项目”的第二阶段:降低英雄选择时客户端的响应时间。对很多玩家来说,英雄选择的工作显然是此项目中最有吸引力的部分,而我们也有些迫不及待了。
我们会继续为大家分享我们的最新进展。接下来的几个月中还会有类似的文章,感谢大家来到《英雄联盟》。
领取专属 10元无门槛券
私享最新 技术干货