Como você melhora o desempenho do Drupal?

54

Drupal é rápido no desenvolvimento, mas o desempenho é muito ruim. É difícil alcançar 50 solicitações por segundo.

E há muitas consultas SQL em uma página da web simples. Se você testar o tempo de solicitação de envio de um formulário no Drupal.org, sempre levará alguns segundos para concluir.

Como você melhora a velocidade do seu site?

Bruce Dou
fonte
3
Você realmente pesquisou no site? Não posso imaginar que isso não tenha sido discutido várias vezes antes.
Letharion
11
Caixa meus slides goo.gl/30yi39 deve ajudá-lo
mikeytown2

Respostas:

61

Armazenamento em cache, armazenamento em cache e armazenamento em cache.

Algumas sugestões que eu já dei a uma pergunta semelhante sobre fazer

  1. Colocar Varnish ou outro proxy reverso na frente do seu http-deamon é provavelmente a melhor coisa que você pode fazer.
  2. Durante o DrupalCon Copehagen, Rasmus afirmou que o uso de um cache php opcode, como o APC , é uma das melhores coisas que você pode fazer para acelerar o PHP em geral. O desempenho melhora com as versões mais recentes do PHP. Também há benefícios adicionais na atualização do PHP ao atualizar o Drupal. De 6 a 8, o Drupal passará por uma grande mudança em direção à orientação a objetos, que também ocorreu na maioria das melhorias de desempenho nas versões mais recentes do PHP.
  3. Memcache é uma opção popular para acelerar o cache, colocando o cache na memória em vez de no disco.
  4. Painéis + Armazenamento em Cache combinados com ações de Cache podem aumentar significativamente o desempenho, mesmo para usuários logados, pois suportam lógica bastante complexa.
  5. O cache de entidade é um aumento de velocidade agradável e sem conf. Para quem usa o Drupal 7.
  6. Sites com muita gravação têm menos soluções "bem estabelecidas". Algumas opções incluem.
    1. Mover gravações frequentes inteiramente, por exemplo, estatísticas, para outro lugar, como o Google Analytics.
    2. Armazenando em cache operações de gravação frequentes com uma solução personalizada em algo como NodeJS que gravará no DB uma vez a cada X segundo.
    3. Sacrifique o ACID sagrado e use um banco de dados como o MongoDB . (Veja o comentário de Berdir abaixo)
    4. Agrupe seu banco de dados SQL. Faça leituras de um banco de dados, grave em outro. Isso é nativo do D7 e o Pressflow pode ajudar no D6.
Letharion
fonte
Tudo isso foi adicionado, mas tudo isso é para cache de leitura, não é bom para os sites que têm muita gravação.
Bruce Dou
Você não disse nada específico sobre gravações. :) Vou adicionar algo sobre isso na minha resposta.
Letharion
11
Esclarecimentos sobre o MongoDB. Você não pode mudar seu banco de dados completo para o MongoDB. O MongoDB é algo completamente diferente de um DBMS como o MySQL e, por exemplo, não usa SQL. Você pode substituir apenas determinados componentes conectáveis ​​e usá-los para armazenar uma parte dos seus dados no MongoDB, por exemplo, campos, logs, blocos e assim por diante.
22412 Berdir
@Letharion >> Agrupe seu banco de dados SQL. Faça leituras de um banco de dados, grave em outro. O Pressflow pode ajudar com isso. Como isso pode ser alcançado ?
precisa saber é o seguinte
11
Ótima resposta! Definitivo. Para adicionar isso, consulte o módulo Agregação avançada de CSS / JS , pois meu entendimento é que a agregação reduz as solicitações de arquivos CSS e JS únicos, ajudando a melhorar o desempenho.
therobyouknow
23

Essas são notas de minhas experiências e podem variar do que os outros experimentam. Eu uso predominantemente a pilha LAMP e considerei o mesmo em minhas sugestões.

Regras básicas para cache que eu geralmente sigo.

  1. Processar uma vez usar várias vezes.
  2. Viva com dados antigos quando possível
  3. Limpar caches com pouca frequência e mantê-lo muito específico.
  4. Quando possível, faça as alterações no nível mais baixo da pilha. LAMP - DCCc: Linux, Apache, Mysql, PHP, Drupal Core, Contrib e módulo personalizado.

