SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
Fabiano Weimar dos Santos [Xiru]
xiru@xiru.org
Faça seu portal voar usando o
plone.app.caching
Faça seu site voar com plone.app.caching 2
Roteiro
● Um pouco sobre mim...
● Cache É importante?
● Histórico
● plone.app.caching
● Demo
Faça seu site voar com plone.app.caching 3
Um pouco sobre mim...
● Os amigos me chamam de Xiru
● Já escrevi algumas linhas de código do
Plone, Archetypes e alguns Plone Products...
● Atualmente
● Ministro cursos a distância sobre Plone,
Segurança e Infraestrutura
● Sysadmin do provedor PyTown.com
● Consultor do Programa das Nações Unidas para
o Desenvolvimento - PNUD
Faça seu site voar com plone.app.caching 4
Cache É Importante?
● Cache é MUITO
importante se você
quer fazer seu site
“voar”
● Não importa a
tecnologia:
nenhum site
dinâmico sobrevive
sem cache
Faça seu site voar com plone.app.caching 5
Sobre o que eu não vou falar...
● A eficiência de um sistema depende de
infraestrutura
● Eu não vou falar sobre
● Plone + Squid
● Plone + Varnish
● Plone + Varnish + nginx
● memcached
● … mas você deve preocupar-se em utlizá-los
Faça seu site voar com plone.app.caching 6
Histórico
● O Plone sempre teve suporte a cache!
● HTTP Cache Manager “/HTTPCache”
● global_cache_settings
● Problemas:
● Elementos não eram associados com o
HTTPCache
● global_cache_settings padrão não fazia cache
compartilhado
Faça seu site voar com plone.app.caching 7
global_cache_settings
<metal:cacheheaders define-macro="cacheheaders">
<metal:block tal:content="structure python:here.enableHTTPCompression(request=request,
debug=0)" />
<metal:block tal:define="dummy python:request.RESPONSE.setHeader('Content-Type',
'text/html;;charset=%s' % charset)" />
<metal:block tal:define="dummy python:request.RESPONSE.setHeader('Content-Language', lang)" />
<metal:block tal:condition="python: not here.portal_membership.isAnonymousUser()">
<metal:block tal:define="dummy python:request.RESPONSE.setHeader('Expires', 'Sat, 1 Jan 2000
00:00:00 GMT')" />
<metal:block tal:define="dummy python:request.RESPONSE.setHeader('Cache-Control', 'private, no-
cache, no-store, must-revalidate, post-check=0, pre-check=0')" />
</metal:block>
<metal:block tal:condition="python: here.portal_membership.isAnonymousUser()">
<metal:block tal:define="dummy python:request.RESPONSE.setHeader('Expires', (DateTime()
+1.0/24).toZone('GMT').rfc822().replace('+0000', 'GMT'))" />
<metal:block tal:define="dummy python:request.RESPONSE.setHeader('Cache-Control', 'max-age=0,
s-maxage=3600')" />
</metal:block>
</metal:cacheheaders>
Faça seu site voar com plone.app.caching 8
CacheFu “moleque”
● Uso de “monkey patches” para associar
imagens e arquivos com o HTTPCache
● global_cache_settings ajustado para
cache compartilhado por 10 minutos
(sem PURGE)
● Em 2005, diversos bugs no Zope tiveram
que ser corrigidos para isso funcionar
Faça seu site voar com plone.app.caching 9
CacheFu
● Projeto iniciado como uma
interface de configuração
dos “monkey patches”
● Colaboração entre diversos
desenvolvedores
● Passou a armazenar
configurações de
cabeçalhos e regras de
cache numa “tool”
Faça seu site voar com plone.app.caching 10
CacheFu
● Foi a melhor solução para
gerenciamento de cache
até o Plone 3.3.5
● Arquitetura
“problemática” por
armazenar as
configurações no ZODB
● Deixou de ter releases a
partir do Plone 4.0
Faça seu site voar com plone.app.caching 11
plone.app.caching
● Sucessor do CacheFu a partir do Plone 4.0
● Utiliza recursos do Zope Component
Architecture – ZCA
● Armazena configurações no portal_setup
● Exportação e importação de configurações
utilizando XML
● Plone Products podem (e devem) empacotar
configurações
Faça seu site voar com plone.app.caching 12
plone.app.caching
● Empacotado no
Plone 4.1!
● Perfis padrão de
cache
● Sem proxy
● Com proxy
● Com proxy e “split-
view”
Faça seu site voar com plone.app.caching 13
Conjuntos de Regras Padrão
● Content feed
● RSS dinâmico
● Conteúdo de Imagens e Arquivos
● Download de arquivos ou imagens ou
utilizados na visualização de outros conteúdos
● Visualização de Pasta
● Visualização de um objeto com
comportamento de pasta, exibindo diversos
conteúdos
Faça seu site voar com plone.app.caching 14
Conjuntos de Regras Padrão
● Visualização de Conteúdo
● Visualização de um objeto único, que não tem
comportamento de pasta
● Recursos: Arquivos e Imagens
● Inclui arquivos e imagens criados ou personalizados através
da ZMI, aqueles disponibilizados através do portal_skins ou
diretórios registrados no sistema de arquivos
● Arquivos e Imagens Estáveis
● Recursos que não mudam, como CSS, JS e KSS registrados
através de sua respectivas ferramentas
● Podem ter cache para SEMPRE pois, quando um elemento
muda, a URL de acesso também muda
Faça seu site voar com plone.app.caching 15
Operações Cache Padrão
● Sem Cache
● Strong caching
● Cache no navegador e no proxy (padrão: 24 hours).
● Moderate caching
● Cache no navegador que expira automaticamente (o mesmo
que “weak caching”), e cache no proxy (padrão: 24 hours).
● Idealizado para utilizar uma estratégia de PURGE
– Cuidado: pode existir mais de um proxy na rede, não apenas o
Squid/Varnish configurado para essa tarefa
Faça seu site voar com plone.app.caching 16
Operações Cache Padrão
● Weak caching
● Cache no navegador, expirado automaticamente
● Espera um código 304 (“Not Modified”)
● Requer cabeçalhos “Last-Modified” e/ou “e-tags”
● Pode ser combinado com o PageCacheManager
– Cache na memória do Zope do conteúdo da página e
respectivos cabeçalhos
– Pode ser ineficiente em ambientes distribuídos
● Cuidado: validação condicional pode fazer com que
todos os requests sejam enviados para o backend
– Depende do proxy e de como o proxy foi configurado
Faça seu site voar com plone.app.caching 17
Mapeamento Padrão de Regras
e Operações de Cache
without-caching-
proxy
with-caching-proxy with-caching-proxy-
splitviews
itemView weakCaching weakCaching moderateCaching
folderView weakCaching weakCaching moderateCaching
feed weakCaching moderateCaching moderateCaching
file weakCaching moderateCaching moderateCaching
resource strongCaching strongCaching strongCaching
stableResource strongCaching strongCaching strongCaching
Faça seu site voar com plone.app.caching 18
PageCacheManager
● E-tags muito granulares =
explosão combinatória
● E-tags muito abrangentes =
problemas com conteúdo
● Cuidado: ao utilizar a data de
última atualização do
portal_catalog pode tornar o
cache em memória muito
ineficiente
Faça seu site voar com plone.app.caching 19
Demo
Faça seu site voar com plone.app.caching 20
Fabiano Weimar dos Santos
xiru@xiru.org
Twitter @xiru
Obrigado

