Tenho um site que estou investigando que apresenta problemas importantes de desempenho. Usando o memcache, reduzi o número de consultas em número e tempo total de execução (de 3 segundos a 230 ms), mas o tempo de execução da página está me iludindo (estou (olhando para os valores gerados pelo devel) meu entendimento é que o tempo de execução da página = tempo necessário para a execução do php, portanto, instalei o APC e posso ver o php opcode sendo armazenado em cache e estatísticas mostrando resultados no painel de controle da APC (apc.php enviado com a APC), mas o tempo de execução da minha página não diminui. Então, acho que minha pergunta é dupla:
- O que tudo contribui para (diminui a velocidade) o tempo de execução da página? É apenas um tempo necessário para executar o php?
- Quais abordagens devo adotar para reduzir o tempo de execução da página. Eu tentei APC, mas não muita ajuda
O número de módulos PS usado neste site é enorme (168), mas agora não estou em posição de fazer essa recomendação, é mais como um incêndio na situação do buraco.
Edit: Saída da execução do xhprof na instância local (recomendado pelo mikeytown), isso parece loucura, acho que os resultados posteriores são causados por problemas? As execuções diff para o mesmo URL têm uma diferença drástica e seu uso excessivo de recursos. Também não sei por que está mostrando valores que não são de hoje: | (Acabei de instalar o xhprof neste laptop)
fonte
EDIT: Eu li mal a postagem original. 168 módulos é muito, e 300 a 700ms de consultas SQL são enormes . Quanto mais módulos você usar, mais consultas serão assim que os módulos fizerem alguma.
Use o cache agressivo enquanto puder, armazene tudo em cache, se não for suficiente, tente um cache proxy reverso. O uso de uma CDN para arquivos pode melhorar bastante a coisa toda. Um cache de proxy reverso também pode ajudá-lo, removendo alguns cookies de autenticação ao acessar páginas que não precisam dele (o núcleo achará que o usuário é anônimo para isso e maximizará o cache).
O dinamismo do núcleo do Drupal torna o amanhecer lento, assim que você tem muitos módulos interagindo ao mesmo tempo.
Eu diria, por exemplo, se você usar muitos módulos que carregam dados no tempo hook_node_load () em vez de usar campos, ele fará muitas consultas enquanto o uso do campo garantiria a eficiência do cache.
A renderização também pode levar muito tempo, drupal_render () (a API de renderização que algumas vezes é chamada) é uma boa peça de API (realmente útil), mas também um pouco lenta. Mudar para o PDO (D7) e o DBTNG completo (o que é ótimo, a propósito) também adiciona latência não negligenciável.
Dito isto, o núcleo por si só é bastante rápido (mas faz muitas consultas SQL, mesmo com quase nada instalado), módulos mal codificados geralmente são o gargalo.
A APC pode dividir o tempo de execução por 2 ou 3, dependendo do código que é executado. se você configurá-lo bem (habilite todas as otimizações da APC, o manual oficial da APC será bem escrito e o guiará).
Se você estiver em uma caixa com um sistema de arquivos lento (sistema de arquivos de rede ou disco rígido lento), isso pode implicar um impacto visível no tempo de execução. O Drupal é criado a partir de muitos arquivos pequenos, o que força o PHP a fazer E / S no FS toda vez que carrega um deles (a APC também ajuda muito nisso).
Um DBMS mal configurado também pode ser um gargalo feio, se você estiver usando o MySQL, pense em fazer um ajuste fino. Se você estiver em uma hospedagem compartilhada, se não for específico (ou pronto), a pilha DBMS e PHP do Drupal provavelmente será configurada incorretamente ou não ajustada, o que pode levar a sites muito lentos.
Não se esqueça de ativar todos os caches. Se o seu site não estiver orientado para o usuário autenticado, ative o cache agressivo da página (é realmente incrível).
Quanto mais você tiver blocos, mais páginas inteiras serão lentas, os blocos do módulo Views serão um gargalo (dependendo dos plug-ins do Views que você usa, o bloco do OG pode ser uma verdadeira dor de cabeça) se você não restringir sua visibilidade por página ou com código PHP personalizado (qualquer outro bloco também, sempre defina sua visibilidade manualmente, ajuda muito a estrutura, evitando que ela tente renderizar blocos vazios).
Evite que os módulos que usam hook_init (), hook_init () estejam sendo executados em todas as páginas, mesmo se você obtiver um 403 ou um 404, o que atrasa tudo (até diminui o tempo de geração do estilo imagecache | e erros 404 nos arquivos amanhecer devagar só para dizer que o arquivo não existe).
fonte