Nous vous avons promis de parler régulièrement de notre travail en coulisses pour améliorer la performance et la fiabilité du client de League of Legends.
Aujourd'hui, il s'agit du septième article de la série. (Voir le premier, le deuxième, le troisième, le quatrième, le cinquième et le sixième article)
Pour résumer : nous avons passé ce premier trimestre à essayer de dégager la voie pour l'amélioration du Chromium Embedded Framework (CEF). Nous n'avons pas terminé, mais nous espérons pouvoir obtenir une nouvelle version du Chromium Embedded Framework (CEF) à la fin du deuxième trimestre, ce qui permettra d'améliorer la qualité de vie de nombreux joueurs.
Mettre à jour le Chromium Embedded Framework (CEF)
Comme nous l'avons expliqué la dernière fois, un de nos plus gros projets concerne la mise à jour de la version du Chromium Embedded Framework (CEF), le navigateur Internet qui sous-tend l'architecture du client de League. Cependant, nous avons sous-estimé son importance. Mettre à jour le CEF est le changement individuel le plus efficace pour l'amélioration du client. Cela nous est directement bénéfique, tout en permettant d'effectuer d'autres améliorations ultérieures.
La dernière mise à jour du CEF date de novembre 2019 (version 74). Au moment où nous rédigeons cet article, la dernière version disponible du CEF est la version 90. Mettre à jour le CEF (nous visons la version 90) aura de nombreux avantages :
- Réduction des plantages du client
- Les versions obsolètes du CEF entrent en conflit avec certains périphériques. Les premières données nous indiquent que la majorité des plantages pourraient résulter de ces versions obsolètes. Nous pensons ainsi que le mettre à jour permettra de réduire le nombre de plantages.
- Amélioration de la compatibilité
- L'équipe en charge du CEF teste de façon exhaustive les nouvelles versions sur de nombreuses combinaisons d'équipements et de périphériques. Le client de League profite ainsi gratuitement de ces tests.
- Meilleure performance du websocket
- Le client de League se divise en deux composants majeurs : la « façade » qui correspond à l'application visuelle avec laquelle vous interagissez et une « structure » plus petite qui fonctionne en coulisses, récupère des données sur nos serveurs et garde une trace de toutes les informations dont se sert le client pour vous afficher les bonnes choses. Exemples de tâches qu'effectue cette structure :
- « Ce joueur a activé le paramètre qui permet de fermer le client lors d'une partie. Il vient de commencer une partie, il faut donc désactiver la façade de l'application jusqu'à la fin de la partie. »
- « Ce joueur vient d'ouvrir l'onglet Collection. Quels champions possède-t-il ? »
- Un websocket est une sorte de tuyau qui relie la façade à la structure interne. Un tuyau plus large et moins sinueux achemine ses données plus rapidement. C'est ce que nous visons avec une version plus récente du CEF. Améliorer les websockets offre de meilleures performances lorsqu'une grande quantité de données transite (fin de partie, sélection des champions), surtout pour les joueurs installés sur des machines plus anciennes. En comparant nos versions du CEF, voici les améliorations que nous pourrions constater :
- 4,1x plus rapide sur Windows
- 7,8x plus rapide sur Mac
- Meilleures performances d'animations
- Certaines animations sont jouées de façon procédurale selon les données reçues, comme la barre d'expérience sur l'écran de fin de partie (il y en a bien d'autres). On peut assimiler ces animations à des fuites de mémoire, c'est pourquoi les performances générales du client sur de longues sessions seront également améliorées.
- Meilleure IPS - Plus de réactivité et une meilleure reconnaissance des clics
- Structure plus simple (plus rapide, plus fiable) pour nos développeurs
- Plus de manières d'empêcher les fuites de mémoire sur de longues sessions de jeu
- Un nouveau critère qui nous octroie de meilleures données sur le temps que mettent les informations à s'afficher sur l'écran du client
- Meilleure utilisation du processeur (CPU)
- La version actuelle du CEF (74) a permis de mettre en place une fonctionnalité appelée « Service réseau » qui regroupe toutes les requêtes réseau en une seule tâche dans votre processeur, ce qui libère les autres pour d'autres tâches comme le chargement de contenu. Nous n'utilisons pas encore cette fonctionnalité puisqu'elle est apparue lors de notre dernière mise à jour du CEF et nous n'avons pas eu le temps de l'expérimenter. Avec notre prochaine mise à niveau, nous aimerions pouvoir l'implanter dans League.
- Meilleures performances de Javascript
- Les versions les plus récentes de Chromium améliorent considérablement le moteur V8 utilisé pour gérer Javascript. Il s'agit d'un bénéfice direct des mises à jour de version, tout comme les améliorations de compatibilité.
Ce dernier trimestre, nous nous sommes concentrés sur la mise à niveau de nos composants web existants (la technologie utilisée sur notre site web pour les intégrations vidéo, les notifications pop-up, etc.) vers des versions compatibles avec celles du CEF, afin de nous assurer que la mise à jour du CEF se passe sans encombre. Nous voulons que ces mises à niveau se passent sans accroc : avec un peu de chance, vous n'avez pas remarqué leur arrivée lors des derniers patchs. Elles concernent une grande partie du code, il est donc possible qu'un problème occasionnel soit passé entre les mailles du filet, mais nous corrigeons ces soucis au fur et à mesure de leur détection.
Ceci étant dit, nous ne sommes qu'à quelques semaines de la fin de ces mises à niveau de composants. Nous allons pouvoir ensuite passer à la mise à jour du CEF à proprement parler et aimerions avoir bouclé cela d'ici fin juillet 2021.
Panneau social
Le panneau social fait également partie des objectifs d'amélioration que nous avons mentionnés la dernière fois. Notre objectif à long terme est de faire passer le panneau social d'une vieille architecture ComponentsJS à des applications Ember. Ce projet est momentanément suspendu, le temps d'achever la mise à jour du CEF, même si nous avons franchi les premières étapes requises pour une transition vers l'Ember. Nous nous y remettrons dès que le chapitre CEF sera bouclé.
Voici les problèmes majeurs du panneau social que nous avons résolus, avant de nous concentrer sur la mise à niveau de notre CEF :
- Panneau social non connecté
- Liste d'amis qui ne se charge pas, statut incorrect affiché, liste d'amis non renseignée
- Informations de classement qui disparaissent de la fenêtre lorsqu'un joueur est dans une partie normale
- Au lancement, apparition du statut Déconnecté puis du poro triste, avant de passer enfin au chargement de la liste d'amis
Suivi des travaux sur l'empreinte mémoire et les erreurs Javascript
Nous avons également continué d'analyser l'empreinte mémoire des parties jouées en une seule session. Nous sommes ravis de vous annoncer que nous avons observé une réduction de 30 Mo par partie jouée depuis le patch 10.25, ainsi qu'une baisse constante des plantages dus à des fuites de mémoire.
Le dernier domaine que nous aimerions explorer sont les erreurs Javascript. Dans notre dernier article, nous avons indiqué le mauvais nombre d'erreurs JS constatées par les joueurs dans les régions Riot. Lors du patch 10.25, elles s'élevaient plutôt à 265 millions. Heureusement, cela nous a permis de comprendre davantage l'urgence du problème. Le nombre actuel d'erreurs rencontrées par les joueurs n'a pas changé, nous avons simplement utilisé une mesure différente. Depuis, nous avons réduit le nombre d'erreurs à 140 millions par patch et nous espérons pouvoir continuer dans cette voie.
Quel est le programme ?
Même si la mise à niveau de notre CEF reste notre priorité à court terme, nous avons prévu d'autres travaux pour le reste de 2021.
- Faire passer le panneau social à un fonctionnement par applications Ember, comme mentionné ci-dessus.
- Repenser la fin de partie. Même si la fin 2020 et le début de l'année nous ont permis de corriger plusieurs problèmes majeurs rencontrés en fin de partie, il y a encore du travail à accomplir. Beaucoup de joueurs se plaignent encore du temps requis pour revenir sur le client ou de plantages de l'écran de fin de partie. Dès que nous nous y mettrons, nous commencerons par répertorier toutes les interactions du client avec le moteur et les services du jeu, afin de déterminer ce qui pourrait améliorer l'expérience. La fin de partie dépend de nombreux autres services auxquels l'équipe en charge du client n'a pas accès. Il va donc falloir nous allier à d'autres équipes pour régler ensemble ces problèmes.
- Accélérer l'accès à la sélection des champions. Il s'agit d'un problème très récurrent dans certaines régions, puisqu'il dépend de la connexion Internet du joueur (l'infrastructure Internet varie selon la région). Même si nous ne pouvons pas faire grand-chose pour corriger ces problèmes de réseau, nous travaillons tout de même avec l'équipe Compétition pour voir ce qui pourrait être fait pour s'assurer que les joueurs accèdent à la sélection des champions dans un délai raisonnable.
- La stabilité du client lors de longues sessions de jeu. L'année dernière, une de nos urgences concernait le problème de fuites de mémoire. Le client utilisait en effet de plus en plus de mémoire au fur et à mesure que les joueurs enchaînaient les parties ou laissaient le client ouvert pendant de longues périodes. Dans le cadre du suivi de ce problème, nous allons expérimenter des manières plus intuitives pour les joueurs d'utiliser le client comme s'ils venaient de se connecter, peu importe le nombre de parties jouées ou le laps de temps pendant lequel le client est resté ouvert. Nous pourrions mettre les bouchées doubles et continuer de colmater des fuites de mémoire plus compliquées à résoudre, mais nous allons devoir également envisager des solutions à court terme.
C'est tout pour le moment ! Comme toujours, notre travail est grandement influencé par les retours que vous nous faites parvenir. Nos sondages réguliers adressés aux joueurs y participent beaucoup. Continuez de nous dire quelles parties du client requièrent notre attention et quels changements ont eu le plus gros impact sur votre expérience !