Passos para otimizar o WordPress em relação à carga do servidor?

78

Além de instalar o W3 Total Cache ou outro plug-in de armazenamento em cache, quais etapas posso seguir para garantir que meu tema e site sejam executados o mais rápido possível.

    
por Paul Sheldrake 12.08.2010 / 12:24
fonte

14 respostas

30

Você pode instalar o WordPress no Nginx. Existem vários recursos para ajudar:

Algumas informações de desempenho do último link (que parece ser uma configuração um pouco diferente das outras):

  

Então eu decidi colocar um proxy na frente   de wordpress para cache estático tanto   que possível. TODOS não autenticados   o tráfego é servido diretamente do   cache de arquivos nginx, aceitando algumas solicitações   (como a geração de feeds RSS) de 6   páginas / segundo para 7000+ páginas / segundo.   Oof. O Nginx também lida com registro e   gzipping, deixando o backend mais pesado   Apaches para fazer o que eles fazem melhor: servir   páginas dinâmicas do wordpress somente quando   necessário.

     

...

     

No nginx - é tão eficiente que é   assustador. Eu nunca vi usar mais   de 10 a 15 meg de RAM e um pontinho de   CPU, mesmo sob nossa carga mais pesada. Nosso   gráficos de gânglios não mentem: nós dividimos pela metade   nossos requisitos de memória, dobrou nossa   taxa de transferência de rede de saída e   nivelou completamente nossa carga. Nós   teve basicamente nenhum problema desde   nós configuramos isso.

    
por Travis Northcutt 18.08.2010 / 16:35
fonte
25

Defina expirações do lado do cliente para coisas como css, imagens, JavaScript, etc., que não precisem ser redownloaded para cada visualização de página. Isso, de longe, fez a maior diferença nos tempos de carregamento do meu site. O download mais rápido é o download que nunca aconteceu ...

# BEGIN Expire headers
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 7200 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 2592000 seconds"
  ExpiresByType text/javascript "access plus 2592000 seconds"
  ExpiresByType application/x-javascript "access plus 2592000 seconds"
  ExpiresByType text/html "access plus 7200 seconds"
  ExpiresByType application/xhtml+xml "access plus 7200 seconds"
</IfModule>
# END Expire headers

# BEGIN Cache-Control Headers
<IfModule mod_headers.c>
  <FilesMatch "\.(ico|jpe?g|png|gif|swf|gz)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
  <FilesMatch "\.(css)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
  <FilesMatch "\.(js)$">
    Header set Cache-Control "max-age=2592000, private"
  </FilesMatch>
<filesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=7200, public"
</filesMatch>
# Disable caching for scripts and other dynamic files
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
# END Cache-Control Headers

Você pode pré-compactar tudo que puder razoavelmente (o 7-zip é uma boa ferramenta para isso) & faça o upload no mesmo local que o arquivo que você acabou de compactar. Altere o .htaccess para servir os arquivos pré-gzipados, conforme abaixo. A ressalva aqui é que você precisa se lembrar de refazê-los se / quando você atualizar as coisas. Isso elimina a sobrecarga da CPU, além de analisar o .htaccess.

