Google+

Resumo

O Google+ agora é totalmente responsivo.

Use a responsividade

No Google+, as pessoas se reúnem em torno de interesses compartilhados, de gatos zumbis a calculadoras Vintage. Até recentemente, o Google+ tinha duas versões diferentes do site: uma para computador e outra para a Web para dispositivos móveis, desenvolvidas para navegadores mais antigos.

Desafios

A manutenção de dois locais trouxe um conjunto exclusivo de desafios. Com versões separadas do site, cada recurso precisava ser implementado duas vezes. Isso resultou em muito código duplicado e esforço extra para otimizar duas experiências na Web para computadores e para dispositivos móveis. E à medida que as linhas entre os dispositivos se tornavam cada vez mais tênues, com computadores compatíveis com toque e dispositivos móveis potentes com telas cada vez maiores, ter designs diferentes para computadores e dispositivos móveis tornava cada vez menos sentido.

À medida que adicionamos recursos, nosso site para computador legado ficou lento e pesado. No início deste ano, nossa página inicial pesou cerca de 5 MB e produziu cerca de 250 solicitações HTTP. Simplesmente não estava tendo uma boa performance. As imagens do site eram pesadas e não otimizadas, deixando a página ainda mais lenta. Como resultado, nosso stream ficou quase inacessível em redes lentas e instáveis, e a experiência desses usuários foi, na melhor das hipóteses, decepcionante. Além disso, o requisito de compatibilidade com navegadores legados na Web para dispositivos móveis nos impediu de confiar em JavaScript em todo o site e nos impediu de implementar recursos altamente interativos. Não poderíamos confiar nos avanços dos navegadores da Web para dispositivos móveis.

Solução

Começamos com foco no design responsivo: uma implementação que funcionaria em dispositivos móveis, tablets, computadores e muito mais. Analisamos detalhadamente cada recurso, página, biblioteca JavaScript e classe CSS. Queríamos criar um sistema para que o site fizesse o download apenas do que fosse absolutamente necessário para funcionar, a menos que o usuário solicitasse mais. O desafio era criar um site que funcionasse corretamente em um smartphone mais lento com uma conexão celular, mas que ainda oferecesse uma ótima experiência imersiva em navegadores mais rápidos e telas maiores.

Evolução do site Google+

Esse conjunto de restrições significava que tínhamos que examinar detalhadamente cada mudança de código daquele ponto em diante. Para isso, estabelecemos uma regra de 6^5 para garantir que, no carregamento inicial da página, não fizéssemos o download de mais de 60 mil HTML, 60 mil JavaScript e 60 mil CSS, nossas animações sempre tinham 60 fps e tivéssemos uma latência média de 0,6s.

Para isso, escolhemos frameworks de JavaScript e CSS que criaram modularidade e carregamento lento desde o início. Por isso, garantimos que os usuários façam o download de JavaScript e CSS somente quando usarem o recurso que precisa deles. Isso é feito usando uma abordagem baseada em modelos, combinada com nosso sistema de build e módulos, para que as coisas funcionem sem esforço dos desenvolvedores.

Com essa nova estrutura, começamos a prototipar uma reimplementação do Google+ na Web. Começamos a proibir coisas “ruins” e a definir regras rígidas para o desenvolvimento. Uma das nossas principais regras era que todas as nossas páginas precisavam ser renderizadas pelo servidor e pelo cliente. Com a renderização do lado do servidor, garantimos que o usuário possa começar a ler assim que o HTML for carregado, e que nenhum JavaScript precise ser executado para atualizar o conteúdo da página. Depois que a página é carregada e o usuário clica em um link, não queremos fazer uma viagem de ida e volta completa para renderizar tudo novamente. É aqui que a renderização do lado do cliente se torna importante. Basta buscar os dados e os modelos e renderizar a nova página no cliente. Isso envolve muitas desvantagens. Por isso, usamos um framework que facilita a renderização do lado do servidor e do lado do cliente sem a desvantagem de ter que implementar tudo duas vezes: no servidor e no cliente.

Outras regras incluíam a proibição de animações de altura e largura, que causariam relayouts do navegador e afetariam o desempenho de forma negativa. Para manipulações e animações DOM, agendamos tarefas para serem feitas em sincronia com a taxa de atualização de renderização do navegador. Também agrupamos todas as tarefas de medição para evitar cálculos de estilo repetidos e caros. Também confiamos nas ferramentas do Chrome Profiler para garantir que tudo funcionava conforme o esperado à medida que prosseguimos. Além disso, criamos ferramentas que calculam o efeito das alterações de código na pegada de JS para garantir que não aumentemos drasticamente o tamanho da nossa página.

Isso levou algum tempo, mas seria muito mais difícil se não tivéssemos a capacidade de identificar e eliminar problemas à medida que construímos.

O site responsivo do Google+ finalizado.

Lançamos nossa versão da Web para dispositivos móveis dessa implementação responsiva em fevereiro de 2015. Isso nos permitiu examinar os novos designs e nosso novo processo. Usamos os dados desse lançamento para validar o que funcionou e o que não funcionou. Iteramos o design e começamos a expandir o app para oferecer suporte a mais dispositivos. Em novembro de 2015, lançamos essa nova implementação para todos os dispositivos.

Resultados

Sem sacrificar o desempenho, o Google+ conseguiu criar um aplicativo da web complexo com uma interface avançada. O site está mais rápido e enxuto do que nunca.

Antes Depois
Peso total da página inicial, compactado em gzip (com imagens) 22.600 KB 327 KB
Contagem de solicitações 251 45
HTML (não compactado com gzip) 1.100 KB 362 KB
JavaScript e CSS (gzip) 2.768 KB 111KB
Tempo médio de carregamento da página concluído (latência) 12 segundos
0,7 segundo até o primeiro byte
3 segundos
0,1 segundo até o primeiro byte