Il y a quelques mois, nous avons annoncé notre intention de réparer le client de League of Legends, projet que nous avons nommé la « campagne de nettoyage du client ».
Ici, à Riot, nous tenons à vous tenir au courant de nos avancées, même lorsque nous rencontrons des difficultés. En toute honnêteté, nous avons encore beaucoup de travail devant nous, avant d'être totalement satisfaits de la performance du client.
Dans l'article d'aujourd'hui, nous allons parler des avancées que nous avons effectuées. Nous allons également évoquer les quelques contretemps que nous avons rencontrés, mais aussi des prochaines étapes prévues pour les résoudre.
Notre avancée
Comme nous l'avons dit dans notre premier article sur le client, nous voulons avant tout réduire le temps de mise en route jusqu'à environ 15 secondes, même pour les joueurs du 90e centile. Pour rappel, le temps de mise en route mesure le temps que met le client à se lancer.
Pour atteindre cet objectif, nous avons dit que nous consoliderons et réduirons le nombre de plugins et applications Ember du client. Si ce vocabulaire ne vous parle pas, veuillez noter que les plugins sont des outils qui nous permettent de diviser le code du client en plusieurs sections utiles. Les applications Ember sont des outils qui supervisent notre interface utilisateur.
Jusqu'ici, nos travaux concernant cette zone avancent bien. Vous pourrez voir dans le graphique ci-dessous le nombre total de plugins et applications Ember du client au fil du temps. À chaque patch, nous avons réduit un peu leur nombre. Lors de son lancement, le client doit désormais charger 10 % d'applications Ember en moins et 20 % de plugins en moins, par rapport au début des travaux.
C'est une bonne nouvelle ! Nous avons cependant dû faire face à quelques contretemps dont nous aimerions vous parler.
Quelques contretemps
Lors des premiers patchs de l'année, nous avons remarqué d'importantes améliorations du temps de mise en route, grâce à notre travail sur les plugins.
Cependant, lors du patch 10.3, nous avons remarqué que les temps de mise en route commençaient à aller dans la mauvaise direction et le patch 10.7 représente la plus faible performance des temps de mise en route depuis le début.
Vous pouvez le voir dans le graphique ci-dessous. Pour vous aider à mieux comprendre, veuillez noter que les courbes devraient se rapprocher du côté gauche du graphique (ce qui correspond à des temps de mise en route plus rapides).
Nous pouvons expliquer ce récent inconvénient par la pression anormale que subissent les serveurs de League ces dernières semaines. Pour des raisons relativement évidentes, beaucoup d'entre vous à travers le monde passent plus de temps à la maison. Vous jouez énormément à League, ce qui pèse sur l'infrastructure de notre serveur et entraîne donc des temps de réponse imprévisibles et de plus longues mises en route du client.
Alors que nous augmentons la capacité du serveur pour faire face à cet afflux, nous pourrions commencer à revoir de véritables améliorations des performances du client. Nous étudions également d'autres causes possibles, comme réduire la quantité de code Javascript à charger lors de la mise en route.
Peu importe la raison de ce contretemps, il y a de l'espoir : comme nous l'avons dit dans notre premier article, en améliorant le temps de mise en route et de verrouillage de la sélection des champions (notre prochaine étape), nous allons pouvoir nettoyer et repenser certains aspects fondamentaux de l'architecture du client.
Cela signifie que nous sommes en train de corriger des bugs et traiter des problèmes de l'architecture fondamentale du client qui peuvent vous peser.
Un de ces fameux problèmes architecturaux que nous avons découverts est lié à une fonctionnalité du client appelée Affinity.
Le problème avec Affinity
Affinity est apparu en tant que fonctionnalité, lors de la « mise à jour du client » effectuée il y a quelques années. Il s'agit d'un outil qui nous permet d'identifier les plugins qui doivent être chargés avant la fin de la mise en route.
Nous avons découvert deux problèmes avec Affinity :
- Affinity ne fonctionnait pas. À un moment en 2018, Affinity a fini par ne plus fonctionner correctement. Puisqu'Affinity ne fonctionne pas correctement, le client charge donc par défaut tous les plugins existants lors de la mise en route et du chargement de fin de partie.
- Même si nous le réparions, Affinity ne résoudrait pas nos problèmes. Nous pensons que même si Affinity fonctionnait comme prévu, il ne priorisait pas assez efficacement le chargement des plugins. Pour résumer, le client a toujours eu cette mauvaise habitude de charger trop de plugins durant sa mise en route.
Nous devons donc remplacer Affinity par un programme plus efficace.
Ces découvertes nous ont surpris, mais ont permis de corroborer une de nos principales hypothèses lorsque nous avons commencé à travailler sur le client : en prenant le temps de fouiller dans les entrailles du client, nous avons pu découvrir des sources principales des problèmes que nous rencontrons.
Prochaines étapes
Maintenant que nous savons qu'Affinity ne fait pas le travail qu'il est censé faire, nous pouvons implémenter une nouvelle solution qui priorise correctement les plugins. Nous pourrons donc améliorer les temps de mise en route pour les joueurs et permettre d'autres travaux importants du client.
Cela n'altère pas fondamentalement notre projet de réparer le client, mais ça pourrait nous ralentir un peu. Dans tous les cas, nous considérons cette découverte comme un élément positif, puisqu'elle nous dégage le chemin pour la suite. Si cela permet de vous offrir de manière globale une expérience plus stable et moins buggée, alors nos efforts n'auront pas été en vain.
Une fois que nous serons satisfaits des temps en mise en route du client, nous entamerons la deuxième phase de la campagne de nettoyage du client : la réduction des temps de réponse lors de la sélection des champions. Pour beaucoup d'entre vous, le travail sur la sélection des champions est certainement la partie la plus intéressante de cette campagne et nous avons également hâte d'y être.
Nous continuerons de vous tenir au courant de notre avancée. Attendez-vous à un autre article comme celui-ci dans les prochains mois. Comme toujours, merci à vous de jouer !