RewriteEngine on
#Check to see if browser can accept gzip files. If so and we have it - serve it!
ReWriteCond %{HTTP:accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
#make sure there's no trailing .gz on the url
ReWriteCond %{REQUEST_FILENAME} !^.+\.gz$
#check to see if a .gz version of the file exists.
RewriteCond %{REQUEST_FILENAME}.gz -f
#All conditions met so add .gz to URL filename (invisibly)
RewriteRule ^(.+) $1.gz [QSA,L]

Esta é apenas uma resposta crua. Existem muitas variações sobre esse tema. Eu escrevi sobre isso e adicionei algumas referências a artigos mais aprofundados em enlace . Leia isso e, mais importante, as referências para as quais aponto - elas são bons recursos.

Esteja ciente de que, se você mexer com frequência, os usuários precisarão atualizar o cache.

Um plugin que eu achei muito útil também é wp-minify . A coisa para assistir com este é que você deve excluir itens específicos da página (formulário de contato, controle deslizante de primeira página, etc) para que você não esteja baixando novamente todo o conjunto de css, JS etc para cada página. É uma boa maneira de minimizar, combinar & comprimir sua linha de base CSS, JS etc. Ele reduz muito os pedidos de http. Wp-minify joga bem com supercache e também com cabeçalhos de expiração que eu detalhei acima.

Use o Yslow no Firebug (Firefox) ou similar para monitorar suas solicitações http e o que é e não é compactado. Dê uma olhada nos cabeçalhos de expiração também. Você logo verá o que pode melhorar.

    
por CAD bloke 14.08.2010 / 04:19
fonte
21

Minimize o número de plugins que você executa para apenas o que realmente precisa. Especialmente estar ciente de plugins que adicionam javascript e código CSS em cada carga de página, mesmo quando esse código não está sendo usado na página.

Se você estiver criando seu próprio tema desde o início, divida seu CSS de modo que os recursos necessários apenas para modelos de página ou tipos de visualização específicos (postagem única, arquivos, categoria etc.) sejam carregados somente quando necessário.

Configure o W3TC para usar um CDN (como o Amazon CloudFront ou qualquer um dos outros suportados pelo W3TC).

Veja se as opções do Minify funcionam para você (alguns plug-ins geram js / css que não são muito bons, portanto teste seu site depois de ativar o recurso minify).

Se você tem controle total do seu servidor MySQL, certifique-se de ter o query_cache ativado. Use um script de ajuste do MySQL para encontrar outras maneiras de otimizar a configuração do banco de dados.

Se o uso de um CDN for problemático por algum motivo, configure mod_expires na configuração do seu apache. Defina tempos de expiração, desde que razoáveis para tipos estáticos, como imagens, css, javascript, vídeo, áudio, etc.

    
por Dougal Campbell 12.08.2010 / 14:57
fonte
13
___ qstnhdr ___ Passos para otimizar o WordPress em relação à carga do servidor? ______ qstntxt ___

Além de instalar o W3 Total Cache ou outro plug-in de armazenamento em cache, quais etapas posso seguir para garantir que meu tema e site sejam executados o mais rápido possível.

    
______ answer495 ___

Você pode instalar o WordPress no Nginx. Existem vários recursos para ajudar:

Algumas informações de desempenho do último link (que parece ser uma configuração um pouco diferente das outras):

  

Então eu decidi colocar um proxy na frente   de wordpress para cache estático tanto   que possível. TODOS não autenticados   o tráfego é servido diretamente do   cache de arquivos nginx, aceitando algumas solicitações   (como a geração de feeds RSS) de 6   páginas / segundo para 7000+ páginas / segundo.   Oof. O Nginx também lida com registro e   gzipping, deixando o backend mais pesado   Apaches para fazer o que eles fazem melhor: servir   páginas dinâmicas do wordpress somente quando   necessário.

     

...

     

No nginx - é tão eficiente que é   assustador. Eu nunca vi usar mais   de 10 a 15 meg de RAM e um pontinho de   CPU, mesmo sob nossa carga mais pesada. Nosso   gráficos de gânglios não mentem: nós dividimos pela metade   nossos requisitos de memória, dobrou nossa   taxa de transferência de rede de saída e   nivelou completamente nossa carga. Nós   teve basicamente nenhum problema desde   nós configuramos isso.

    
______ answer340 ___

Defina expirações do lado do cliente para coisas como css, imagens, JavaScript, etc., que não precisem ser redownloaded para cada visualização de página. Isso, de longe, fez a maior diferença nos tempos de carregamento do meu site. O download mais rápido é o download que nunca aconteceu ...

%pre%

Você pode pré-compactar tudo que puder razoavelmente (o 7-zip é uma boa ferramenta para isso) & faça o upload no mesmo local que o arquivo que você acabou de compactar. Altere o .htaccess para servir os arquivos pré-gzipados, conforme abaixo. A ressalva aqui é que você precisa se lembrar de refazê-los se / quando você atualizar as coisas. Isso elimina a sobrecarga da CPU, além de analisar o .htaccess.

%pre%

Esta é apenas uma resposta crua. Existem muitas variações sobre esse tema. Eu escrevi sobre isso e adicionei algumas referências a artigos mais aprofundados em enlace . Leia isso e, mais importante, as referências para as quais aponto - elas são bons recursos.

Esteja ciente de que, se você mexer com frequência, os usuários precisarão atualizar o cache.

Um plugin que eu achei muito útil também é wp-minify . A coisa para assistir com este é que você deve excluir itens específicos da página (formulário de contato, controle deslizante de primeira página, etc) para que você não esteja baixando novamente todo o conjunto de css, JS etc para cada página. É uma boa maneira de minimizar, combinar & comprimir sua linha de base CSS, JS etc. Ele reduz muito os pedidos de http. Wp-minify joga bem com supercache e também com cabeçalhos de expiração que eu detalhei acima.

Use o Yslow no Firebug (Firefox) ou similar para monitorar suas solicitações http e o que é e não é compactado. Dê uma olhada nos cabeçalhos de expiração também. Você logo verá o que pode melhorar.

    
______ answer205 ___

Minimize o número de plugins que você executa para apenas o que realmente precisa. Especialmente estar ciente de plugins que adicionam javascript e código CSS em cada carga de página, mesmo quando esse código não está sendo usado na página.

Se você estiver criando seu próprio tema desde o início, divida seu CSS de modo que os recursos necessários apenas para modelos de página ou tipos de visualização específicos (postagem única, arquivos, categoria etc.) sejam carregados somente quando necessário.

Configure o W3TC para usar um CDN (como o Amazon CloudFront ou qualquer um dos outros suportados pelo W3TC).

Veja se as opções do Minify funcionam para você (alguns plug-ins geram js / css que não são muito bons, portanto teste seu site depois de ativar o recurso minify).

Se você tem controle total do seu servidor MySQL, certifique-se de ter o query_cache ativado. Use um script de ajuste do MySQL para encontrar outras maneiras de otimizar a configuração do banco de dados.

Se o uso de um CDN for problemático por algum motivo, configure mod_expires na configuração do seu apache. Defina tempos de expiração, desde que razoáveis para tipos estáticos, como imagens, css, javascript, vídeo, áudio, etc.

    
______ resposta200 ___

Execute o memcached e use um cache de objetos para reduzir o número de consultas ao banco de dados. Isso armazena dados do banco de dados, em vez de páginas. Não tenho certeza se o w3-total-cache já faz isso.

Certifique-se de que você está executando um cache opcode como APC . (Existem vários mais disponíveis.)

    
______ answer508 ___

Além de usar um plug-in de cache de disco como o wp-cache, coloque seu blog em um volume de host que tenha a propriedade "noatime" configurada nele. Caso contrário, use o SSH no seu host (se o seu provedor de hospedagem fornecer isso) e rotineiramente execute este comando em seus arquivos em intervalos de alguns dias:

%pre%

O ~ / * significa "meus arquivos sob meu diretório pessoal". Você pode mudar esse caminho como quiser. Você também pode configurá-lo em um cron job no cpanel, se o seu provedor de hospedagem fornecer isso.

Para mais informações sobre a propriedade atime, consulte this . Ele acelera muito o desempenho de leitura de disco do Linux.

Às vezes, seu site está sendo atacado por aranhas. Você pode usar uma ferramenta como SpyderSpanker ou Chennai Central para filtrar as aranhas que não ajudam a trazer mais page rank para o seu site e apenas retardá-lo, e então estrangular boas aranhas (como Google, Bing, etc.) enviando aleatoriamente Mensagens HTTP 304 Não Modificadas.

Outra coisa que vejo é apenas plugins mal escritos. Se você aprender como fazer plugins, começará a ver como alguns plugins são ineficientemente codificados ou até mesmo encontrar timebombs, como uma tabela de banco de dados que é preenchida e nunca limpa, armazenando coisas como dados de conexão de entrada.

Além de todas as outras soluções aqui, você também pode criar um farm da web do WordPress hospedando-o em vários PCs de nó da web que se conectam a um único banco de dados e um único volume de disco (como um volume montado sobre NFS). Confira Ultra Monkey para saber como fazer isso acontecer.

    
______ answer525 ___

Algumas respostas do topo da minha cabeça:

1) Minimize o número de solicitações HTTP que o navegador precisa fazer ao seu host concatenando JavaScript e CSS sempre que possível / prático.

