Lors des six prochains mois, Riot Games va effectuer un certain nombre de changements et d'améliorations à l'infrastructure du client de League of Legends, avec des objectifs simples : le réparer et le rendre plus performant.
« Riot, quand allez-vous réparer le client ? »
C'est une question que beaucoup d'entre vous nous posent. Le client n'est pas en très bonne forme. Il y a trop de bugs, il est trop lent (plus particulièrement lors de la sélection des champions) et connaît beaucoup de problèmes comme des fuites de mémoire, des plantages, des écrans gelés, etc. Nous avons déjà travaillé à corriger ce client, mais des problèmes persistent.
Alors nous voulons essayer quelque chose de différent.
Au lieu de parler vaguement de ce que nous avons prévu, nous allons vous parler de nos objectifs spécifiques concernant la performance du client et de certains changements que nous comptons effectuer au cours des six prochains mois.
D'abord, nous allons parler des récentes améliorations de performance que nous avons déjà effectuées puis nous allons analyser certains chiffres qui nous permettront d'orienter nos prochaines améliorations.
LE CLIENT EN CHIFFRES
En fin d'année, nous avons ajouté quelques outils au client pour nous permettre de suivre certains indicateurs de performance basiques comme, par exemple, le temps que le client met à se lancer et à être entièrement fonctionnel (c'est-à-dire la mise en route ou « bootstrap »).
Nous voulons qu'elle prenne moins de 15 secondes, surtout pour les joueurs possédant des machines relativement lentes. Cependant, nous avons découvert qu'actuellement, la mise en route peut être jusqu'à trois ou quatre fois plus longue pour certains.
Une autre mesure importante à laquelle nous nous sommes intéressés est le temps de « verrouillage de la sélection des champions ». C'est le temps nécessaire pour que le client enregistre que vous avez verrouillé votre champion après avoir cliqué sur le bouton. Dans le graphique ci-dessous, vous verrez les temps de réponse moyens du verrouillage de la sélection des champions lors du patch 9.22 (ligne orange) et lors du patch 10.2 (ligne bleue). Le temps de réponse du verrouillage est calculé en millisecondes.
Le graphique ci-dessus montre combien le temps de réponse de la sélection des champions varie selon les joueurs. Bien sûr, la performance du client dépend de la réactivité de votre machine. Si, par exemple, il vous faut moins de 200 ms pour verrouiller votre champion, votre ordinateur est dans le 10e centile et votre temps de réponse est plus rapide que 90 % des joueurs. De la même manière, si votre temps de réponse est au-dessus de 800 ms, vous êtes dans le 90e centile, ce qui signifie que votre client est plus lent que 90 % des joueurs.
Comme vous pouvez le voir, les temps de verrouillage du patch 10.2 se sont améliorés par rapport au patch 9.22. La principale raison est que dans le patch 9.23, nous avons mis à jour la version de Chromium sur laquelle fonctionne le client. Nous avons eu de bons résultats, mais nous pensons que le client est encore bien trop lent pour la plupart d'entre vous.
Afin que vous compreniez mieux, explorons plus en détail la vitesse de réponse du verrouillage de la sélection des champions pour certains groupes.
Comme vous pouvez le voir, la ligne bleue représente le 50e centile ou le joueur « moyen ». Cette grosse baisse du temps de réponse pour le joueur moyen est plutôt positive. Mais vous pouvez remarquer qu'au début de l'année 2020, le temps de réponse de la sélection des champions pour le joueur moyen tourne autour de 300 ms. Ce n'est pas horrible, mais ça reste un délai relativement long.
Les joueurs du 70e centile (ligne verte) ont également pu voir des améliorations, mais leur temps de réponse de la sélection des champions tourne autour de 450 ms. Cela équivaut à presque une demi-seconde de délai, ce qui est bien plus lent que ce que nous aimerions voir sur une machine normale.
Enfin, jetons un œil à l'horrible 90e centile (ligne orange). Par définition, ces joueurs vont subir un temps de réponse plus lent que la majorité. Mais 800 ms est un délai trop élevé, et c'est là que se situent certains joueurs même après la mise à jour de Chromium.
Donc ! Parlons désormais de ce que nous avons prévu.
NOS PROCHAINES PRIORITÉS
En ce qui concerne la performance du client à long terme, nous avons deux priorités bien spécifiques :
Nous voulons réduire le temps de mise en route d'environ 15 secondes, même pour les joueurs du 90e centile. Cela correspond à un temps trois à quatre fois plus rapide qu'actuellement.
Nous voulons que le temps de réponse de verrouillage de la sélection des champions descende à 100 ms pour les joueurs du 90e centile. C'est environ huit fois plus rapide que le temps actuel.
Nous savons ce que vous pensez. Quid des bugs ? Et en ce qui concerne les plantages et les fuites de mémoire ?
Pourquoi ces deux priorités-là ? Voici la raison : en améliorant le temps de mise en route et de verrouillage de la sélection des champions, nous allons nettoyer et repenser certains aspects fondamentaux de l'architecture du client. Nous pensons que nous pourrons corriger au passage quelques bugs, plantages et fuites de mémoire.
Des problèmes tels que le bug d'écran noir lors de la sélection des champions ou une mauvaise sauvegarde des pages de runes ne sont que des exemples des choses que nous comptons corriger lors de ce processus. Mais nous voulons être très transparents quant au fait que cela prendra du temps. Nous envisageons actuellement un plan sur six mois qui nous permettra de progresser significativement vers ces objectifs. Mais atteindre ces objectifs à long terme prendra certainement plus de temps.
Il est possible que nous n'y parvenions pas. Nous vous en parlons parce que nous devons nous montrer le plus transparent possible, pour pouvoir regagner votre confiance quant au client de LoL.
Vous vous demandez sûrement : comment allez-vous faire ?
COMMENT NOUS ALLONS FAIRE
Pour l'instant, nous avons identifié deux problèmes structuraux majeurs qui contribuent à des temps de mise en route lents. Le premier concerne l'architecture de notre plug-in qui nous permet de diviser le code du client en plusieurs parties utiles. Cette architecture s'est complexifiée au fur et à mesure que nous avons ajouté de nouvelles fonctionnalités au client. Ensuite, nous utilisons mal le cadriciel Javascript (appelé Ember) qui dirige notre interface.
Actuellement, le client utilise trop de plug-ins et d'applications Ember. En fait, durant le processus de mise en route de notre client, nous chargeons 41 plug-ins et 16 applications différentes. Chacun de ces processus prend entre 100 ms et 800 ms pour se lancer. Ce n'est pas idéal.
Notre plan est de consolider ces plug-ins et applications pour pouvoir réduire leur nombre (et les rendre théoriquement plus efficaces). Nous allons d'abord nous concentrer sur ceux qui se lancent durant la mise en route, car nous pensons que ce sont eux qui seront le plus avantageux pour le client.
PHASE 1 : MISE EN ROUTE
Actuellement, beaucoup d'entre vous peuvent attendre jusqu'à 40 secondes pour la mise en route. Si vous faites partie de ces joueurs, vous savez que l'expérience peut s'avérer extrêmement lente et frustrante. Cela signifie également que lorsque votre client plante, le redémarrer peut s'avérer encore plus difficile.
Beaucoup d'éléments du client comme les notifications, la liste d'amis et l'onglet Collection sont affectés par les plug-ins et les applications qui se lancent durant la mise en route. Même si notre objectif à long terme est de réduire la mise en route à 15 secondes pour les joueurs du 90e centile, nous pensons que nous allons également pouvoir corriger plusieurs bugs et manques d'efficacité qui affectent le client.
Après quelques mois de travail sur la mise en route, nous allons analyser notre progression puis, probablement vers la fin du printemps, nous passerons à la sélection des champions.
PHASE 2 : SÉLECTION DES CHAMPIONS
La sélection des champions ajoute beaucoup de plug-ins et applications Ember supplémentaires. Pour être clairs, presque tout ce que vous faites lors de la sélection des champions engendre de nouvelles applications. L'échange de champions en engendre deux. C'est la même chose lorsque vous changez vos sorts d'invocateur.
Plus vous jouez longtemps à League en une seule session, plus ces applications s'empilent et entraînent un ralentissement de plus en plus pénible. À cela, s'ajoute également le fait que la plupart des actions que vous effectuez lors de la sélection des champions reposent sur la communication avec nos serveurs et ajoutent de la latence à chaque interaction.
Le véritable problème de la sélection des champions est lié à la manière dont nos systèmes internes gèrent les données. L'architecture actuelle de la sélection des champions nous permet de faire passer énormément de données importantes à travers nos systèmes. Par exemple, si Riot décide de désactiver un champion en file classée, ce champion deviendra indisponible presque immédiatement pour tous les joueurs, y compris pour ceux qui sont actuellement dans la sélection des champions au moment de la désactivation.
C'est un système très efficace, mais qui requiert énormément de puissance pour le faire fonctionner. Vu la structure actuelle de notre système, il y a énormément de portails et d'engorgements inutiles. Beaucoup de données sont souvent reproduites alors qu'une seule petite variable a été changée. Cela empiète considérablement sur votre expérience du client.
Pour corriger cela, nous allons devoir complètement changer la façon dont fonctionne l'infrastructure interne de la sélection des champions. Nous allons retravailler la manière de faire passer toutes les données du serveur au client durant la sélection des champions, et cela va prendre du temps.
Nous avons d'autres objectifs ambitieux à long terme qui pourraient rendre la sélection des champions encore plus efficace, comme faire du client une seule application Ember sans aucun plug-in. À court terme, nous souhaitons implémenter suffisamment de changements pour que notre client fonctionne à la vitesse que nous visons.
Nous ignorons encore où nous en serons lorsque nous aurons terminé notre travail de six mois. Mais lorsque nous aurons terminé, nous pensons que nous aurons fait beaucoup de progrès et aurons de nouvelles étapes à atteindre.