Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

criatividade zero

trabalhando com cache em noticias e comments

Recommended Posts

estou implementando um sistema da cache para noticias, eu guardo em txt:

. a ordem do menu - é feita a cada 24hs uma ordem com base em estatisticas

. os dados da noticia

. ultimos 10 comentários - seria a 1ª página pois a paginação é feita com ajax

 

 

o problema pegou na logica...

o cache de menu é individual pois outros controladores o usam

guardar 1 txt com dados e comment, ou guardar 2 txt para cada?

 

alguem pode dar essa força?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vejo problemas em armazenar tudo num único arquivo.

 

Se você você serializar um array de dois índices, sendo um para a notícia e outro, multidimensional, para os comentários e comprimir com GZiP no nível máximo, vai ter arquivos muito pequenos.

 

Porém, dessa forma você ainda vai ter processamento PHP sendo consumido, pois você terá que buscar o ID, verificar se o ache existe, ler se existir ou buscar um novo do banco se não e etc.

 

Acho que para um sistema de notícias, o ideal seria gerar cache estático em HTML mesmo. Como os comentários são atualizados com mais frequência que o artigo em si, você poderia recriar o cache manual ou automaticamente quando um novo for aprovado, já que você deveria aprová-los manualmente.

 

Ou só do artigo mesmo e os comentários viriam por AJAX no load da página

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que para um sistema de notícias, o ideal seria gerar cache estático em HTML mesmo. Como os comentários são atualizados com mais frequência que o artigo em si, você poderia recriar o cache manual ou automaticamente quando um novo for aprovado, já que você deveria aprová-los manualmente.

ja havia pensado nisso, mas não dá pra fazer um cache de html, pq sempre que houver um novo comentário haverá um novo 'total'

ai teria que refazer o html, e mesmo assim o bloco de comentário é != para logados

 

 

Se você você serializar um array de dois índices, sendo um para a notícia e outro, multidimensional, para os comentários e comprimir com GZiP no nível máximo, vai ter arquivos muito pequenos.

mas sempre terei que verificar se os comentários estão habilitados ou bloqueados, mesmo cacheando?

ou teoricamente, refazer o cache sempre quando ocorrer uma mudança na tbl noticia

 

if $noticia['comment'] === true
  //1. comentários
else
  //2. sem comentários

para o caso 1. o cache iria conter a noticia e os comentarios

no caso 2 como seria?

é nessa parte que estou tremendamente enrolado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo aconteceria quando o cache fosse criado.

 

Se o artigo permite que comentários sejam postados, no array a ser serializado haveria um índice comments, por exemplo. Se comentários estão desativados, ele não existiria.

 

De qualquer forma um único cache seria criado.

 

Quanto ao cache de HTML é possível sim e, como eu disse, você pode usufruir da Moderação Manual para isso. Veja um esqueminha:

 

  • Artigo Adicionado :seta: Cria-se o cache
  • Comentário Postado :seta: Status "Agurdando Aprovação", para aperacer no Dashboard
  • Você vê o comentário e, se aprová-lo, ao clicar no link/botão para isso, lê-se o cache, des-serializa-o, cria-se o índice comments, re-serializa-o e ataliza.

A cada novo comentário você repetiria a última parte, mas apenas adicionaria mais um item no final do índice comments.

 

Apesar de tudo, eu acho isso improdutivo.

 

Você poderia fazer do seu visitante um zumbi. Não, não é nada tão obscuro quanto parece. :lol:

 

Basicamente você criaria um artigo e geraria o cache limpo, em HTML estático. Um visitante/usuário postou um comentário? Beleza, grava no banco e recria o HTML na hora.

 

Os outros usuários/vistantes verão sempre o HTML. E quando alguém postar algo novo, atualiza pro restante da galera.

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao estou conseguindo evitar a duplicidade de verificações...

 

if( !cache )
{
// sem cache
if comment = open
if comments > 0
}
else
{
// com cache
if comment = open
if comments > 0
}

 

em ambos os casos eu preciso ver se comment está aberto, se contém comentário...

como contornar essa repetição?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oras, inverte a verificação:

 

if( $comments == 'open' && count( $comments ) > 0 ) {

   if( $cache !== FALSE ) {

       // Usa o cache

   } else {

       // Consulta o banco
   }
}

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja tinha pensado em inverter, só que so conecto o DB se não houver cache

1º passo é verificar o cache com os dados

 

if( !$cache_noticia )
{
   if( $cache_noticia['comments'] == 'open' && count( $comments ) > 0 ) {
       if( $cache !== FALSE ) {
           // Usa o cache
       } else {
           // Consulta o banco
       }
   }
}
else
{
   if( $cache_noticia['comments'] == 'open' && count( $comments ) > 0 ) {
       if( $cache !== FALSE ) {
           // Usa o cache
       } else {
           // Consulta o banco
       }
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não vai usar o link de conexão em NENHUM outro lugar da aplicação?

 

Porque se você usar, você pode conectar lá atrás, bem antes de a conexão estar sendo usada para listagem das Notícias e usar um Singleton Registry para armazenar o objeto da conexão.

 

Daí você não tem esse problema de "desperdiçar" a conexão, pois ela já terá sido feita mesmo...

 

Se não der, teremos de ver outro jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

chegou no problema :D

a conn é unica, so vou até o DB se precisar, trabalhando com cache posso nem conectar para obter um retorno

 

if( !$cache_noticia )
{
  // abre conn
}
else
{
  // usa os dados do cache
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, mas isso não tem como ajudar pois envolve fazer o trabalho que é de sua responsabilidade.. Não tente subverter o sentido da coisa..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Êta excesso de testosterona... :lol:

 

Bom, eu acho que cai então naquilo que eu disse no post #2. Ou em uma de suas variantes...

 

O seu cache, se tudo num arquivo à parte, vai teria de ser uma string serializada de um array com dois índices, mais ou menos assim:

 

$cache = array(

   'info' => array(

       'allowComments' => TRUE
   ),

   'data' => array(

       'content' => 'string com a notícia',

       'comments' => array(

           'comentario #1',
           'comentario #2',
           'comentario #3',
       )
   )
);

Sempre que a página for requisitada você busca pelo cache, desserializa-o e monta a página. content será o cache da sua notícia e comments, se presente e com valores seria iterado para mostrar os comentários relacionados.

 

O formulário de comentário só seria exibido se info existir e possuir o valor allowComments e, claro, este for TRUE.

 

Você pode trabalhar com XML também e montar a página analisando-o.

 

E para recriar o cache, a idéia do "usuário zumbi" até que não é tão má assim. Mas se você preferir, uma tarefa agendada para recriar todos os arquivos de cache a cad X dias...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.