2) Descarregue o máximo possível de sua imagem / mídia veiculada para CDNs de terceiros, especialmente se você estiver usando hospedagem compartilhada.

3) Tente reduzir o número de postagens que você está exibindo na primeira página para reduzir o tempo total de renderização.

3a) Tente usar um tema que apresente algumas postagens em destaque na primeira página e todas as outras postagens mais antigas como trechos.

    
______ answer77375 ___

O armazenamento em cache do WordPress Menu também oferece um aumento de desempenho. Especialmente se você tiver muitas páginas ou uma gigantesca estrutura de menu, isso deve ser considerado.

Faça isso em duas etapas fáceis. Primeiro, crie uma função que obtenha ou crie o menu, em vez de chamar %code% diretamente.

%pre%

Em seu tema, substitua o %code% s por %code% . Agora, toda vez que o menu é chamado, você tem uma Databasequery em vez de toda a Menubuilding.

Os menus não mudam com frequência, mas você também precisa se conectar à ação %code% para excluir os antigos transientes.

Faça assim:

%pre%

O menu será gerado na próxima vez que a página for chamada - e usará a versão em cache até que alguém atualize o menu novamente.

Versão atualizada

Obrigado @helgatheviking por apontar um erro entre lesmas e IDs. Eu atualizei as funções para que funcione com %code% e %code% (para uma chamada direta do menu).