Melhorar o desempenho de um site Drupal (na ordem crescente de complexidade)

  1. Mantenha o núcleo atualizado, o módulo de contribuição e os temas atualizados. Sim, isso importa.

  2. Instale a APC no seu servidor. (Movido para o topo com base na sugestão de Letharion)

  3. Armazenamento em cache de página: admin / config / development / performance Diferença entre a vida útil mínima do cache e a expiração de páginas em cache

  4. Cache de bloco https://drupal.org/project/blockcache_alter Opções de cache de todos os blocos.
  5. Arquivos javascript e css agregados - Front End Improvements https://www.drupal.org/project/advagg
  6. Desative os módulos desnecessários. Cada módulo é adicionado à quantidade de código que precisa estar disponível para o carregamento da página. E também aumenta o número de pesquisas. Sempre que possível, use um módulo genérico no lugar de vários módulos que executam funcionalidades específicas.
  7. Conteúdo de visualizações de cache - Armazenamento em cache com reconhecimento de conteúdo para visualizações https://www.drupal.org/project/views_content_cache
  8. Desabilitar o log do banco de dados - use https://drupal.org/project/syslog_ng
  9. Reduzir erros 404 - http://www.brokenlinkcheck.com/
  10. Respostas 404 rápidas - https://drupal.org/project/fast_404 - Tente manipular no nível do servidor.
  11. Validações do lado do cliente - https://www.drupal.org/project/clientside_validation
  12. Compactar imagem - https://www.drupal.org/project/imageapi_optimize
  13. Carregamento lento de imagens - Não carregue imagens desnecessárias - https://www.drupal.org/project/lazyloader
  14. Use as Folhas de Sprite - https://www.drupal.org/project/spritesheets

  15. Defina o Valor mínimo do tempo de vida útil do cache como um número mais alto e use os módulos de limpeza de cache para limpar os caches de páginas específicas - Sempre que eu edito / atualizo um nó, todos os caches de páginas de usuários anônimos são perdidos.

  16. Use o módulo Devel para assistir a consultas.
  17. Reescreva as consultas de visualizações / evite as visualizações se for um exagero.
  18. XHProf - https://www.drupal.org/project/XHProf
  19. FPM, HHVM.
  20. Criação de perfil e ajuste de banco de dados - https://www.drupal.org/project/dbtuner
  21. Use o Boost , não o Bootstrap DB, se não for necessário. https://drupal.org/project/boost Para a maioria dos sites pequenos e médios, o Boost é bom o suficiente e talvez você não precise de Proxies Reverso.
  22. Use CDNs - https://www.drupal.org/project/cdn É fácil de configurar.
  23. Se suas tabelas de cache forem enormes, use o Memcached - Se você pode instalar o memcached e configurar a RAM para ele, não é tão complexo quanto parece.
  24. Etags - Configure Etags corretamente. https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. Use o servidor proxy reverso - verniz (pelo menos para ativos). Ajuda muito se a maioria dos usuários for anônima.
  26. Transferência compactada - Ativar compactação gzip
  27. Mantenha-se vivo - Use conexões persistentes sempre que possível.
  28. JPEGS progressivo -
  29. CACHE NO CÓDIGO - O blog da Eaton é incrível. http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. Implementar aquecimento do cache - https://www.drupal.org/project/cache_warmer - Cache Aqueça as páginas antes que o usuário final as atinja.
  31. O Master Slave DB Config - https://www.drupal.org/project/autoslave facilita a configuração de um.
  32. Clusters de banco de dados - https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing
  33. Balanceadores de carga - http://en.wikipedia.org/wiki/Load_balancing_(computing)
  34. Use o aquecimento de cache heurístico - https://www.drupal.org/project/cache_graceful
  35. Cache de Usuário Autenticado - https://www.drupal.org/project/authcache
Gokul NK
fonte
Reposicionando a resposta que eu escrevi para drupal.stackexchange.com/questions/118990/… . Entre, estava fechado dizendo que era muito amplo. Não tenho a certeza se há muita diferença nestas duas perguntas :)
Gokul NK
18

O módulo Boost também é bastante útil, pois cria caches de arquivos estáticos nas suas páginas da web. É principalmente para sites com muito tráfego de usuários anônimos.