Mais conteúdo relacionado

Semelhante a Faça seu portal voar usando o plone.app.caching

Escalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxEscalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxSaveincloud
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPAdler Medrado
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Gestão de Conteúdos com Aplicações Instaladas em Servidores
Gestão de Conteúdos com Aplicações Instaladas em ServidoresGestão de Conteúdos com Aplicações Instaladas em Servidores
Gestão de Conteúdos com Aplicações Instaladas em ServidoresFabioMDias
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPressGuga Alves
 
Instalando o WordPress local em qualquer sistema operacional - Anyssa Ferreir...
Instalando o WordPress local em qualquer sistema operacional - Anyssa Ferreir...Instalando o WordPress local em qualquer sistema operacional - Anyssa Ferreir...
Instalando o WordPress local em qualquer sistema operacional - Anyssa Ferreir...Anyssa Ferreira
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátilWanderlei Silva do Carmo
 
Cache em aplicações web
Cache em aplicações webCache em aplicações web
Cache em aplicações webJean Carlo Emer
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHPLuiz Messias
 
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...minastestingconference
 
Poco Bibliotecas C++
Poco Bibliotecas C++Poco Bibliotecas C++
Poco Bibliotecas C++Uilian Ries
 

Semelhante a Faça seu portal voar usando o plone.app.caching (20)

Escalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxEscalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginx
 
Vamos conversar sobre cache
Vamos conversar sobre cacheVamos conversar sobre cache
Vamos conversar sobre cache
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHP
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Gestão de Conteúdos com Aplicações Instaladas em Servidores
Gestão de Conteúdos com Aplicações Instaladas em ServidoresGestão de Conteúdos com Aplicações Instaladas em Servidores
Gestão de Conteúdos com Aplicações Instaladas em Servidores
 
Django
DjangoDjango
Django
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPress
 
Smarty + PHP
Smarty + PHPSmarty + PHP
Smarty + PHP
 
Instalando o WordPress local em qualquer sistema operacional - Anyssa Ferreir...
Instalando o WordPress local em qualquer sistema operacional - Anyssa Ferreir...Instalando o WordPress local em qualquer sistema operacional - Anyssa Ferreir...
Instalando o WordPress local em qualquer sistema operacional - Anyssa Ferreir...
 
Web tools pt-br
Web tools pt-brWeb tools pt-br
Web tools pt-br
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátil
 
Cache em aplicações web
Cache em aplicações webCache em aplicações web
Cache em aplicações web
 
PHP: Como não programar em POG
PHP: Como não programar em POGPHP: Como não programar em POG
PHP: Como não programar em POG
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
 
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
 
Poco Bibliotecas C++
Poco Bibliotecas C++Poco Bibliotecas C++
Poco Bibliotecas C++
 

Mais de Fabiano Weimar

Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)
Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)
Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)Fabiano Weimar
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
Meu Plone Site está lento. O que fazer???
Meu Plone Site está lento. O que fazer???Meu Plone Site está lento. O que fazer???
Meu Plone Site está lento. O que fazer???Fabiano Weimar
 
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo Alheio
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo AlheioPortal SEBRAE - Quando o Plone Gerencia o Conteúdo Alheio
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo AlheioFabiano Weimar
 
Introducao ao sistema de gerenciamento de conteúdo Plone
Introducao ao sistema de gerenciamento de conteúdo PloneIntroducao ao sistema de gerenciamento de conteúdo Plone
Introducao ao sistema de gerenciamento de conteúdo PloneFabiano Weimar
 
Integração de sistemas legados com Plone
Integração de sistemas legados com PloneIntegração de sistemas legados com Plone
Integração de sistemas legados com PloneFabiano Weimar
 
Algoritmos genéticos em python - PyConBrasil 3 (2007)
Algoritmos genéticos em python - PyConBrasil 3 (2007)Algoritmos genéticos em python - PyConBrasil 3 (2007)
Algoritmos genéticos em python - PyConBrasil 3 (2007)Fabiano Weimar
 
Adaptando o Plone para plataformas móveis
Adaptando o Plone para plataformas móveisAdaptando o Plone para plataformas móveis
Adaptando o Plone para plataformas móveisFabiano Weimar
 
Plone Yak Shaving and Bikeshedding
Plone Yak Shaving and BikesheddingPlone Yak Shaving and Bikeshedding
Plone Yak Shaving and BikesheddingFabiano Weimar
 
Otimização de infra estrutura para hospedagem de websites
Otimização de infra estrutura para hospedagem de websitesOtimização de infra estrutura para hospedagem de websites
Otimização de infra estrutura para hospedagem de websitesFabiano Weimar
 
