tadarank afiliados

Mostrando postagens com marcador dicas http. Mostrar todas as postagens
Mostrando postagens com marcador dicas http. Mostrar todas as postagens

13 julho, 2010

Introduçãozinha sobre Cache web e no servidor

Um brodi perguntou estes dias sobre esquemas de cache pra deixar a página mais rápida.
Vou tentar explicar de forma resumida e rápida sobre cache em páginas web.
O termo cache designa o ato de guardar uma cópia de algo complexo ou lento para que se possa ter acesso mais rápido a este "algo complexo" futuramente. O cache web pode ser ativado em "várias frentes".
O cache que vou tratar aqui é o "cache web" de páginas web/http, ok? Nada a ver com cache em processador, e outras paradas.

Cache na Frente client

Quando você pede uma página web no seu navegador, ele a exibe, porém , além de exibir, pode ser que ele guarde ela (ou partes dela) "em cache" para caso você acesse ela novamente no futuro. Assim ele exibirá a página mais rápido pois partes dela (como imagens, scripts) estavam guardadas em seu cache interno e não precisaram ser pedidas novamente na rede.
No Firefox do Windows XP, o cache geralmente fica em Documents and Settings\nome_user\Configurações locais\Dados de aplicativos\Mozilla\Firefox\Profiles
Esta foi a "frente client" do cache (conhecido como "cache web") e ela pode ser exercida não só pelo navegador, mas por servidores proxy também, por exemplo.
Como implementar este cache web?
1) Através de meta tags no HTML (meta expires, cache-control, pragma)
2) OU headers enviados pelo script php/asp/jsp (também expires, cache-control, pragma)
3) OU header enviados diretamente pelo servidor web http (apache/IIS/etc) (novamente expires, cache-control, pragma).
Não vou detalhar cada um aqui pois não é o objetivo do post. Usa o google :P
Veja um detalhamento maior sobre cache web aqui, E aqui também (em inglês) Cache via header PHP

Cache na Frente server-side

Já a "frente server-side" atua no servidor web (cache server), pra ajudar o bixo a enviar a página pro navegador com maior rapidez.
Exemplo: Imagine que o navegador pede uma página que exibe uma lista de produtos e preços que está no banco de dados.
O coitado do servidor web terá que ligar o interpretador Php (ou asp ou outro), conectar com o banco de dados, fazer a consulta sql, aguardar o server sql processar a consulta, pegar os dados, formatar em html e só então devolver pro navegador.
Agora imagine que, além da lista de produtos, o server tenha que pegar também o menu do site no banco de dados, as últimas postagens, etc. Será um monte de consultas que deixarão o site lento pra caramba.
Agora imagine que o servidor é inteligente e, além de devolver o html pro navegador, ele também crie um arquivo com este html.
Assim, da próxima vez que algum navegador pedir a mesma página ele não precise fazer aquele monte de consultas sql e talz. É só mandar o arquivo html que estava salvo pro navegador.
Hahá! Seu server ficará aliviado e seu site mais rápido. Simples né?
Nem tanto hehe. Existem sistemas de cache server onde os caras guardam na memória RAM e não em arquivos pra ficar mais rápido ainda (MEMcached). Outros guardam só as consultas sql, outros guardam os arquivos em módulos (módulo menu, módulo option_cidades), etc.
Vai da sua imaginação e do seu sistema...
"Mas, sr mico, e se o conteúdo da página mudar?"
- Bem, é por isso que, nos dois casos citados acima existe o conceito de timeout. O programador HTML/PHP irá especificar um tempo em que o cache será válido.
"Mas, sr mico, no meu site/sistema o sistema de fornecedores cadastra produtos a todo minuto, um sistema de cache não ajudaria muito pois o timeout teria que ser muito pequeno"
- Se seu site tem muitos acessos por minuto, mesmo um cache com validade de 30seg seria de grande ajuda. Uma consulta sql consome muito tempo e processamento. O primeiro visitante destes 30seg iria esperar um pouco, mas o segundo e o terceiro iriam agradecer a velocidade.
Uma implementação simples de cache server em arquivos pode ser vista aqui.
Outras em ASP aqui, Outras em PHP aqui

Conclusão

Pra sites com muitos acessos, sistema de cache são uma puta salvação. E você ainda pode implementar os 2 sistemas de cache em conjunto.
Eu já economizei bastante em servidor web implementando sistemas de cache. Princpalmente em blogs com o plugin super cache do wordpress (e recentemente o db cache reloaded graças ao Janio).
Na época do Mwords, o cache dava uma salvada boa nas trocentas requisições por segundo que tinha.
Devem existir outras frentes, outros modelos, outras formas... Se você souber lembre este mico através dos comentários. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

20 novembro, 2008

Redirecionamentos http 301 em várias linguagens/servidores

Como alguns já sabem, a comunidade/fórum de desenvolvimento web ievolution mudou seu nome para Webly.

Foi necessário, então, fazer um redirecionamento de domínio para apontar para o novo Webly (webly.com.br). O cpanel cuidou de tudo direitinho, os users do fórum mal perceberam, não perdemos links e nem pagerank, graças ao bom e velho redirecionamento http 301.

Existem inúmeros outros códigos de redirecionamento, mas o dr. 301 (moved permanently) se dá melhor com buscadores.

Apesar do Cpanel ter feito o serviço perfeitamente, eu, como um bom nlerd que sou, dei uma pesquisada básica sobre o assunto e achei um documento interessante que mostra redirecionamentos em várias linguagens/servidores: IIS, Apache, PHP, JSP, ASP, Coldfusion, CGI PERL, Ruby.

No fim, eu mostro também como redirecionar via HTML através do META refresh, algo não muito recomendado.

Apache 301 redirect (htaccess)

Vá no seu htaccess e coloque:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L] 

IIS 6 - 301 redirect

Segundo a MS

  • Internet Services Manager (Geranciador do IIS) > botão direito na pasta a ser redirecionada
  • Clique na guia Diretório Base, Diretório Virtual ou Diretório
  • Em O conteúdo deste recurso deve vir de, clique em Um redirecionamento para uma URL
  • Na caixa Redirecionar para, digite a URL do diretório ou site de destino. Por exemplo, para redirecionar todas as solicitações de arquivos do diretório Catalog para o diretório NewCatalog, digite /NewCatalog.

Redirecionamento PHP

<?
    Header( "HTTP/1.1 301 Moved Permanently" );
    Header( "Location: http://www.new-url.com" );
?>

Redirecionamento ASP

<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.new-url.com/"
%>

ASP.net 301 redirect

<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location","http://www.new-url.com");
}
</script>

JSP (Java) Redirect

<%
response.setStatus(301);
response.setHeader( "Location", "http://www.new-url.com/" );
response.setHeader( "Connection", "close" );
%>

Redirecionamento em Ruby

def old_action
headers["Status"] = "301 Moved Permanently"
redirect_to "http://www.new-url.com/"
end

Coldfusion Redirect

<.cfheader statuscode="301" statustext="Moved permanently"> 
<.cfheader name="Location" value="http://www.new-url.com">

CGI PERL Redirect

$q = new CGI;
print $q->redirect("http://www.new-url.com/"); 

Via html meta tag

<meta http-equiv="refresh" content="0;url=http://example.com/" />

Por hoje é só. Não tinha nada melhor pra eu postar hehhhee

Redirects and Search engines Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

Resultado! Concursos