O Boost fornece cache estático de página para o Drupal, permitindo um aumento muito significativo no desempenho e na escalabilidade para sites que recebem principalmente tráfego anônimo. Para hospedagem compartilhada, essa é sua melhor opção em termos de melhoria de desempenho. Em servidores dedicados, você pode considerar o Varnish.

O Apache é totalmente suportado, com Nginx, Lighttpd e IIS 7 semi-suportados. O Boost armazenará em cache o & gzip compactará html, xml, ajax, css e javascript. Aumenta a lógica de expiração do cache é muito avançada; é bastante simples ter diferentes tempos de vida do cache para diferentes partes do seu site. O rastreador incorporado garante que o conteúdo expirado seja regenerado rapidamente para carregamento rápido da página.

Beebee
fonte
11
Boost funciona muito bem para o Drupal 7 agora imao. Em uma solução de hospedagem compartilhada, esse é um excelente caminho a ser percorrido (como eles geralmente não permitem o Varnish, por exemplo).
Sábio
5

Vale ressaltar, se você estiver usando o driver de banco de dados SQLIte, poderá ter que desativar a sincronização de disco.

/**
 * Implements hook_init().
 */
function HOOK_init() {
  db_query('PRAGMA synchronous = OFF');
}

Em algumas configurações de servidor, ele melhorará drasticamente o desempenho.

ya.teck
fonte
2
Como isso foi desativado em todo carregamento de página, eu estava pensando se havia uma maneira melhor de desativá-lo permanentemente. Deve gastar algum tempo em dar uma olhada.
Gokul NK
11
É possível fazer isso em sites / default / settings.php, adicionando um elemento 'init_commands' à matriz $ database. Eu encontrei um exemplo para a "PRAGMA synchronous = OFF" aqui: bitacoles.enging.com/node/210
dinopmi
4

O segredo do desempenho do Drupal está no armazenamento em cache e nas boas práticas. Sugestões:

Back-end do Drupal

  • Ative o armazenamento em cache na seção Desempenho .
  • Verifique os módulos de lista de verificação de desempenho e desempenho e escalabilidade .
  • Verifique a lista de verificação e as opções de otimização de desempenho do Drupal 7 .
  • Desative os módulos não utilizados e de não produção (como Devel, UI de Views, UI de regras etc.).
  • Desative os módulos instáveis.
  • Desativar estatísticas .
  • Desative o módulo principal do dblog e substitua pelo syslog .
  • Desative o módulo principal do Update Manager .
  • Cron: Use o cron interno do Drupal, e não o fracomanscron (considere Elysia ou Ultimate cron).
  • Visualizações: use o cache para visualizações em diferentes camadas (consulta ao banco de dados, marcação, com base no tempo).
  • Blocos: use o cache do bloco se a sua exibição for um bloco (por página, usuário etc.).
  • Blocos: considere ajustar as configurações de cache por bloco pelo módulo Block Cache Alter .
  • Painéis: use o cache o máximo possível (para D7, verifique os módulos PCC e PHC ).
  • Entidade: ative o cache da entidade .
  • Ao usar vários ambientes, considere a falta do módulo que pode melhorar o carregamento da página.
  • Ative o cache da página de usuários autenticados com o módulo Authcache .
  • Evite redirecionamentos que diminuem a experiência do usuário.
  • Aprimore a invalidação do cache usando o módulo Expire .
  • Use a criação de perfil PHP antes da produção (por exemplo, XDebug ).