Understanding Plone Security
Understanding Plone SecurityUnderstanding Plone Security
Understanding Plone SecurityFabiano Weimar
 
Tips and Tricks about Plone Development for Mobile Platforms
Tips and Tricks about Plone Development for Mobile PlatformsTips and Tricks about Plone Development for Mobile Platforms
Tips and Tricks about Plone Development for Mobile PlatformsFabiano Weimar
 
Dicas e truques de otimização de websites python
Dicas e truques de otimização de websites pythonDicas e truques de otimização de websites python
Dicas e truques de otimização de websites pythonFabiano Weimar
 
Conhecendo o ubuntu enterprise cloud - UEC
Conhecendo o ubuntu enterprise cloud - UECConhecendo o ubuntu enterprise cloud - UEC
Conhecendo o ubuntu enterprise cloud - UECFabiano Weimar
 
Sistema de protocolo de documentos - SPDO
Sistema de protocolo de documentos - SPDOSistema de protocolo de documentos - SPDO
Sistema de protocolo de documentos - SPDOFabiano Weimar
 
Reconhecimento de fala em português brasileiro
Reconhecimento de fala em português brasileiroReconhecimento de fala em português brasileiro
Reconhecimento de fala em português brasileiroFabiano Weimar
 

Mais de Fabiano Weimar (20)

Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)
Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)
Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Meu Plone Site está lento. O que fazer???
Meu Plone Site está lento. O que fazer???Meu Plone Site está lento. O que fazer???
Meu Plone Site está lento. O que fazer???
 
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo Alheio
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo AlheioPortal SEBRAE - Quando o Plone Gerencia o Conteúdo Alheio
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo Alheio
 
Introducao ao sistema de gerenciamento de conteúdo Plone
Introducao ao sistema de gerenciamento de conteúdo PloneIntroducao ao sistema de gerenciamento de conteúdo Plone
Introducao ao sistema de gerenciamento de conteúdo Plone
 
Integração de sistemas legados com Plone
Integração de sistemas legados com PloneIntegração de sistemas legados com Plone
Integração de sistemas legados com Plone
 
Algoritmos genéticos em python - PyConBrasil 3 (2007)
Algoritmos genéticos em python - PyConBrasil 3 (2007)Algoritmos genéticos em python - PyConBrasil 3 (2007)
Algoritmos genéticos em python - PyConBrasil 3 (2007)
 
Adaptando o Plone para plataformas móveis
Adaptando o Plone para plataformas móveisAdaptando o Plone para plataformas móveis
Adaptando o Plone para plataformas móveis
 
Plone Yak Shaving and Bikeshedding
Plone Yak Shaving and BikesheddingPlone Yak Shaving and Bikeshedding
Plone Yak Shaving and Bikeshedding
 
Otimização de infra estrutura para hospedagem de websites
Otimização de infra estrutura para hospedagem de websitesOtimização de infra estrutura para hospedagem de websites
Otimização de infra estrutura para hospedagem de websites
 
Understanding Plone Security
Understanding Plone SecurityUnderstanding Plone Security
Understanding Plone Security
 
Tips and Tricks about Plone Development for Mobile Platforms
Tips and Tricks about Plone Development for Mobile PlatformsTips and Tricks about Plone Development for Mobile Platforms
Tips and Tricks about Plone Development for Mobile Platforms
 
Segurança no plone
Segurança no ploneSegurança no plone
Segurança no plone
 
Dicas e truques de otimização de websites python
Dicas e truques de otimização de websites pythonDicas e truques de otimização de websites python
Dicas e truques de otimização de websites python
 
Conhecendo o ubuntu enterprise cloud - UEC
Conhecendo o ubuntu enterprise cloud - UECConhecendo o ubuntu enterprise cloud - UEC
Conhecendo o ubuntu enterprise cloud - UEC
 
Sistema de protocolo de documentos - SPDO
Sistema de protocolo de documentos - SPDOSistema de protocolo de documentos - SPDO
Sistema de protocolo de documentos - SPDO
 