Os menus são sempre salvos com o nome do Menu, não a posição no Tema.

    
______ answer476 ___

Use uma classe de banco de dados que é aparada para otimização. Fizemos boas experiências com o próprio código para reduzir o uso de memória e a velocidade de acesso ao banco de dados. Além disso, você pode otimizar a estrutura do banco de dados por meio de pequenas alterações que fazem muito também.

Parte do código de classe do banco de dados pode ser encontrado no trac do wordpress, ele não foi incluído no núcleo ( Ticket # 11799 e relacionado ).

    
______ answer14880 ___

Para um site altamente veiculado, você deve ajustar todos os buffers do MySQL para o conteúdo que está em vigor agora. Independentemente da versão do WordPress, A camada MySQL pode ter sua configuração computada .

Na verdade, se você tiver dados do InnoDB sem ativar o innodb_file_per_table, você precisa limpar o InnoDB segmentando cada tabela em seu próprio espaço de tabela física . É possível fazer um ajuste decente do MySQL mesmo se você tiver um hardware limitado . Existem muitos cenários para fazer tais otimizações do InnoDB .

IMHO, você não pode planejar boas configurações para my.cnf sem saber a quantidade de dados para configurar. Você teria que carregar periodicamente um conjunto de dados atual da produção em um ambiente de preparação, executar otimizações e obter os números para configurar no my.cnf do servidor de produção.

    
______ answer202 ___

você pode ativar a compactação de saída global. isso irá gzipar tudo automaticamente se o navegador o suportar. Isso reduz drasticamente o tamanho dos arquivos transferidos, mas aumenta a carga da CPU.

    
______ answer550 ___

Recentemente, falei sobre esse assunto em WordCamp Houston . Todas as recomendações acima são ótimas e o importante é garantir que todo o material do front-end seja totalmente otimizado, para que você possa começar a trabalhar nos problemas de desempenho do cache e do servidor.

A renderização progressiva fará com que suas páginas pareçam mais rápidas, pois o usuário verá o conteúdo da página antes de ser totalmente carregado. Para fazer isso, certifique-se de que qualquer js de bloqueio esteja na parte inferior da página e que o css esteja no topo.

Além disso, se você usar muitos botões de mídia social, poderá personalizar os scripts para que sejam carregados em um iframe depois que a página estiver totalmente carregada. Eu escrevi um tutorial sobre como fazer isso com o botão Tweet tweet re-tweet (agora obsoleto desde que o Twitter lançou seu próprio botão de retweet), mas ainda pode ser aplicado a outros botões de compartilhamento.

Para o desempenho do servidor, procure o Nginx como um proxy de front-end para conteúdo estático com o Apache lidando com o pesado PHP e MySQL.

    
______ answer4416 ___

Como ninguém mencionou ainda, uma das etapas mais importantes para melhorar o desempenho do servidor em conjunto com qualquer configuração LAMP seria alternar para o thread de trabalho do apache e o mod_fcgid.

Isso liberou 500 MB de memória no meu servidor privado virtual.

    
______ answer166025 ___

Guia para verificar a lentidão do plug-in

Existe um plugin muito simples chamado Page Load Time , que adiciona temporizador para o rodapé da sua página. Na verdade, são apenas quatro linhas de código:

%pre%

Então:

  1. Crie uma planilha
  2. Listar todos os seus plugins ativos e colocá-los lá
  3. Atualize a página três vezes observando o tempo de carregamento da página a cada turno
  4. Percorra seus plugins, um por um, desativando-os
  5. Repita o passo 3
  6. Anote a ordem em que você desativou os plug-ins

Sua planilha deve ser parecida com

%pre%

Então, se depois de desativar um plugin o tempo de resposta da página aumentar significativamente, você poderá ver se consegue evitar esse plugin.

Eu encontrei dois plugins que causaram 'significativo' retardar mqtranslate e (o bastante antigo, mas bom) Multi-level Plugin de Navegação .

    
______ answer246382 ___

Fique com o plug-in W3 Total Cache para funcionalidade de cache no WordPress. Habilite o cache de páginas e o cache do banco de dados na página de configurações do plugin. Certifique-se de escolher 'Cache PHP Alternativo (APC / APCu)' como o mecanismo de armazenamento em cache. NÃO habilite nenhuma redução no W3 Total Cache, pois há muitas chances de você quebrar a aparência e / ou a funcionalidade do seu site. Nós vamos deixar isso para Cloudflare.

Quando terminar de configurar o restante das funcionalidades do plug-in, configure o Cloudflare para o seu site. Certifique-se de ativar o Cloudflare nas configurações do W3 Total Cache também em "Extensões".

O Cloudflare é uma Content Delivery Network que armazena em cache todo o conteúdo estático (arquivos de imagem, CSS, JS, documentos, etc.) do seu site e o veicula para seus visitantes a partir de seus servidores globais. Isso pode ajudar a acelerar os tempos de carregamento da página e reduzir a carga no seu servidor. Para obter uma lista dos tipos de arquivo armazenados em cache pelo checkout do Cloudlfare esta lista . Além disso, a Cloudflare tem um plano gratuito.

No Cloudflare, defina o nível de armazenamento em cache como padrão e defina a expiração do cache do navegador para algo maior que 20 horas. Ative Always Online ™ para que, mesmo que o seu servidor fique inativo, o Cloudflare sirva as páginas estáticas do seu site a partir do seu cache. Também ative seu recurso de redução automática (lembre-se porque solicitei que você não ativasse a redução é W3 Total Cache? Porque o Cloudflare melhora!) Em seguida, configure o Rocket Loader ™ como automático.

Veja um trecho do que o Rocket Loader faz:

  • Diminuindo o número de solicitações de rede agrupando JavaScript arquivos, mesmo recursos de terceiros, para evitar lentidão na página renderização.

  • Assincronizando scripts de forma assíncrona, incluindo scripts de terceiros, para que você que eles não bloqueiam o conteúdo da sua página do carregamento. imediatamente.

  • Fazendo cache de scripts localmente (usando LocalStorage, disponível na maioria dos navegadores e smart phones) para que eles não sejam revistos, a menos que necessário.

Mais informações podem ser encontradas aqui .

Se possível, mude para o framework Genesis para WordPress, porque eles estão limpos sem qualquer inchaço. Gênesis foi construído com velocidade e SEO em mente. Eu próprio testei e as minhas pontuações no PageSpeed foram boas. Além disso, se você estiver usando o Genesis, não se esqueça de ativar o cache de fragmentos nas configurações do W3 Total Cache.

Desde que você está usando o Cloudlfare como um CDN, é possível usar um plug-in como o ' Imagify ' ou ' Compress JPEG & Imagens PNG 'da TingPNG para comprimir suas imagens. Ambos são plugins gratuitos disponíveis no repositório de plugins do WordPress.org. Além disso, o Imagify suporta o poderoso algoritmo de compressão com perdas.

Por fim, instale o plug-in ' Remover seqüências de consulta de recursos estáticos ' do repositório do WordPress para remover as strings de consulta de recursos estáticos, como CSS & Arquivos JS. Isso ocorre porque os recursos com um “?” Ou “&” na URL não são armazenados em cache por alguns servidores de cache de proxy (lembre-se, o Cloudflare também é um servidor de cache de proxy).

Em seguida, instale o plug-in ' Usar bibliotecas do Google '. Este plug-in permite que o seu site WordPress use o CDN da biblioteca AJAX do Google, em vez de veicular esses arquivos diretamente da sua instalação do WordPress.

Alguns dos benefícios são:

  • Aumenta a chance de um usuário já ter esses arquivos armazenados em cache.
  • Retira a carga extra do seu servidor.
  • Usa versões compactadas das bibliotecas (quando disponíveis).
  • Os servidores do Google são configurados para negociar compactação HTTP com o solicitando o navegador.

Por último, mas não menos importante, use o plugin ' WP-Optimize ' de Ruhani Rabin para limpar e otimizar seu banco de dados.

Espero que isso responda à sua pergunta em relação à otimização do WordPress para reduzir a carga do servidor.

    
___
por Annika Backstrom 12.08.2010 / 12:44
fonte
8

Além de usar um plug-in de cache de disco como o wp-cache, coloque seu blog em um volume de host que tenha a propriedade "noatime" configurada nele. Caso contrário, use o SSH no seu host (se o seu provedor de hospedagem fornecer isso) e rotineiramente execute este comando em seus arquivos em intervalos de alguns dias:

chattr -R +A ~/*

O ~ / * significa "meus arquivos sob meu diretório pessoal". Você pode mudar esse caminho como quiser. Você também pode configurá-lo em um cron job no cpanel, se o seu provedor de hospedagem fornecer isso.

Para mais informações sobre a propriedade atime, consulte this . Ele acelera muito o desempenho de leitura de disco do Linux.

Às vezes, seu site está sendo atacado por aranhas. Você pode usar uma ferramenta como SpyderSpanker ou Chennai Central para filtrar as aranhas que não ajudam a trazer mais page rank para o seu site e apenas retardá-lo, e então estrangular boas aranhas (como Google, Bing, etc.) enviando aleatoriamente Mensagens HTTP 304 Não Modificadas.

Outra coisa que vejo é apenas plugins mal escritos. Se você aprender como fazer plugins, começará a ver como alguns plugins são ineficientemente codificados ou até mesmo encontrar timebombs, como uma tabela de banco de dados que é preenchida e nunca limpa, armazenando coisas como dados de conexão de entrada.

Além de todas as outras soluções aqui, você também pode criar um farm da web do WordPress hospedando-o em vários PCs de nó da web que se conectam a um único banco de dados e um único volume de disco (como um volume montado sobre NFS). Confira Ultra Monkey para saber como fazer isso acontecer.

    
por Volomike 18.08.2010 / 22:02
fonte
7

Algumas respostas do topo da minha cabeça:

1) Minimize o número de solicitações HTTP que o navegador precisa fazer ao seu host concatenando JavaScript e CSS sempre que possível / prático.

2) Descarregue o máximo possível de sua imagem / mídia veiculada para CDNs de terceiros, especialmente se você estiver usando hospedagem compartilhada.

3) Tente reduzir o número de postagens que você está exibindo na primeira página para reduzir o tempo total de renderização.

3a) Tente usar um tema que apresente algumas postagens em destaque na primeira página e todas as outras postagens mais antigas como trechos.

    
por ZaMoose 18.08.2010 / 22:51
fonte
6

O armazenamento em cache do WordPress Menu também oferece um aumento de desempenho. Especialmente se você tiver muitas páginas ou uma gigantesca estrutura de menu, isso deve ser considerado.

Faça isso em duas etapas fáceis. Primeiro, crie uma função que obtenha ou crie o menu, em vez de chamar wp_nav_menu diretamente.

function get_cached_menu( $menuargs ) {

    if ( !isset( $menuargs['menu'] ) ) {

        $theme_locations = get_nav_menu_locations();
        $nav_menu_selected_id = $theme_locations[$menuargs['theme_location']];
        $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' );
        $transient = 'menu_' . $termslug->slug . '_transient';

    } else {

        $transient = 'menu_' . $menuargs['menu'] . '_transient';

    }


    if ( !get_transient( $transient ) ) { // check if the menu is already cached

        $menuargs['echo'] = '0'; // set the output to return
        $this_menu = wp_nav_menu( $menuargs ); // build the menu with the given $menuargs
        echo $this_menu; // output the menu for this run
        set_transient( $transient, $this_menu ); // set the transient, where the build HTML is saved

    } else {

        echo get_transient( $transient ); // just output the cached version

    }

}

Em seu tema, substitua o wp_nav_menu s por get_cached_menu . Agora, toda vez que o menu é chamado, você tem uma Databasequery em vez de toda a Menubuilding.

Os menus não mudam com frequência, mas você também precisa se conectar à ação wp_update_nav_menu para excluir os antigos transientes.

Faça assim:

add_action('wp_update_nav_menu', 'my_delete_menu_transients');

function my_delete_menu_transients($nav_menu_selected_id) {

    $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' );

    $transient = 'menu_' . $termslug->slug . '_transient';

    delete_transient( $transient ); 

}

O menu será gerado na próxima vez que a página for chamada - e usará a versão em cache até que alguém atualize o menu novamente.

Versão atualizada

Obrigado @helgatheviking por apontar um erro entre lesmas e IDs. Eu atualizei as funções para que funcione com theme_position e menu (para uma chamada direta do menu).

Os menus são sempre salvos com o nome do Menu, não a posição no Tema.

    
por fischi 27.12.2012 / 10:59
fonte
5

Use uma classe de banco de dados que é aparada para otimização. Fizemos boas experiências com o próprio código para reduzir o uso de memória e a velocidade de acesso ao banco de dados. Além disso, você pode otimizar a estrutura do banco de dados por meio de pequenas alterações que fazem muito também.

Parte do código de classe do banco de dados pode ser encontrado no trac do wordpress, ele não foi incluído no núcleo ( Ticket # 11799 e relacionado ).

    
por hakre 18.08.2010 / 10:46
fonte
4

Para um site altamente veiculado, você deve ajustar todos os buffers do MySQL para o conteúdo que está em vigor agora. Independentemente da versão do WordPress, A camada MySQL pode ter sua configuração computada .

Na verdade, se você tiver dados do InnoDB sem ativar o innodb_file_per_table, você precisa limpar o InnoDB segmentando cada tabela em seu próprio espaço de tabela física . É possível fazer um ajuste decente do MySQL mesmo se você tiver um hardware limitado . Existem muitos cenários para fazer tais otimizações do InnoDB .

IMHO, você não pode planejar boas configurações para my.cnf sem saber a quantidade de dados para configurar. Você teria que carregar periodicamente um conjunto de dados atual da produção em um ambiente de preparação, executar otimizações e obter os números para configurar no my.cnf do servidor de produção.

    
por RolandoMySQLDBA 16.04.2011 / 00:09
fonte
3

você pode ativar a compactação de saída global. isso irá gzipar tudo automaticamente se o navegador o suportar. Isso reduz drasticamente o tamanho dos arquivos transferidos, mas aumenta a carga da CPU.

    
por Scott M. 12.08.2010 / 14:27
fonte
3

Recentemente, falei sobre esse assunto em WordCamp Houston . Todas as recomendações acima são ótimas e o importante é garantir que todo o material do front-end seja totalmente otimizado, para que você possa começar a trabalhar nos problemas de desempenho do cache e do servidor.

A renderização progressiva fará com que suas páginas pareçam mais rápidas, pois o usuário verá o conteúdo da página antes de ser totalmente carregado. Para fazer isso, certifique-se de que qualquer js de bloqueio esteja na parte inferior da página e que o css esteja no topo.

Além disso, se você usar muitos botões de mídia social, poderá personalizar os scripts para que sejam carregados em um iframe depois que a página estiver totalmente carregada. Eu escrevi um tutorial sobre como fazer isso com o botão Tweet tweet re-tweet (agora obsoleto desde que o Twitter lançou seu próprio botão de retweet), mas ainda pode ser aplicado a outros botões de compartilhamento.

Para o desempenho do servidor, procure o Nginx como um proxy de front-end para conteúdo estático com o Apache lidando com o pesado PHP e MySQL.

    
por Chris_O 19.08.2010 / 08:42
fonte
2

Como ninguém mencionou ainda, uma das etapas mais importantes para melhorar o desempenho do servidor em conjunto com qualquer configuração LAMP seria alternar para o thread de trabalho do apache e o mod_fcgid.

Isso liberou 500 MB de memória no meu servidor privado virtual.

    
por nottinhill 23.11.2010 / 02:21
fonte
1

Guia para verificar a lentidão do plug-in

Existe um plugin muito simples chamado Page Load Time , que adiciona temporizador para o rodapé da sua página. Na verdade, são apenas quatro linhas de código:

<?php
function ur_pageload_footer() {
    printf(__('Page in %s seconds', 'pageload'), timer_stop());
}
add_action('wp_footer', 'ur_pageload_footer')

Então:

  1. Crie uma planilha
  2. Listar todos os seus plugins ativos e colocá-los lá
  3. Atualize a página três vezes observando o tempo de carregamento da página a cada turno
  4. Percorra seus plugins, um por um, desativando-os
  5. Repita o passo 3
  6. Anote a ordem em que você desativou os plug-ins

Sua planilha deve ser parecida com

+-------+-------+-------+-------+--------+
| Run 1 | Run 2 | Run 3 | Order | Plugin |

Então, se depois de desativar um plugin o tempo de resposta da página aumentar significativamente, você poderá ver se consegue evitar esse plugin.

Eu encontrei dois plugins que causaram 'significativo' retardar mqtranslate e (o bastante antigo, mas bom) Multi-level Plugin de Navegação .

    
por icc97 21.10.2014 / 16:54
fonte
-1

Fique com o plug-in W3 Total Cache para funcionalidade de cache no WordPress. Habilite o cache de páginas e o cache do banco de dados na página de configurações do plugin. Certifique-se de escolher 'Cache PHP Alternativo (APC / APCu)' como o mecanismo de armazenamento em cache. NÃO habilite nenhuma redução no W3 Total Cache, pois há muitas chances de você quebrar a aparência e / ou a funcionalidade do seu site. Nós vamos deixar isso para Cloudflare.

Quando terminar de configurar o restante das funcionalidades do plug-in, configure o Cloudflare para o seu site. Certifique-se de ativar o Cloudflare nas configurações do W3 Total Cache também em "Extensões".

O Cloudflare é uma Content Delivery Network que armazena em cache todo o conteúdo estático (arquivos de imagem, CSS, JS, documentos, etc.) do seu site e o veicula para seus visitantes a partir de seus servidores globais. Isso pode ajudar a acelerar os tempos de carregamento da página e reduzir a carga no seu servidor. Para obter uma lista dos tipos de arquivo armazenados em cache pelo checkout do Cloudlfare esta lista . Além disso, a Cloudflare tem um plano gratuito.

No Cloudflare, defina o nível de armazenamento em cache como padrão e defina a expiração do cache do navegador para algo maior que 20 horas. Ative Always Online ™ para que, mesmo que o seu servidor fique inativo, o Cloudflare sirva as páginas estáticas do seu site a partir do seu cache. Também ative seu recurso de redução automática (lembre-se porque solicitei que você não ativasse a redução é W3 Total Cache? Porque o Cloudflare melhora!) Em seguida, configure o Rocket Loader ™ como automático.

Veja um trecho do que o Rocket Loader faz:

  • Diminuindo o número de solicitações de rede agrupando JavaScript arquivos, mesmo recursos de terceiros, para evitar lentidão na página renderização.

  • Assincronizando scripts de forma assíncrona, incluindo scripts de terceiros, para que você que eles não bloqueiam o conteúdo da sua página do carregamento. imediatamente.

  • Fazendo cache de scripts localmente (usando LocalStorage, disponível na maioria dos navegadores e smart phones) para que eles não sejam revistos, a menos que necessário.

Mais informações podem ser encontradas aqui .

Se possível, mude para o framework Genesis para WordPress, porque eles estão limpos sem qualquer inchaço. Gênesis foi construído com velocidade e SEO em mente. Eu próprio testei e as minhas pontuações no PageSpeed foram boas. Além disso, se você estiver usando o Genesis, não se esqueça de ativar o cache de fragmentos nas configurações do W3 Total Cache.

Desde que você está usando o Cloudlfare como um CDN, é possível usar um plug-in como o ' Imagify ' ou ' Compress JPEG & Imagens PNG 'da TingPNG para comprimir suas imagens. Ambos são plugins gratuitos disponíveis no repositório de plugins do WordPress.org. Além disso, o Imagify suporta o poderoso algoritmo de compressão com perdas.

Por fim, instale o plug-in ' Remover seqüências de consulta de recursos estáticos ' do repositório do WordPress para remover as strings de consulta de recursos estáticos, como CSS & Arquivos JS. Isso ocorre porque os recursos com um “?” Ou “&” na URL não são armazenados em cache por alguns servidores de cache de proxy (lembre-se, o Cloudflare também é um servidor de cache de proxy).

Em seguida, instale o plug-in ' Usar bibliotecas do Google '. Este plug-in permite que o seu site WordPress use o CDN da biblioteca AJAX do Google, em vez de veicular esses arquivos diretamente da sua instalação do WordPress.

Alguns dos benefícios são:

  • Aumenta a chance de um usuário já ter esses arquivos armazenados em cache.
  • Retira a carga extra do seu servidor.
  • Usa versões compactadas das bibliotecas (quando disponíveis).
  • Os servidores do Google são configurados para negociar compactação HTTP com o solicitando o navegador.

Por último, mas não menos importante, use o plugin ' WP-Optimize ' de Ruhani Rabin para limpar e otimizar seu banco de dados.

Espero que isso responda à sua pergunta em relação à otimização do WordPress para reduzir a carga do servidor.

    
por Antony Agnel 16.11.2016 / 12:17
fonte