Drupal front-end

  • Minimize as solicitações HTTP por:
    • Ative a agregação JS / CSS na seção Desempenho .
    • Use CSS Sprites para reduzir o número de solicitações de imagem.
    • Use imagens pequenas como dados embutidos (URIs em uma folha de estilo).
    • Use Mapas de imagem para combinar várias imagens em uma única imagem.
    • Considere também usar o carregamento lento de imagens (consulte: Lazyloader de imagens ).
    • Instale o módulo BigPipe para reduzir o tempo de carregamento.
    • Considere carregamento lento vs avaliação lenta.
    • Consulte: Uso do cache do navegador - exposto!
  • Considere tornar alguns JavaScript e CSS externos (em alguns casos, é mais rápido).
  • Minimize o JavaScript e o CSS (consulte: Módulo Speedy ). Evite em linha.
  • Ao referenciar uma JS, use um deferou asyncatributos.
  • Minimize o número de iframes.
  • Otimize imagens, fontes, CSS Sprites, torne o favicon pequeno em cache e reduza o tamanho do cookie.
  • Reduza o número de elementos DOM e faça referências em cache aos elementos acessados.
  • Faça o carregamento das suas páginas 404 mais rápido usando o módulo Fast 404 .
  • Ative a agregação e o cache de recursos de front-end com agregação avançada de CSS / JS .
  • Coloque folhas de estilo na parte superior e scripts na parte inferior.
  • Adicionar uma expira ou um cache-Control cabeçalho, também ETags para reduzir as respostas.
  • Use GET para AJAX e torne-os em cache.
  • Componentes de pré-carregamento e pós-carregamento para aproveitar o tempo que o navegador está ocioso.
  • Às vezes, a divisão de componentes entre domínios pode maximizar downloads paralelos.
  • Não dimensione imagens em HTML e mantenha os componentes abaixo de 25k.
  • Evite filtros, expressões CSS, elementos HTML com src ou href vazio.
  • Use o proxy reverso para depurar suas solicitações da web (por exemplo, Charles ).
  • Use ferramentas como Y-Slow e PhantomJS para verificações básicas de desempenho.
  • Use as ferramentas do Google PageSpeed para analisar e otimizar seu site.
  • Leia sobre as especificações do W3C Navigation Timing ( GitHub ).

PHP

  • Habilite o cache do PHP (por exemplo , OpCache , APC ) e ajuste as configurações.
  • Considere usar PHP-FPM em vez de mod_php mais Nginx em vez de Apache.

Base de dados

Servidor

Sites de alto tráfego

Se você espera alta carga para o seu site, use o Varnish. Considere também usar CDN.

Leia mais em: Experiência do mundo real em desempenho de escala e ajuste


Mais recursos:

kenorb
fonte
3

Existe um livro chamado High Performance Drupal que fornece práticas recomendadas, exemplos e explicações detalhadas para resolver vários problemas de desempenho e escalabilidade. Você aprenderá como aplicar técnicas de codificação e infraestrutura a componentes internos do Drupal, desempenho de aplicativos, bancos de dados, servidores da Web e análise de desempenho.

No artigo Desempenho e escalabilidade no Drupal 7, você pode encontrar alguns exemplos sobre o Drupal 6 e o ​​Drupal 7 e a lista a seguir:

Projetos de desempenho e escalabilidade do Drupal 7 a serem observados:

Adrian Cid Almaguer
fonte
2

Houve muitos ajustes para otimizar o desempenho do seu site Drupal - mas nem todos são imperativos. Temos que procurar certas alternativas e técnicas que levariam a uma plataforma otimizada do Drupal. Cache, sim, é uma maneira de otimizar o site por diferentes meios, mas mais alguns complementos e dicas podem aumentar e ajustar seu site, sem a necessidade de processos sem complicações.

Publicamos recentemente um artigo semelhante ao nosso site, que acredito que poderá ajudá-lo a realizar alguns ajustes.

Fonte: http://www.cloudreviews.com/blog/drupal-performance-optimization-tips

Sabih
fonte
2

Existem algumas possibilidades de melhorar a velocidade do Drupal para um nível razoável sem a instalação de novos módulos. Sim, o Drupal possui configuração de desempenho.

  1. Você pode configurar isso em: YourSiteDomain / admin / config / development / performance
  2. Ative 'Páginas de cache para usuários anônimos' em Chaching
  3. Duração mínima do cache: 1 dia (se você não fizer atualizações regulares)
  4. Expiração de páginas em cache: 1 dia (se você não fizer atualizações regulares)
  5. Ative 'Compactar páginas em cache'
  6. Ative 'Agregar e compactar arquivos CSS'
  7. Ative 'Agregar arquivos JavaScript'

  8. Depois que essas configurações forem definidas, vá para: YourSiteDomain / admin / reports / status

  9. Verifique se há algum problema de permissão nos diretórios 'css' e 'js'
  10. Corrija a permissão conforme definido na página Relatório de Status

E agora você terminou a otimização de velocidade para o seu site drupal 7.

Existem poucas ferramentas de teste de velocidade online para verificar a velocidade. Certifique-se de usar uma das ferramentas de verificação de velocidade e execute um teste antes de atualizar as configurações acima. E uma vez depois de atualizar a configuração de desempenho, execute o teste de velocidade novamente. Você definitivamente verá melhorias.

