Limpeza do Cliente: progresso, obstáculos e mais
Alguns meses atrás, anunciamos nossos planos de consertar o cliente de League of Legends. Chamamos essa mobilização de "Campanha de Limpeza do Cliente".
A equipe da Riot se compromete a manter vocês atualizados sobre nosso progresso, mesmo enfrentando desafios. De fato, ainda precisamos de mais tempo até ficarmos satisfeitos com o desempenho do cliente.
No blog de hoje, falaremos sobre o progresso que fizemos, bem como sobre os obstáculos que temos encontrado e como planejamos resolvê-los com os próximos passos.
PROGRESSO
Como falamos em nosso primeiro blog do cliente, queríamos diminuir o tempo de inicialização para cerca de 15 segundos, mesmo para os jogadores no 90º percentual. "Tempo de inicialização" significa quanto tempo o cliente demora para iniciar.
Para alcançar nosso objetivo, dissemos que consolidaríamos e reduziríamos a quantidade de plugins e aplicativos do Ember no cliente. Caso não tenham familiaridade com essa terminologia, plugins são ferramentas que nos permitem quebrar o código do cliente em blocos úteis e aplicativos do Ember são ferramentas que gerem nossa interface de usuário.
No momento, o trabalho nessa área tem ido muito bem. O gráfico abaixo mostra o número total de plugins e aplicativos do Ember no cliente ao longo do tempo. Temos reduzido essa quantidade a cada atualização. Do início do processo de limpeza até agora, já conseguimos reduzir em 10% os aplicativos do Ember e em 20% os plugins carregados durante a inicialização do cliente.
São ótimas notícias! Porém, encontramos alguns obstáculos e queremos compartilhá-los com vocês.
OBSTÁCULOS E DESAFIOS
Nas primeiras atualizações do ano, vimos melhorias significativas no tempo de inicialização devido ao nosso trabalho com os plugins.
Contudo, a partir da Atualização 10.3, começamos a perceber que o tempo de inicialização não estava seguindo da forma que esperávamos, chegando ao nível mais controverso na Atualização 10.7.
Observem o gráfico abaixo. Quanto mais a curva avançar rumo ao lado esquerdo do gráfico, mais curto será o tempo de inicialização.
Gráfico Percentual X Tempo de inicialização
Uma explicação possível para esse obstáculo é a sobrecarga dos servidores do LoL nas últimas semanas. Por razões óbvias, muitos de vocês estão com mais tempo livre em casa. O LoL tem sido muito mais jogado e isso exige muito da infraestrutura do nosso servidor, resultando em tempos de resposta mais inconsistentes e inicializações mais lentas.
Conforme aumentamos a capacidade para suprir o novo fluxo, é possível que vejamos melhorias concretas no desempenho do cliente. Temos analisado outras possíveis causas e soluções, como reduzir a quantidade de códigos Javascript carregados durante a inicialização.
Independentemente dos motivos ligados a tais desafios, isso é algo que nos motiva: como dissemos em nosso primeiro Blog do Desenvolvedor, enquanto consertamos o tempo de inicialização e de confirmação de Campeões na tela de Seleção (o próximo item da nossa lista), estamos limpando e refazendo certos elementos fundamentas da arquitetura do cliente.
Ou seja, estamos corrigindo erros e solucionando diversos problemas de arquitetura que têm causado dores de cabeça a todos vocês.
Descobrimos que um desses problemas está relacionado a uma ferramenta do cliente chamada Affinity.
O PROBLEMA DA AFFINITY
Lançamos a ferramenta Affinity quando fizemos a "atualização do cliente" há alguns anos. Trata-se de uma ferramenta que nos permite especificar quando plugins precisam ser carregados antes que a inicialização possa ser concluída.
Descobrimos que há dois problemas com a Affinity:
- Ela estava quebrada. Em algum momento de 2018, nossa ferramenta começou a apresentar falhas. Por conta desse funcionamento incorreto, o cliente carrega todos os plugins durante a inicialização e após o fim da partida.
- Mesmo se a consertarmos, a Affinity não resolverá nossos problemas. Acreditamos que, mesmo quando funcionava corretamente, a Affinity não priorizava a eficiência do carregamento de plugins. Em outra palavras, o cliente sempre teve um problema ligado ao carregamento de plugins demais durante a inicialização.
Resumindo: precisamos substituir a Affinity por uma solução mais eficiente.
Essas descobertas são surpreendentes para nós, mas validaram uma das crenças que tínhamos quando começamos a trabalhar no cliente: investigando o cliente a fundo, seria possível descobrir algumas das raízes de problemas que vínhamos enfrentando.
PRÓXIMOS PASSOS
Agora que sabemos que a Affinity não está fazendo o que deveria, podemos implementar uma nova solução que fará a priorização de plugins de forma correta. Com isso, poderemos acelerar os tempos de inicialização para os jogadores e partir para outro trabalho no cliente.
Nada disso altera fundamentalmente nossos planos de corrigir o cliente, mas são fatores que podem nos atrasar. De qualquer forma, consideramos essas descobertas uma coisa boa, já que nos dão uma noção melhor do que fazer daqui pra frente. Se os resultados forem experiências menos problemáticas e mais confiáveis para vocês, significa que nossos esforços não foram em vão.
Assim que os tempos de inicialização do cliente forem reduzidos a um nível satisfatório, começaremos a fase 2 da nossa Campanha de Limpeza do Cliente: reduzir os tempos de resposta na Seleção de Campeões. A Seleção de Campeões é a parte mais interessante da campanha para a maioria de vocês, e mal podemos esperar para trabalharmos nela.
Continuaremos atualizando todos vocês sobre o nosso progresso. Aguardem outro blog como esse dentro de alguns meses. Como sempre, valeu por jogarem!