Conheça a Campanha de Limpeza do Cliente
RESUMO: ao longo dos próximos seis meses, faremos algumas mudanças e melhorias na infraestrutura interna do cliente do LoL. Para acompanhar nossas atividades, definiremos metas específicas para duas métricas de desempenho do cliente: o tempo de inicialização do cliente (quanto tempo demora para que o cliente inicialize) e o tempo de confirmação na Seleção de Campeões. Enquanto aperfeiçoamos tais métricas, também resolveremos bugs, erros, etc. Em outras palavras, nosso objetivo é consertar o cliente.
"Tá, Riot, mas quando vocês vão consertar o cliente?"
Essa é uma pergunta constante dos jogadores. O cliente anda meio capenga: cheio de bugs, muitos atrasos (especialmente na Seleção de Campeões) e com uma série de falhas de memória, erros, travamentos e tudo mais. Nós nos empenhamos para fazer algo com relação ao cliente no passado, mas os problemas ainda persistem.
Então, vamos tentar algo diferente.
Em vez de comentarmos sobre nossos planos e coisas sem sentido, hoje vamos mostrar nossas metas de desempenho e detalhes sobre as mudanças que queremos pôr em prática ao longo dos próximos seis meses.
Primeiro, vamos falar um pouco sobre algumas melhorias recentes de desempenho que fizemos e sobre algumas estatísticas que, no futuro, servirão como guias para nós.
O CLIENTE EM NÚMEROS
No fim do ano passado, adicionamos ao cliente algumas ferramentas que nos possibilitavam acompanhar indicadores básicos de desempenho como, por exemplo, quanto tempo o cliente leva para inicializar e se tornar 100% funcional (o famoso "tempo de inicialização").
Nosso objetivo era que o tempo de inicialização fosse de 15 segundos até mesmo para jogadores com computadores relativamente lentos. Entretanto, descobrimos que, do jeito que está agora, o tempo de inicialização pode ser três ou até quatro vezes maior para alguns jogadores.
Outro grande tópico que estamos acompanhando é o "tempo de confirmação na Seleção de Campeões", ou seja, o tempo necessário para que o cliente registre que o jogador confirmou o Campeão após clicar no botão. No gráfico abaixo, incluímos os tempos de resposta médios para confirmação da Seleção de Campeões na Atualização 9.22 (linha laranja) e na Atualização 10.2 (linha azul). O tempo de resposta de confirmação é calculado em milissegundos.
O gráfico acima mostra o quão diferente pode ser o tempo de resposta na Seleção de Campeões para diferentes jogadores. Mas, é claro, o desempenho do cliente varia dependendo da velocidade de cada computador. Se, por exemplo, leva menos de 200ms para que um jogador confirme o Campeão, o computador dele está no 10º percentual e seus tempos de resposta são mais rápidos do que os de 90% dos jogadores. Da mesma forma, se os tempos de resposta estiverem acima de 800ms, o jogador está no 90º percentual, o que significa que o cliente dele está mais lento que do que os de 90% dos jogadores.
Como podemos ver, os tempos de confirmação ficaram bem mais rápidos para os jogadores durante a Atualização 10.2 em comparação com a Atualização 9.22. O principal motivo para tal melhoria é que, na Atualização 9.23, modernizamos a versão do Chromium que faz o cliente funcionar. Isso nos trouxe um bom ganho de desempenho, mas o cliente ainda está bem lento para muitos jogadores.
Para facilitar a compreensão, vamos dar uma olhada nos detalhes da velocidade de resposta da Seleção de Campeões ao longo do tempo de alguns desses grupos específicos.
Como podemos ver, a linha azul representa o 50º percentual, ou o jogador "médio". A queda nos tempos de resposta para o jogador médio está boa. Entretanto, podemos ver que, mesmo no começo de 2020, os tempos de resposta na Seleção de Campeões para o jogador médio estão na faixa dos 300ms. Não é terrível, mas ainda é um atraso perceptível.
O 70º percentual de jogadores (linha verde) também recebeu boas melhorias recentemente, mas os tempos de resposta na Seleção de Campeões para esse grupo estão na faixa de 450ms. Isso é quase meio segundo de atraso, algo muito mais lento do que o esperado para qualquer pessoa com um computador razoavelmente decente.
Por último, vamos dar uma olhada no 90º percentual (linha laranja) em toda sua glória nefasta. Por definição, esses jogadores têm tempos de resposta mais lentos que a maioria, mas 800ms ainda é muito, e segue assim mesmo após a atualização do Chromium.
Ótimo! Agora vamos falar sobre o que faremos.
O QUE PRETENDEMOS PRIORIZAR
Há duas metas específicas de desempenho do cliente que vamos priorizar:
- Queremos diminuir o tempo de inicialização para cerca de 15 segundos, mesmo para os jogadores no 90º percentual. Isso é, em comparação com o atual, entre três e quatro vezes mais rápido.
- Queremos que os tempos de resposta na Seleção de Campeões sejam cerca de 100ms para os jogadores no 90º percentual. Isso é cerca de oito vezes mais rápido do que o atual.
Sabemos o que todos estão pensando agora. Mas e os bugs? E os erros e falhas de memória?
Por que estamos priorizando essas duas coisas primeiro? Porque, enquanto consertamos o tempo de inicialização e de confirmação na Seleção de Campeões, também vamos limpar e reformular alguns aspectos fundamentais da arquitetura do cliente. Acreditamos que conseguiremos resolver esses bugs, falhas de memória e erros no processo enquanto trabalhamos nas metas principais.
Problemas como o bug de "tela preta" na Seleção de Campeões e páginas de runa que não estão sendo guardadas corretamente são apenas exemplos do que vamos resolver como parte do processo. Mas seremos bem transparentes com uma coisa: isso vai levar algum tempo. Atualmente, temos um plano aproximado de seis meses que acreditamos que trará um bom avanço em direção a esses objetivos. Porém, atingir nossas metas a longo prazo provavelmente levará mais tempo.
São apenas metas, e talvez deixemos a desejar. Estamos compartilhando essas metas porque sabemos que, para recuperarmos a confiança em relação ao cliente, teremos que ser mais transparentes do que nunca.
"Mas, Riot, como exatamente vocês farão isso?"
COMO FAREMOS ISSO
Até agora, identificamos dois problemas maiores de arquitetura que contribuem para o longo tempo de inicialização. O primeiro é a nossa arquitetura de plugin, que nos permite quebrar o código do cliente em blocos úteis. Essa arquitetura acabou ficando lotada à medida que fomos adicionando mais funcionalidades ao cliente. Segundo, estávamos utilizando de forma errada a estrutura Javascript que roda nossa UI (o framework Ember).
Atualmente, o cliente utiliza muitos plugins e aplicativos do Ember. Aliás, durante o processo de inicialização do cliente, carregamos 41 plugins separados e 16 aplicativos. Cada um deles leva cerca de 100ms a 800ms para inicializar, e isso não é bom.
Nosso plano é reduzir o número de plugins e aplicativos (e, teoricamente, torná-los mais eficientes). Focaremos primeiro nos que iniciam junto com a inicialização, pois acreditamos que eles fornecerão um maior ganho de desempenho ao cliente.
FASE 1: INICIALIZAÇÃO
Para muitos dos jogadores, hoje a inicialização leva cerca de 40 segundos para ser concluída. Qualquer um sabe que vivenciar isso pode ser bem desgastante. Isso também significa que, quando o cliente trava, reiniciá-lo pode ser pior ainda.
A maioria das coisas que acontecem no cliente, como as notificações, a lista de amigos e a aba de coleção, são afetadas pelos plugins e aplicativos que iniciam durante a inicialização. Então, embora nosso objetivo a longo prazo seja ter um tempo de inicialização de 15 segundos para o jogador no 90º percentual, acreditamos que, no processo, resolveremos vários bugs e ineficiências que afetam o cliente.
Após alguns meses de foco na inicialização, avaliaremos o quão perto estamos dos nossos objetivos e, então, por volta do meio do ano, passaremos a nos concentrar mais especificamente na Seleção de Campeões.
FASE 2: SELEÇÃO DE CAMPEÕES
A Seleção de Campeões introduz ainda mais plugins e aplicativos do Ember. Para dizer a verdade, quase tudo que é feito na Seleção de Campeões cria novos aplicativos. Trocar Campeões gera dois deles. Assim como trocar um Feitiço de Invocador.
Quanto mais partidas são jogadas em uma única sessão, mais esses aplicativos se acumulam, resultando em uma experiência gradualmente mais lenta. Esse problema é ainda pior pelo fato de que a maioria das ações durante a Seleção de Campeões depende da comunicação com os nossos servidores, o que gera mais atraso a cada interação.
No entanto, a verdadeira raiz do problema na Seleção de Campeões é a forma como nossos sistemas internos gerenciam os dados. A arquitetura atual da Seleção de Campeões nos permite transmitir dados muito importantes através de nossos sistemas. Por exemplo, se a Riot decidir desativar um Campeão nas ranqueadas, tal Campeão será bloqueado quase que imediatamente para todos os jogadores, inclusive para aqueles que já estavam na Seleção de Campeões no momento da desativação.
É algo muito útil, mas precisa de muita potência para funcionar e, dada a forma que nosso sistema funciona atualmente, há muitas barreiras e obstáculos desnecessários no processo. Então, muitas vezes, toneladas de dados são reiniciados quando apenas uma pequena entrada é alterada, e isso prejudica (e MUITO) a experiência com o cliente.
Para consertar isso, teremos que mudar a forma como a infraestrutura interna da Seleção de Campeões funciona. Precisaremos reformular a maneira como todos os dados são passados do nosso servidor para o cliente durante a Seleção de Campeões, e isso requer algum tempo.
Temos outros objetivos mais ambiciosos a longo prazo que melhoram a eficiência da Seleção de Campeões, como juntar todo o cliente em um único aplicativo do Ember, sem nenhum plugin adicional. No curto prazo, queremos implementar mudanças o suficiente para fazer com que o cliente rode de acordo com as metas que descrevemos acima.
Não sabemos ao certo o quão "otimizado" ele ficará após esse processo de seis meses, mas, quando estivermos perto do fim desse período, acreditamos que já teremos conquistado um grande avanço e já teremos descoberto os próximos passos.
PRÓXIMOS PASSOS
Daremos notícias a cada dois meses em nossos Blogs do Desenvolvedor para compartilhar nosso progresso, incluindo estatísticas de desempenho e quaisquer ajustes no cronograma do projeto.
Boa sorte pra nós! Agradecemos a todos os jogadores por fazerem parte da comunidade do LoL. Até mais!