摘要:爲了追蹤我們的進展,針對兩個主要的客戶端性能數值:客戶端完全啓動時長(即啓動所需時間)以及英雄選擇鎖定時間,我們會與大家分享一些具體的目標。原因在於,在解決完全啓動和英雄選擇鎖定時間的過程中,我們會對客戶端架構的某些基礎層面進行清理和重做。

嘿,召喚師們

今天,在接下來六個月的時間裏,我們會爲《英雄聯盟》客戶端後端的基礎架構

推出一系列新的改動與改進舉措。

爲了追蹤我們的進展,針對兩個主要的客戶端性能數值:客戶端完全啓動時長(即啓動所需時間)以及英雄選擇鎖定時間,我們會與大家分享一些具體的目標。

在過去的一段時間裏,客戶端曾出現過一些BUG、崩潰以及延遲方面的問題,我們在2019年經過了很長時間的監測分析與調整,雖然經過了一些改善,但我們認爲依然還不夠,我們想試試其他辦法來讓客戶端整體的體驗變的更好。簡而言之,我們希望能讓客戶端有一些更明顯的體驗優化。

相比於介紹後續的相關計劃,我們更想與大家分享的是接下來這六個月打算推出改動的具體性能目標以及明確的細節信息。

客戶端數據

我們希望實現的是,即使是那些電腦速度較慢的玩家,完全啓動所需的時間也不超過15秒,目前來看,有些玩家完全啓動所需要的時間可能是這個數字的三倍甚至是四倍。

我們檢測的一個比較重要的問題是“英雄選擇鎖定”時間。即在你點擊按鈕之後客戶端記錄你鎖定該英雄需要的時間。在下方的圖表當中,大家可以看到9.22版本(橙色)以及10.2版本中(藍色)英雄鎖定的平均響應時間。

上面的圖表顯示出不同的玩家之間英雄選擇響應時間差異。當然,客戶端的性能因你電腦的速度會有所不同。舉例來說,如果你的鎖定時間低於0.2秒,那你的電腦就可以排進前10%了,說明你的響應時間比90%的玩家都短。同樣,如果你的響應時間超過了0.8秒,那你就是靠後的那10%了,就是說你客戶端運行的速度要比90%的玩家慢。

大家可以看到,相比於9.22版本,10.2版本中玩家的鎖定時間有了大幅改善。這次改善最大的原因在於,我們在9.23版本中更新了客戶端運行所使用的Chromium引擎版本。這爲我們帶來了很大的幫助,但我們認爲依然可以再實現一些提升。

爲了讓大家更容易理解,我們來看一組更詳細的數據,就是特定羣體玩家英雄鎖定響應時間隨日期的變化。

如大家所見,藍色線代表第50百分位,也就是“中位”玩家的水平,圖表上中位玩家鎖定響應時間大幅降低確實很好,但目前來說,中位玩家英雄選擇相應時間在0.3秒所有浮動,壓力較大的服務器可能會更高一點,這雖然算不上可怕,但依然會有延遲感。

第70百分位的玩家(綠色線)體驗近期也有大幅的改善,但是他們的英雄選擇響應時間在0.45秒左右浮動。老實說就算是對於電腦配置一般的玩家,這也比我們期望的反應效率要慢一些。

最後, 看看第90百分位(橙色線)真的就非常明顯了。毫無疑問,這些玩家的響應速度應該慢於大多數的玩家。0.8秒的數字相對來說會比較誇張,而這還是Chromium 引擎更新之後的情況呢。

如果說服務器壓力很大(特別是同時併發時期)或者電腦性能較弱,響應的時間可能比上述數據還要高,這樣的體驗並不算好。

那麼,就說說接下來我們打算怎麼辦吧!

我們接下來的重點

對於客戶端的性能優化,我們會將兩個具體的長期目標列爲重中之重:

1)我們希望將完全啓動時間降低到15秒以內,對於第90百分位的玩家們也是如此。這比之前啓動較慢的機器來說,大概提升3~4倍的速度;

2)我們希望第90百分位的玩家英雄鎖定響應時間能夠降低到0.1秒左右,對於這部分玩家來說,相應效率提升8倍,實際體驗上,即點擊後基本感知不到延遲時間。

我們知道大家在想什麼,因爲遇到的問題不止這些,還需要去解決一些比如減少BUG、崩潰與內存泄漏等等的問題,並需要提升發現問題的處理效率。

我們爲什麼要優先這兩方面呢?原因在於,在解決完全啓動和英雄選擇鎖定時間的過程中,我們會對客戶端架構的某些基礎層面進行清理和重做。我們認爲在解決這些關鍵目標的過程中,可以伺機處理這些BUG、內存泄漏以及崩潰等問題。