Novidades do plone 4
Novidades do plone 4Novidades do plone 4
Novidades do plone 4
 
O novo plone 4
O novo plone 4O novo plone 4
O novo plone 4
 
Reconhecimento de fala em português brasileiro
Reconhecimento de fala em português brasileiroReconhecimento de fala em português brasileiro
Reconhecimento de fala em português brasileiro
 
IPv6
IPv6IPv6
IPv6
 

Faça seu portal voar usando o plone.app.caching

  • 1. Fabiano Weimar dos Santos [Xiru] xiru@xiru.org Faça seu portal voar usando o plone.app.caching
  • 2. Faça seu site voar com plone.app.caching 2 Roteiro ● Um pouco sobre mim... ● Cache É importante? ● Histórico ● plone.app.caching ● Demo
  • 3. Faça seu site voar com plone.app.caching 3 Um pouco sobre mim... ● Os amigos me chamam de Xiru ● Já escrevi algumas linhas de código do Plone, Archetypes e alguns Plone Products... ● Atualmente ● Ministro cursos a distância sobre Plone, Segurança e Infraestrutura ● Sysadmin do provedor PyTown.com ● Consultor do Programa das Nações Unidas para o Desenvolvimento - PNUD
  • 4. Faça seu site voar com plone.app.caching 4 Cache É Importante? ● Cache é MUITO importante se você quer fazer seu site “voar” ● Não importa a tecnologia: nenhum site dinâmico sobrevive sem cache
  • 5. Faça seu site voar com plone.app.caching 5 Sobre o que eu não vou falar... ● A eficiência de um sistema depende de infraestrutura ● Eu não vou falar sobre ● Plone + Squid ● Plone + Varnish ● Plone + Varnish + nginx ● memcached ● … mas você deve preocupar-se em utlizá-los
  • 6. Faça seu site voar com plone.app.caching 6 Histórico ● O Plone sempre teve suporte a cache! ● HTTP Cache Manager “/HTTPCache” ● global_cache_settings ● Problemas: ● Elementos não eram associados com o HTTPCache ● global_cache_settings padrão não fazia cache compartilhado
  • 7. Faça seu site voar com plone.app.caching 7 global_cache_settings <metal:cacheheaders define-macro="cacheheaders"> <metal:block tal:content="structure python:here.enableHTTPCompression(request=request, debug=0)" /> <metal:block tal:define="dummy python:request.RESPONSE.setHeader('Content-Type', 'text/html;;charset=%s' % charset)" /> <metal:block tal:define="dummy python:request.RESPONSE.setHeader('Content-Language', lang)" /> <metal:block tal:condition="python: not here.portal_membership.isAnonymousUser()"> <metal:block tal:define="dummy python:request.RESPONSE.setHeader('Expires', 'Sat, 1 Jan 2000 00:00:00 GMT')" /> <metal:block tal:define="dummy python:request.RESPONSE.setHeader('Cache-Control', 'private, no- cache, no-store, must-revalidate, post-check=0, pre-check=0')" /> </metal:block> <metal:block tal:condition="python: here.portal_membership.isAnonymousUser()"> <metal:block tal:define="dummy python:request.RESPONSE.setHeader('Expires', (DateTime() +1.0/24).toZone('GMT').rfc822().replace('+0000', 'GMT'))" /> <metal:block tal:define="dummy python:request.RESPONSE.setHeader('Cache-Control', 'max-age=0, s-maxage=3600')" /> </metal:block> </metal:cacheheaders>
  • 8. Faça seu site voar com plone.app.caching 8 CacheFu “moleque” ● Uso de “monkey patches” para associar imagens e arquivos com o HTTPCache ● global_cache_settings ajustado para cache compartilhado por 10 minutos (sem PURGE) ● Em 2005, diversos bugs no Zope tiveram que ser corrigidos para isso funcionar
  • 9. Faça seu site voar com plone.app.caching 9 CacheFu ● Projeto iniciado como uma interface de configuração dos “monkey patches” ● Colaboração entre diversos desenvolvedores ● Passou a armazenar configurações de cabeçalhos e regras de cache numa “tool”
  • 10. Faça seu site voar com plone.app.caching 10 CacheFu ● Foi a melhor solução para gerenciamento de cache até o Plone 3.3.5 ● Arquitetura “problemática” por armazenar as configurações no ZODB ● Deixou de ter releases a partir do Plone 4.0
  • 11. Faça seu site voar com plone.app.caching 11 plone.app.caching ● Sucessor do CacheFu a partir do Plone 4.0 ● Utiliza recursos do Zope Component Architecture – ZCA ● Armazena configurações no portal_setup ● Exportação e importação de configurações utilizando XML ● Plone Products podem (e devem) empacotar configurações
  • 12. Faça seu site voar com plone.app.caching 12 plone.app.caching ● Empacotado no Plone 4.1! ● Perfis padrão de cache ● Sem proxy ● Com proxy ● Com proxy e “split- view”
  • 13. Faça seu site voar com plone.app.caching 13 Conjuntos de Regras Padrão ● Content feed ● RSS dinâmico ● Conteúdo de Imagens e Arquivos ● Download de arquivos ou imagens ou utilizados na visualização de outros conteúdos ● Visualização de Pasta ● Visualização de um objeto com comportamento de pasta, exibindo diversos conteúdos
  • 14. Faça seu site voar com plone.app.caching 14 Conjuntos de Regras Padrão ● Visualização de Conteúdo ● Visualização de um objeto único, que não tem comportamento de pasta ● Recursos: Arquivos e Imagens ● Inclui arquivos e imagens criados ou personalizados através da ZMI, aqueles disponibilizados através do portal_skins ou diretórios registrados no sistema de arquivos ● Arquivos e Imagens Estáveis ● Recursos que não mudam, como CSS, JS e KSS registrados através de sua respectivas ferramentas ● Podem ter cache para SEMPRE pois, quando um elemento muda, a URL de acesso também muda
  • 15. Faça seu site voar com plone.app.caching 15 Operações Cache Padrão ● Sem Cache ● Strong caching ● Cache no navegador e no proxy (padrão: 24 hours). ● Moderate caching ● Cache no navegador que expira automaticamente (o mesmo que “weak caching”), e cache no proxy (padrão: 24 hours). ● Idealizado para utilizar uma estratégia de PURGE – Cuidado: pode existir mais de um proxy na rede, não apenas o Squid/Varnish configurado para essa tarefa
  • 16. Faça seu site voar com plone.app.caching 16 Operações Cache Padrão ● Weak caching ● Cache no navegador, expirado automaticamente ● Espera um código 304 (“Not Modified”) ● Requer cabeçalhos “Last-Modified” e/ou “e-tags” ● Pode ser combinado com o PageCacheManager – Cache na memória do Zope do conteúdo da página e respectivos cabeçalhos – Pode ser ineficiente em ambientes distribuídos ● Cuidado: validação condicional pode fazer com que todos os requests sejam enviados para o backend – Depende do proxy e de como o proxy foi configurado
  • 17. Faça seu site voar com plone.app.caching 17 Mapeamento Padrão de Regras e Operações de Cache without-caching- proxy with-caching-proxy with-caching-proxy- splitviews itemView weakCaching weakCaching moderateCaching folderView weakCaching weakCaching moderateCaching feed weakCaching moderateCaching moderateCaching file weakCaching moderateCaching moderateCaching resource strongCaching strongCaching strongCaching stableResource strongCaching strongCaching strongCaching
  • 18. Faça seu site voar com plone.app.caching 18 PageCacheManager ● E-tags muito granulares = explosão combinatória ● E-tags muito abrangentes = problemas com conteúdo ● Cuidado: ao utilizar a data de última atualização do portal_catalog pode tornar o cache em memória muito ineficiente
  • 19. Faça seu site voar com plone.app.caching 19 Demo
  • 20. Faça seu site voar com plone.app.caching 20 Fabiano Weimar dos Santos xiru@xiru.org Twitter @xiru Obrigado