Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

taviroquai

Sistema de cache de images

Recommended Posts

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.

Share this post


Link to post
Share on other sites
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...

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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)...

Share this post


Link to post
Share on other sites
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! :)

Share this post


Link to post
Share on other sites
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%.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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...

Share this post


Link to post
Share on other sites
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.

Edited by 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%.

Share this post


Link to post
Share on other sites
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...

Share this post


Link to post
Share on other sites
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%.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.