像是英雄選擇中的“黑屏”BUG以及符文頁沒有正確保存等問題只是我們打算在此過程中一併解決的部分例子。但是我們想非常坦率地告訴大家,這是需要時間的。我們相信,這大約六個月的計劃會幫助我們向這些目標取得長足的進展。但要實現我們的長期追求很可能要更多的時間。

這是我們的目標,但我們無法百分百保證在這個期間內一定能完全達成,我們現在把這些目標告訴大家是因爲我們知道,我們會努力持續改善大家的體驗,會更坦誠的去面對問題和交流問題。

那麼大家可能還想問,我們到底會怎麼做呢?

我們會怎麼做

我們已經找到了導致啓動速度變慢的兩大架構問題(這真是一個漫長而又曲折的過程)。首先是我們的插件式架構,它讓我們可以將客戶端的代碼分割成一些有用的大模塊。但由於我們爲客戶端加入了很多的新功能,這個架構變得越發臃腫。其次,我們並沒有非常有效合理的利用驅動我們用戶界面的Javascript框架(稱之爲Ember)。

目前,客戶端使用了太多的插件和Ember程序。實際上,在客戶端完整啓動的過程當中,會加載41項單獨的插件以及16項程序。它們每項啓動都需要0.1到0.8秒不等的時間,加起來可能就是一個不小的數字。

我們的計劃是將這些插件和程序整合並大幅精簡爲少數幾個(理論上效率也更高的)插件和程序。我們會先把重點放在啓動過程中啓用的那些,因爲我們相信這將會爲客戶端的性能提升帶來最大的收益。

第一階段:完全啓動

如今,有些玩家的完全啓動時間較長的電腦整個啓動過程可能會達到40秒的時間,如果你是這其中一員的話,會知道這種體驗是多麼的漫長難捱,假如非常不幸的再遇到崩潰問題,就更痛苦了。

客戶端中有大量的內容,比如通知、好友列表以及收藏標籤等都會受到啓動時啓用的那些插件及程序的影響。所以儘管我們說過長期的追求是將第90百分位玩家的完全啓動時間降低到15秒,但我們認爲在此過程中還要解決大量的BUG以及影響着整個客戶端的低效內容。

主攻啓動問題幾個月之後,我們會評估一下距離目標還有多遠,然後——可能是春天快結束的時候——我們會轉向下一個重心專門處理英雄選擇問題。

第二階段:英雄選擇

英雄選擇引入了更多額外的插件和Ember程序。簡單地說,你在英雄選擇時所做的每件事幾乎都會創建新的程序。交換英雄會生成兩個。更換召喚師技能也是如此。

在單次的體驗內,你玩《英雄聯盟》的時間越久,就有越多這樣的程序互相堆積在一起,體驗可能會更卡,並且,你在選擇英雄時的大多數大多數行動都要依賴與服務器的通訊,這可能會讓交互的延遲進一步增加。

英雄選擇中真正的根源問題是我們後端系統管理數據的方式,目前我們採用的英雄選擇架構可以讓我們通過系統傳輸大量有效的數據。例如,如果拳頭決定在排位賽中禁用一個英雄,那幾乎所有玩家的這個英雄都會立即被禁用,只要這次禁用被推送上線,就連正在英雄選擇過程中的玩家也會無法繼續選用此英雄。

這是一套極爲強大的系統,但要讓它運作起來需要非常強勁的馬力。就目前的系統設置方式而言,這個過程中有大量不必要的入口和瓶頸。所以有時候,即使一個小的輸入變化,也會有數不清的數據需要重新渲染,這會影響到大家在客戶端內的體驗。

爲了解決這個問題,我們要從根本上改變英雄選擇後端架構的工作方式。我們會將英雄選擇時所有數據從服務器到客戶端的傳送方式進行重做,這需要一些時間。

我們還有其他一些雄心勃勃的長期追求,就是讓英雄選擇變得更高效一些,比如將整個客戶端整合成爲一個單獨的Ember程序而完全不牽涉插件。但短期的話,我們希望推出足夠的改動,讓客戶端按照我們上面所說的目標效率運行。

至於這六個月的階段結束之後,我們距離“盡善盡美”有多遠還是個未知數。但是等我們臨近尾聲的時候,我們認爲我們可能已經取得了很大的進展,並對未來有了更加清晰明確的方向。

未來的方向

我們每隔數月都會通過開發者日誌與大家分享我們的進展,其中會有滿滿的性能數據乾貨以及對項目時間表的調整的相關介紹。

祝我們順利吧!感謝大家成爲《英雄聯盟》的一員,我們稍後再聊。

相關文章