Opção mais rápida: Redirecionar via PHP para PHP ou redirecionar o rewrite mod do Apache para PHP?

1

Eu quero determinar se usar o .htaccess mod reescrever do Apache é uma maneira mais rápida de redirecionar para um arquivo PHP, comparado ao redirecionamento de um arquivo PHP para outro, usando a função principal de redirecionamento de cabeçalho do PHP.

Eu olhei em volta e não consegui encontrar nada sobre esse assunto. Qualquer ajuda seria apreciada.

    
por r.crandall 27.11.2009 / 23:18

4 respostas

4

Note: I assume that by "redirect" you mean a rewrite rule which doesn't actually use the [R] flag, but instead "redirects" a request to a different PHP file - e.g. with no flags at all or an [L] flag.

If this assumption is wrong, then please have a look at my "Note on performance" argument, which still holds.

A regra de .htaccess será definitivamente mais rápida!

Veja por que:

  1. usando a regra .htaccess : quando um pedido chegar ao Apache, ele verificará o .htaccess para ver se algo precisa ser feito com essa solicitação; percebendo uma regra de reescrita, ela redirecionará a solicitação para o PHP, e o visitante do site obterá imediatamente o resultado final
  2. usando o PHP header : a requisição vem, é processada pelo Apache, então dada ao PHP, então o PHP envia ao navegador do visitante um cabeçalho de redirecionamento de página, o navegador envia outra requisição, o Apache processa, para PHP, e só depois de tudo que o visitante finalmente conseguir o que ele queria!

Observação sobre o desempenho : em qualquer cenário (mesmo em uma LAN gigabit), a opção 1 acima será mais rápida. Expressões regulares podem ser lentas, mas o Apache já é um programa em C na memória, e o PHP é uma linguagem interpretada, que precisa ler e carregar o arquivo de script antes de processá-lo. Assim, eu realmente esperaria um melhor desempenho da regra de reescrita do Apache. O principal fator, no entanto, é uma solicitação de resposta HTTP extra para o método 2.

Se você insistir em fazer isso com o PHP, considere isto:

  1. armazena em cache toda a saída gerada em seu aplicativo PHP
  2. se você detectar uma condição de redirecionamento - destrua a saída em cache e, em seguida,
  3. inclua o arquivo PHP necessário para gerar uma nova saída - ou chame uma função que produzirá a saída desejada caso você precise de algo diferente

Essa abordagem também será mais rápida do que a header -based.

    
por 27.11.2009 / 23:55
1

Meu instinto me diz que o htaccess teria para ser mais rápido, mas não há substituto para realmente compará-lo em seu ambiente específico.

    
por 27.11.2009 / 23:49
1

Uma coisa a ter em mente é que o uso de arquivos .htaccess atrasa tudo (se a configuração estiver ativada). Colocar sua reescrita em um dos seus arquivos .conf para o Apache (httpd.conf ou virtual-hosts.conf) e depois definir AllowOverride none será ainda mais rápido.

Quanto ao php vs mod_rewrite, é difícil dizer. Ambos são tão rápidos que duvido que importe.

    
por 28.11.2009 / 00:21
1

Quanto ao desempenho, você deve considerar dois aspectos dele. Primeiro, há o desempenho do processamento no servidor e, em segundo lugar, o desempenho que os usuários finais experimentam.

Se você usar algum tipo de redirecionamento, seja pelo PHP ou pelo Redirecionamento do Apache (que pode estar no arquivo .htaccess ou de configuração do Apache, o cliente final deve primeiro aguardar a primeira resposta (redirecionar) e enviar outra solicitação a esse URL antes de finalmente receber a resposta desejada.

Se o desempenho desse usuário final for importante para você (por exemplo, se seu público-alvo estiver na China ou algo assim), não use redirecionamento (nem PHP nem Apache), mas sim reescreva a solicitação original para que o usuário receba resposta correta no primeiro pedido.

    
por 09.08.2015 / 09:37