Pingdom e o HTTP Fox (plugin FireFox) são as melhores ferramentas para verificar a velocidade do site.

As configurações acima não apenas armazenam em cache suas páginas para usuários anônimos, mas também compactam os arquivos CSS e JS. Exemplo: se o seu site estiver carregando 80 arquivos, publique essas configurações, o número de solicitações será reduzido em pelo menos 50%. Portanto, aqui você tem uma melhoria de velocidade 2x em seu site Drupal.

E AND
fonte
2

Como desenvolvedor de back-end, sempre há espaço para melhorar seu código e aumentar o desempenho do site. Algumas diretrizes para desenvolvedores de back-end podem ser:

1) Limpe sua mesa de vigilância

2) Não abuse da API variável

3) Faça menos ou melhores solicitações HTTP

4) Mantenha seu "módulo de pontos" curto

Quando se trata de criadores de fontes e sites, muito mais pode ser alcançado, mas é importante levar em consideração o desempenho de todos os pontos de vista.

Fonte: Otimize antes de ir ao ar

targoo
fonte
2

Um site Drupal 7 não otimizado com 2 GB de RAM pode atender de 20 a 25 solicitações por segundo de forma satisfatória. Se você quiser ir além disso, o site precisará de alguns ajustes. O que você ajusta depende se a maioria dos usuários no site é anônima ou autenticada. Aqui estão as principais coisas que você pode fazer para melhorar o desempenho:

O site está atendendo principalmente usuários anônimos:

1) Instale e configure definitivamente o APC, o memcache e o entitycache.

2) Coloque o proxy Varnish na frente do servidor da web. Demora cerca de 30 minutos para instalar e configurar, mas reduzirá drasticamente o tempo de carregamento da página. De fato, o Varnish pode lidar com cerca de 300 solicitações por segundo em uma máquina de 2 GB se todas as páginas estiverem em cache. Use o módulo Expirar para expirar apenas as páginas selecionadas na atualização / exclusão de conteúdo.

3) Use o módulo Agregação avançada de CSS / JS para agregar arquivos CSS e JS. Tente mover todos os arquivos JS para a parte inferior da página. Mas observe que isso pode danificar seu site, portanto implemente-o na produção após testes completos. Experimente também inlining CSS crítico. Na minha experiência, isso diminuirá o tempo de carregamento da página em cerca de meio segundo.

4) CSS / JS / images devem ter um cabeçalho de expiração muito distante no futuro. Isso garantirá que os navegadores não solicitem as mesmas imagens CSS / JS / novamente.

5) Verifique se o servidor da web está exibindo páginas compactadas / CSS / JS.

Depois de implementar as 5 etapas acima, seu servidor de 2 GB de RAM poderá atender 50 solicitações por segundo com bastante facilidade.

O site está atendendo principalmente usuários autenticados:

Otimizar esse site é mais complexo. Esses sites se enquadram em uma das duas subcategorias para fins de otimização:

(a) A maioria das páginas do site é idêntica, exceto 1 ou 2 blocos com informações específicas do usuário. Por exemplo, no site Drupal Commerce.

(b) A maioria das páginas é totalmente personalizada para o usuário. Por exemplo, no site Drupal Commons.

Se seu site se enquadra na categoria (a), aplique a maioria das técnicas discutidas no site, que atendem principalmente a usuários anônimos. A única diferença é que, para páginas não administrativas, o Varnish precisará remover o cookie SESSION do cabeçalho e servir páginas em cache. Use o módulo AJAX Block para bloquear servidores com informações específicas do usuário usando AJAX. Dessa forma, a maior parte da página será veiculada extremamente rapidamente usando o Varnish e, em seguida, informações específicas do usuário serão veiculadas no AJAX.

Se o seu site estiver na categoria (b), use o módulo Authcache. Prefiro não usá-lo o máximo possível, pois requer um pouco de configuração e manutenção. Mas funciona muito bem. Não será tão rápido quanto usar o Varnish, mas poderá lidar com 50 solicitações por segundo que você está procurando.

Se você deseja ir além do que discutimos aqui, consulte a Lista de verificação de otimização de desempenho do Drupal . Divulgação: está escrito por mim. Ele cita uma lista exaustiva de coisas que você pode fazer para tornar seu site Drupal muito rápido.

Neerav Mehta
fonte