Otimizando o desempenho de um site

Ao preencher um formulário de emprego, fui solicitado a responder a esta pergunta:

Quais são algumas das maneiras de melhorar o desempenho de um aplicativo da web que você escreveu?

Aqui está minha resposta um tanto prolixa:

Existem diferentes aspectos do desempenho de um site que podem ser otimizados.

Otimização de desempenho do lado do servidor


Alguns dos problemas de desempenho mais comuns no aplicativo da Web típico são causados ​​por consultas de banco de dados mal otimizadas. Portanto, o primeiro lugar em que eu procuraria uma otimização potencial são os tempos de consulta do sql. Rastrear o tempo de execução da consulta deve revelar todas as consultas problemáticas. O melhor lugar para começar é com o mais lento, é claro, mas qualquer consulta que seja executada por mais de 20 milissegundos pode ter espaço para melhorias.

Uma vez que as consultas lentas são identificadas, eu tentaria melhorar o desempenho da consulta ajustando os índices da tabela ou ajustando as consultas para que utilizem um índice disponível. Com o mysql, a regra geral é que as consultas devem sempre incluir uma cláusula where que começa com uma coluna que é indexada sozinha ou que forma a primeira parte de um índice multiparte.

Otimização de desempenho do lado do cliente


Eu começaria com a otimização de scripts e folhas de estilo. JS e CSS podem ser combinados em menos arquivos grandes em vez de vários arquivos pequenos. Isso elimina a sobrecarga da conexão http. Além disso, a minificação e / ou compactação do script pode reduzir o tamanho do arquivo e as otimizações estáticas podem melhorar o tempo de execução dos scripts do lado do cliente.

Uma otimização semelhante pode ser aplicada quando há vários pequenos elementos gráficos em uma página. Essas imagens podem ser combinadas em um único arquivo conhecido como “folha de sprite”. A vantagem é que menos conexões http são necessárias para carregar uma página da web completa. A desvantagem é o aumento da complexidade do código css que é necessário para utilizar os sprites e o esforço considerável envolvido na conversão do código existente.