Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
>
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
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:
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.
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?
Oras, inverte a verificação:
if( $comments == 'open' && count( $comments ) > 0 ) {
if( $cache !== FALSE ) {
// Usa o cache
} else {
// Consulta o banco
}
}
:thumbsup:
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
}
}
} if( $cache !== FALSE ) {
// Usa o cache
} else {
// Consulta o banco
}
}
}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.
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
}
sim... isso é questão de lógica..
afinal, esse é o trabalho do programador.
>
sim... isso é questão de lógica..
afinal, esse é o trabalho do programador.
sim, isso eu sei e esta no titulo
desculpe, mas poderia ter aproveitado o post e colaborado ajudando
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..
Ê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...
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