Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

taviroquai

Sistema de cache de images

Mensagens Recomendadas

taviroquai    56
taviroquai

Olá a todos,

Gostaria de saber qual será a melhor forma de fazer cache de imagens com PHP. Sei que podemos usar o memcache ou APC mas da vossa experiência qual será o melhor método em termos de eficiência.

Imaginemos o seguinte cenário...

1. O PHP recebe o pedido de uma imagem. As imagens podem ter tamanhos entre 1k a 20k. Considerando cerca de 1000 imagens diferentes (umas mais pedidas que outras).

2. Os pedidos são na forma de coordenadas X, Y, Z.

3. O PHP recebe o pedido e encaminha (o PHP serve de proxy) para o servidor de mapas que devolve a imagem.

4. O PHP devolve a imagem para o browser.

Para este sistema de cache, no passo 3, se a imagem existir em cache, devolve logo para o browser e não chega a fazer o pedido ao servidor de mapas.

Obrigado.


Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    56
taviroquai

Se é cache de imagens, eu usava o header do request da imagem apenas.

Sim, também estou a lançar os headers com algum tempo para que o browser também faça uso da cache... ou seja:

Caso 1 - 1º cliente e 1º pedido - PHP pede a imagem ao servidor de mapas, guarda a imagem na cache (APC) e devolve a imagem com headers de cache

Caso 2 - 1º cliente e 2º pedido - o browser não pede as imagens porque já as tem em cache

Caso 3 - 2º cliente (e todos os seguintes) e 1º pedido - o PHP devolve a imagem que tem em cache (não faz pedido ao servidor de mapas)

Caso 4 - browser limpou a cache, ou cache expirou - idem. ao caso 3

Neste momento estou a usar o APC mas se tiverem melhores resultados com o memcache (ou outra coisa) gostava de saber...


Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mjamado    42
mjamado

Porque é que não guardas simplesmente a imagem no sistema de ficheiros?

Poupas na memória da máquina, poupas no processamento do PHP e é bastante mais rápido - embora talvez tenhas que usar algo melhor que o Apache, o nginx, por exemplo...


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    56
taviroquai

Porque é que não guardas simplesmente a imagem no sistema de ficheiros?

Poupas na memória da máquina, poupas no processamento do PHP e é bastante mais rápido - embora talvez tenhas que usar algo melhor que o Apache, o nginx, por exemplo...

Pois tenho que fazer uns testes usando ficheiros... assim como está consigo dar respostas na ordem dos 5 a 15 ms para imagens de ~20k a ler da cache APC (incluindo o tempo de processamento do PHP)...


Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    56
taviroquai

Hmm... acho que está mais rápido recorrendo a ficheiros... agora tenho que arranjar estratégia para apagar as imagens expiradas...

Vou continuar a testar... obrigadão! :)


Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brunoais    67
brunoais

O que é isso de imagens expiradas?

Agora parece que estás a resolver um problema diferente do que aparentas pelo 1º post...


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    56
taviroquai

@Bruno

As imagens serão guardadas em cache durante um certo tempo... por isso disse imagens expiradas... como é óbvio, o que expira é o tempo em que a imagem é guardada em cache...

@Yoda

Vou ver como se faz isso... obrigado pela dica.


Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    56
taviroquai

Ok percebi o gc... limpar as imagens é um bocado chato porque terei que eliminar com base no tempo em que a imagem foi criada e terei que calcular 1 a 1... por isso usando a probabilidade de o fazer sera baixa... ou entao uso crons mas prefiro ter essa operação no mesmo sitio onde crio as imagens (no php) por isso vou experimentar usar a probabilidade...


Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brunoais    67
brunoais

Podes, de vez em quando, iterar por todos os elementos que estão no APC. Os que estiverem expirados são automaticamente apagados.

A frequência em que fazes isso, depende de quanto uso achas que o cache irá ter.

http://php.net/manual/en/class.apciterator.php

Edit:

meh. Estive a pesquisar mais um pouco, parece que o iterador já n apaga os elementos que expiraram. Isto n é info confirmada, mas é o que encontrei no num cometário no manual.

Editado por brunoais

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
taviroquai    56
taviroquai

Estou a tentar perceber se usando ficheiros em vez de APC fica mais rapido (parece-me que sim). Assim sendo para apagar tenho que me basear na data de criação de cada ficheiro...


Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brunoais    67
brunoais

O sistema operativo já tem um cache do disco aceitável, se fosses usar APC seria no servidor que está à frente do utilizador, não nos que estão atrás. Só assim é que ganhas velocidade. Fora isso, não há grande coisa de vantagens em usar apc para cache de imagens. Os headers HTTP + o cache do HDD serve para a maior parte dos casos.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.