Otimizando o código em um mundo que não quer otimizar
Publicados: 2019-11-22Otimização prematura é a raiz de todo o mal.
É um ditado comum entre os desenvolvedores. Faz sentido. Otimizar prematuramente pode significar refazer o trabalho no futuro, e o tempo é o recurso mais finito do desenvolvedor. Pode significar gastar esse precioso tempo otimizando cenários que ainda não existem para os usuários de um produto. Pode significar escrever código mais difícil de entender com ganhos de desempenho pouco claros.
Enquanto participava da equipe de revisão de temas do WordPress há cerca de um ano, me deparei com esse conselho mais uma vez. Otimização prematura é a raiz de todo o mal. A resposta foi para um autor de tema que estava procurando diminuir o número e o peso dos scripts que seu tema precisava carregar. Por um lado, o autor do tema poderia carregar um script de 1,29 kb sem dependências para fazer o trabalho. A outra opção era usar o script dependente de jQuery incluído no núcleo do WordPress para um total de 105 kb porque “a maioria” dos sites WordPress está carregando o jQuery de qualquer maneira.
Para mim, a resposta foi simples. Use o script menor, a menos que o script principal já tenha sido carregado no front-end. Eu não pensei nisso em termos de otimização prematura . Eu pensei nisso como uma otimização simples, comum e cotidiana.
Os desenvolvedores não devem confundir a otimização prematura com o conceito de tomar decisões de design inteligentes no início do processo. Tampouco devem esperar até o estágio final de desenvolvimento para começar a otimizar, um momento em que o foco está em levar um produto aos usuários finais. Isso é um sinal de um processo de design de produto ruim.
Ao longo do ano passado, essa conversa ficou comigo. Isso me ajudou a ficar mais ciente de uma tendência aterrorizante, não apenas na comunidade de desenvolvedores do WordPress, mas no desenvolvimento da web em geral. Com muita frequência, os desenvolvedores estão tão distantes dos usuários normais e a tecnologia na qual esses usuários confiam nessa otimização é pouco mais do que uma reflexão tardia. Em vez disso, deve estar sempre na vanguarda da mente de qualquer desenvolvedor.
A confiança excessiva nessa citação mal utilizada ajudou a impulsionar a tendência de medir o peso da página em megabytes em vez de kilobytes. É muitas vezes usado como uma justificativa geral para não fazer nenhuma otimização na fase de desenvolvimento enquanto compensa isso com compactação de arquivos e armazenamento em cache na produção.
Parte da escrita de código de qualidade é otimizar esse código durante todas as etapas do processo de desenvolvimento. Trata-se de tomar decisões difíceis para cortar coisas desnecessárias à medida que o software se junta. O armazenamento em cache deve ser o último recurso após a limpeza de todo o resto.
A otimização prematura é mais uma tentativa de otimizar quando não há ganhos claros ou trabalhar em micro-otimizações que alteram o design do software para pouco ou nenhum benefício. Isso não significa ignorar os aumentos de desempenho óbvios durante o desenvolvimento.
Nem todo mundo está na Internet Gigabit
A maioria dos desenvolvedores que conheço está em conexões de internet super-rápidas, geralmente com velocidades de download de 1 Gbps e dados ilimitados. Nessa situação, é fácil esquecer que grandes partes do mundo ainda estão em conexões lentas com limites de dados.
Alguns podem até associar conexões lentas com países do terceiro mundo, onde milhões de pessoas estão na tecnologia de telefonia celular 2G. No entanto, existem grandes áreas dos Estados Unidos e outros países desenvolvidos que não possuem linhas diretas de cabo ou DSL, que são comumente disponíveis em cidades e subúrbios.

Essa desconexão é evidente quando outros desenvolvedores iniciaram conversas comigo. Nos últimos dois anos, tem sido cada vez mais comum eles pedirem um bate-papo por vídeo. Nem sequer é questionado se tal coisa é possível (chats de vídeo não são confiáveis na melhor das hipóteses para mim). A capacidade de conversar por vídeo a qualquer momento é tida como garantida.
Há duas opções de serviço de internet na área em que moro: via satélite ou discada. Até mesmo a companhia telefônica local se recusa a oferecer DSL nesta área por causa dos custos de infraestrutura com linhas telefônicas de décadas. Devido aos custos proibitivos do acesso à Internet via satélite, que normalmente vem com limites de dados, muitos ficam presos à discagem. As empresas de telefonia celular estão mudando o jogo até certo ponto, supondo que o serviço seja confiável, mas há falhas em seguir esse caminho, o que pode incluir limitações de dados ou pontos de acesso.
Para um país tão avançado tecnologicamente, muitos de seus habitantes mal estão alcançando onde outros estavam há uma década.
Embora eu tenha a sorte de escolher onde moro e não tenha nada que me impeça de me mudar, a maioria não tem essa opção. Eles estão presos com o melhor que podem pagar. Mesmo nas áreas rurais, a internet é uma parte inevitável da vida cotidiana, e os desenvolvedores não estão facilitando as coisas para essas pessoas.
Embora isso seja anedótico, é a dura realidade da vida rural em bolsões dos EUA.
A vantagem de morar no interior do Alabama é que isso mudou minha perspectiva como desenvolvedor. Isso significava que eu precisava questionar cada decisão de código para cada plugin e tema que construí. Com os limites de dados, eu precisava ter certeza de que não estava usando muitos recursos.
Mais do que tudo, ter um limite de dados mudou a forma como eu usava a internet. Agora eu corro um bloqueador de anúncios. Eu tenho uma extensão para matar vídeos de carregamento automático. Desabilito o JavaScript em sites pesados que preciso usar. Alguns sites parecem interessantes, mas nunca volto a eles porque são porcos de recursos.
Quando você mora em um lugar onde cada byte é importante, você tende a evitar desperdiçá-los.
Embora nem sempre seja bem-sucedido, desde minha transição para a vida em uma cidade pequena, tentei criar aplicativos de uma maneira que atendesse às pessoas que não têm o privilégio de ter acesso à Internet extremamente rápido.
Apontar isso é garantir que os desenvolvedores estejam cientes de que a otimização é importante. É importante em todas as fases do processo de desenvolvimento. É importante porque essas pessoas com conexões lentas e limites de dados também precisam comprar produtos, usar serviços, ler conteúdo e fazer todas as outras coisas que as pessoas fazem na web.
Se você é um desenvolvedor que está pensando em adicionar esse controle deslizante, mecanismo de deslizamento para celular ou algum outro gadget sofisticado, pense naqueles que devem esperar o carregamento desse recurso. Verifique se suas dependências não estão carregando muitos recursos extras. Faça alguma pesquisa para ver se você pode localizar uma implementação mais leve. Mas, primeiro, pergunte-se se é necessário.
Os temas e plugins que os desenvolvedores do WordPress criam nunca devem ser o gargalo de um site. Podemos fazer melhor.
