taviroquai Posted April 29, 2013 at 07:01 PM Report #505227 Posted April 29, 2013 at 07:01 PM 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.
yoda Posted April 29, 2013 at 10:07 PM Report #505239 Posted April 29, 2013 at 10:07 PM (edited) Se é cache de imagens, eu usava o header do request da imagem apenas. Edited April 29, 2013 at 10:07 PM by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction
taviroquai Posted April 29, 2013 at 10:58 PM Author Report #505249 Posted April 29, 2013 at 10:58 PM 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...
mjamado Posted April 29, 2013 at 11:14 PM Report #505254 Posted April 29, 2013 at 11:14 PM 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.
taviroquai Posted April 29, 2013 at 11:29 PM Author Report #505259 Posted April 29, 2013 at 11:29 PM 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)...
taviroquai Posted April 30, 2013 at 12:34 AM Author Report #505265 Posted April 30, 2013 at 12:34 AM 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! 🙂
brunoais Posted April 30, 2013 at 02:51 PM Report #505323 Posted April 30, 2013 at 02:51 PM 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%.
yoda Posted April 30, 2013 at 03:49 PM Report #505331 Posted April 30, 2013 at 03:49 PM Hmm... acho que está mais rápido recorrendo a ficheiros... agora tenho que arranjar estratégia para apagar as imagens expiradas... Simula um garbage collector semelhante ao das sessões para as imagens. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
taviroquai Posted May 1, 2013 at 11:18 PM Author Report #505539 Posted May 1, 2013 at 11:18 PM @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.
taviroquai Posted May 1, 2013 at 11:39 PM Author Report #505543 Posted May 1, 2013 at 11:39 PM 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...
brunoais Posted May 2, 2013 at 08:02 AM Report #505555 Posted May 2, 2013 at 08:02 AM (edited) 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 May 2, 2013 at 08:10 AM 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%.
taviroquai Posted May 3, 2013 at 10:53 PM Author Report #505775 Posted May 3, 2013 at 10:53 PM 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...
brunoais Posted May 4, 2013 at 08:00 AM Report #505789 Posted May 4, 2013 at 08:00 AM 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%.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now