2ヶ月前、私たちは「クライアント クリーンアップキャンペーン」と題したリーグ・オブ・レジェンドのゲームクライアント改善計画を発表しました

ライアットの当チームはその際、状況がどうあれ進捗を定期的にお伝えするとお約束しました。そして現状を単刀直入にお伝えすると、満足のいくクライアントのパフォーマンスが得られるまでにはまだまだ時間がかかりそうです。

今回のブログでは、前回から進展が見られた部分についてお話します。また、その逆に後戻りしてしまった部分や、次のステップに向けてどう乗り越えていくかなどの計画についてもご説明したいと思います。

進展があった部分

初回のクライアント関連記事でも述べたとおり、私たちはまず90パーセンタイルのプレイヤーにおいて、ブートストラップタイムをおよそ15秒まで短縮する」ことを最初の目標としました。「ブートストラップタイム」というのはクライアントが起動するまでにかかる長さの指標です。

そしてこの目標を達成するために、今後クライアントに使用されているプラグインEmberアプリを整理して減らしていくというお話をしました。耳慣れない用語かもしれませんが、プラグインについては「クライアントのコードを使いやすい大きさの塊に切り分けるツール」とお考えください。もう一方のEmberアプリというのはユーザーインターフェースに使用されているツールのことです。

この部分に関しては、今のところ順調に進んでいます。プラグイン(plugins)とEmberアプリ(ember apps)の総数の経過を下の表に示しました。パッチが当たるごとに、少しづつ数を削減できています。キャンペーン開始時と比較すると、ブートストラップ時に読み込まれるEmberアプリの数は約10%、プラグインの数は20%削減されました。

chart1.png

と、ここまでは良かったのですが、同時に後戻りしてしまった部分もあったため、これについてもお話しようと思います。

後戻りした部分

プラグインの整理に取り組んだ結果、今年2回目のパッチまでは、ブートストラップタイムに明らかな改善が見られました。

しかしパッチ10.3以降、ブートストラップタイムは少しづつ悪化し始め、パッチ10.7ではとうとう過去最悪のレベルにまで達してしまいました。

これについては下の表をご覧ください。分かりやすく言うと、曲線が表の左側に寄っているほど好ましい(ブートストラップタイムが短い)状態ということになります。

chart2.png

この直近の後戻りについて考えられる理由の一つとしては、ここ数週間LoLのサーバー群への負荷が増大していたことが挙げられます。ご存知のように、現在世界中のプレイヤーの皆さんが、以前よりも長くご自宅で過ごされています。LoLがプレイされる回数が急増したことがサーバー設備への負担となり、結果として応答時間の不安定化と、クライアントのブートストラップタイムの悪化を招いてしまったのだと考えられます。

この事態への対処のためにサーバーの許容量が引き上げられれば、クライアントのパフォーマンスにも再び改善が見られるようになるでしょう。またそれと並行して、ブートストラップ時に読み込まれるJavascriptのコード量を減らすといった、他に改善できそうな部分にも取り組んでいきたいと考えています。

後戻りはあったにせよ、希望はまだ残されています。最初の/devブログでも述べたように、ブートストラップタイムとチャンピオン選択時の確定時間(これは次に着手予定)の問題を解決するため、現在私たちはクライアントのアーキテクチャの基礎となっている部分のクリーンアップとリワーク作業を行っています。

つまり皆さんを悩ませるバグや、クライアントが抱えていた構造上の欠陥の修正が進んでいるということなのです。

そして、そういった修正すべき構造上の欠陥のひとつとして挙げられるのが「アフィニティ」と呼ばれる機能です。

アフィニティの問題

アフィニティは数年前の「クライアント・アップデート」の際に導入された機能のひとつで、本来はブートストラップ完了前に読み込む必要のあるプラグインを特定するためのツールでした。

今回、このアフィニティに2つの問題があることが発覚したのです。

  1. アフィニティ壊れていた。2018年のある時点から、何かの手違いによってアフィニティは壊れてしまっていました。アフィニティが正しく機能していなかったため、クライアントはブートストラップ時と試合後のロード時に、存在する全プラグインを読み込む設定になっていたのです。
  2. アフィニティを直したとしても、問題は解決しない。仮にアフィニティが設計どおりに動作していたとしても、プラグインの読み込み効率は最適化できていなかったでしょう。簡単に言ってしまえば、このクライアントにはブートストラップ時に必要以上のプラグインを読み込んでしまうという欠陥が以前からずっと存在していたということです。

つまり、アフィニティを何かもっと効果的な解決法に置き換えなくてはなりません。

この一連の発見は私たちにとっても寝耳に水でしたが、それと同時に、クライアント問題に対する私たちの基本的な考え方が間違っていないことの証明にもなりました。時間をかけてクライアントの隅々まで調べ尽くすことで、問題の根源を見つけることができたのです。

These discoveries are surprising for us, but they've validated one of the core beliefs we had when we started working on the client: By taking time to dig deep into the client's guts, we've been able to discover some root causes of the problems.

次のステップ

アフィニティが意図した通りの動作をしていないことが分かったので、まずはプラグインをしっかり最適化してくれる別の新機能を用意します。そうすればブートストラップタイムの短縮だけでなく、その他のクライアントの怪しい挙動の原因究明にもつながるでしょう。

これまでに述べたいずれの問題も、クライアントの修正計画自体に影響を及ぼすものではありませんが、少々の遅れは生じるかもしれません。ともあれ、問題解決への道筋がよりはっきりと見えてきたことから、この発見は私たちにとって収穫だったと考えています。これが最終的にクライアント全体の安定動作につながれば、私たちの苦労が無駄になるということはないでしょうから。

クライアントのブートストラップタイムを満足いく水準まで縮められたら、キャンペーンのフェーズ2である「チャンピオン選択時の応答時間の短縮」へと移ります。このチャンピオン選択の改善が、当キャンペーンの最大のポイントであることは間違いないので、私たちとしてもなるべく早く取り組みたいと考えています。

この進捗報告は今後も続けたいと思います。2ヶ月以内にまた新しい報告ができる見込みです。いつもプレイしていただき、ありがとうございます。それではまた。