Adicionando recursos dinâmicos a um site com cache agressivo

Adicionando recursos dinâmicos a um site com cache agressivo


Adicionando recursos dinâmicos a um site com cache agressivo

28 de janeiro de 2026

Meu blog usa cache agressivo: ele fica atrás do Cloudflare com um cabeçalho de cache de 15 minutos, o que garante que ele sobreviverá até mesmo ao maior pico de tráfego para qualquer página. Recentemente, adicionei alguns recursos dinâmicos que funcionam apesar do cache de página inteira. Veja como isso funciona.

Este é um site Django e eu o gerencio através do administrador do Django.

Tenho quatro tipos de conteúdo: entradas, postagens de links (também conhecidas como blogmarks), citações e notas. Cada um deles tem um modelo diferente e, portanto, uma área de administração do Django diferente.

Eu queria um link de “edição” nas páginas públicas que só fosse visível para mim.

O botão fica assim:

Rodapé da entrada - diz Postado em 27 de janeiro de 2026 às 21h44, seguido por um botão quadrado Editar com um ícone.

Resolvi a exibição condicional deste botão com localStorage. Eu tenho um pouquinho de JavaScript que verifica se o localStorage chave ADMIN está definido e, se estiver, exibe um link de edição com base em um atributo de dados:

document.addEventListener('DOMContentLoaded', () => {
  if (window.localStorage.getItem('ADMIN')) {
    document.querySelectorAll('.edit-page-link').forEach(el => {
      const url = el.getAttribute('data-admin-url');
      if (url) {
        const a = document.createElement('a');
        a.href = url;
        a.className = 'edit-link';
        a.innerHTML = '... Edit';
        el.appendChild(a);
        el.style.display = 'block';
      }
    });
  }
});

Se quiser ver meus links de edição, você pode executar este trecho de JavaScript:

localStorage.setItem('ADMIN', '1');

Meu painel de administração do Django tem uma caixa de seleção personalizada na qual posso clicar para ativar e desativar esta opção em meu próprio navegador:

Adicionando recursos dinâmicos a um site com cache agressivo

Navegação aleatória dentro de uma tag

Esses links de edição administrativa são um padrão muito simples. Um recurso mais interessante é um recurso que adicionei recentemente para navegar aleatoriamente dentro de uma tag.

Aqui está um GIF animado mostrando essas navegações aleatórias de tags em ação (experimente aqui):

Demonstração animada. Começa na página da tag ai-ethics, onde um novo botão Aleatório fica próximo ao ícone de feed. Clicar nesse botão vai para uma postagem com essa tag e move o botão para o cabeçalho do site - clicar nele várias vezes vai para itens mais aleatórios.

Em qualquer uma das páginas de tags do meu blog você pode clicar no botão “Aleatório” para ir para uma postagem aleatória com essa tag. Esse botão aleatório persiste no cabeçalho da página e você pode clicar nele para continuar saltando para itens aleatórios na mesma tag.

Uma postagem pode ter várias tags, então é necessário um pouco de magia persistente para lembrar em qual tag você está navegando e exibir o botão relevante no cabeçalho.

Mais uma vez, isso usa localStorage. Qualquer clique em um botão aleatório registra a tag e o carimbo de data/hora atual no random_tag digite localStorage antes de redirecionar o usuário para o /random/name-of-tag/ página, que seleciona uma postagem aleatória e a redireciona para lá.

Sempre que uma nova página é carregada, o JavaScript verifica se ela random_tag key tem um valor que foi registrado nos últimos 5 segundos. Nesse caso, esse botão aleatório é anexado ao cabeçalho.

Isso significa que, desde que a página carregue dentro de 5 segundos após o usuário clicar no botão, a navegação aleatória da tag persistirá na página.

Você pode ver o código para isso aqui.

E as instruções

Eu construí o recurso de tag aleatória inteiramente usando Claude Code para web, solicitado no meu iPhone. Eu comecei com o /random/TAG/ ponto final (transcrição completa):

Construa /random/TAG/ – uma página que escolhe uma postagem aleatória (pode ser uma entrada ou blogmark ou nota ou citação) que possui essa tag e envia um redirecionamento 302 para ela, marcada como sem cache para que a Cloudflare não a armazene em cache

Use uma união para construir uma lista de cada tipo de conteúdo (uma string representando a tabela dos quatro tipos) e chave primária para cada item marcado com essa tag, depois ordene aleatoriamente e retorne o primeiro

Em seguida, aumente o tipo e o ID em um objeto, carregue-o e redirecione para o URL

Incluir testes – deve funcionar configurando uma tag com um de cada tipo de conteúdo e, em seguida, executando um loop chamando esse endpoint até que ele retorne um de cada um dos quatro tipos ou atinja 1.000 loops, ponto em que falha com um erro

Então:

Não gosto dessa solução, algumas das minhas tags possuem milhares de itens

Podemos fazer algo inteligente com um CTE?

Aqui está algo inteligente com uma solução CTE que encontramos.

Para o botão “Postagem aleatória” (transcrição):

Veja o commit mais recente e modifique a página /tags/xxx/ para ter um botão “Postagem aleatória” que tenha uma boa aparência e links para a página /random/xxx/

Então:

Coloque antes e não depois do ícone de feed. Só deve ser exibido se uma tag tiver mais de 5 postagens

E finalmente, o localStorage implementação que persiste um botão de tag aleatório no cabeçalho (transcrição):

Revise os dois últimos commits. Faça com que clicar no botão Aleatório em uma página de tag defina um valor localStorage para random_tag com essa tag e um carimbo de data / hora. Em qualquer outra visualização de página que use o modelo de item base, adicione JS que verifica o valor localStorage e garante que o carimbo de data/hora esteja dentro de 5 segundos. Se estiver dentro de 5 segundos, ele adiciona um botão “Nome da tag aleatória” à pequena barra de navegação superior, estilizada como o botão Aleatório original, que ultrapassa o carimbo de data / hora do localStorage e envia o usuário para /random/nome-da-tag/ quando ele clica nele. Dessa forma, clicar em “Aleatório” em uma página de tag enviará o usuário a uma experiência onde ele poderá continuar clicando para continuar navegando aleatoriamente naquele tópico.



Source link

Postagens Similares

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *