O cache do Ajax é mantido pelo navegador. Para um certo URL enviado ao servidor, o AJAX interage apenas com o servidor durante a primeira solicitação. Nas solicitações subsequentes, o Ajax não envia mais uma solicitação ao servidor, mas extrai dados diretamente do cache.
Em alguns casos, precisamos obter dados atualizados do servidor todas as vezes. A idéia é fazer com que o URL seja solicitado de maneira diferente sem afetar a aplicação normal: adicione conteúdo aleatório após o URL.
por exemplo
url = url+"&"+math.random ();
Pontos -chave:
1. O URL solicitado cada vez é diferente (o cache do Ajax não funciona)
2. Não afeta a aplicação normal (mais básica)
Aqui temos duas conclusões:
1: cache Ajax e cache http são os mesmos
Os mecanismos de HTTP e cache dos navegadores modernos são muito piores do que os do objeto XMLHTTPREQUEST do Ajax, por isso não reconhece ou se importa com solicitações de Ajax. Simplesmente segue as regras comuns de cache HTTP e as armazenam em cache através do cabeçalho de resposta retornado pelo servidor.
Se você já tem uma compreensão do cache HTTP, pode usar o conhecimento do cache HTTP para entender o cache do Ajax. A única diferença é que a maneira de definir cabeçalhos de resposta será diferente da dos arquivos comuns.
Os seguintes cabeçalhos de resposta podem tornar o seu Ajax em cache:
Expira: Este item deve ser definido como um ponto de tempo adequado no futuro. A configuração do ponto de tempo depende da frequência das mudanças de conteúdo. Por exemplo, se a quantidade solicitada de inventário, o valor das expires poderá ser 10 segundos depois. Se a foto solicitada, o valor dos expiros poderá ser mais longo, pois não mudará com frequência. O cabeçalho Expires permite que o navegador reutilize dados em cache local por um período de tempo, evitando assim qualquer interação desnecessária com os dados do servidor.
Último modificado: definir este item é uma boa escolha. Por meio dele, o navegador usará se-modificado-uma vez no cabeçalho da solicitação para verificar o conteúdo em cache local ao enviar uma solicitação condicional. Se os dados não precisarem ser atualizados, o servidor retornará um status de resposta 304.
Controle de cache: em caso de circunstâncias apropriadas, esse valor deve ser definido como público, para que todo o proxy e cache intermediário possa ser salvo e compartilhado com outros usuários. No Firefox, ele também suporta cache para solicitações HTTPS.
Obviamente, se você usar o método de post para enviar ojax, ele não pode ser armazenado em cache, porque as solicitações de postagem nunca serão armazenadas em cache. Se sua solicitação AJAX terá outros efeitos (como transferências entre contas bancárias), use a solicitação de postagem.
Configuramos uma demonstração (essa demonstração não pode mais ser vista (□) ノ) para esclarecer como esses cabeçalhos funcionam. No httpwatch, você pode ver que definimos os três cabeçalhos de resposta acima nas informações do cabeçalho da resposta.
Se você clicar regularmente no botão 'AJAX ATUALIZAÇÃO', as mudanças de tempo tendem a ser a cada outro minuto. Porque o cabeçalho da resposta expire está definido para o próximo minuto. Na captura de tela abaixo, você pode ver: Ao clicar no botão Atualizar repetidamente, a solicitação do Ajax leia o cache local do navegador sem gerar atividade de rede (os valores das barras de envio e transferência são 0)
A solicitação AJAX enviada pelo último clique em 1: 06.531 transmissão de dados de rede gerada por tempo porque os dados em cache haviam excedido um minuto. O servidor retornou 200 status de resposta para indicar que uma nova cópia dos dados foi obtida.
Acho que essa demonstração deve ser um botão, obtenha a hora atual toda vez que clicar e retornar à página atual.
2: O navegador do IE não atualizará o conteúdo obtido através do AJAX antes que o tempo expire.
Às vezes, o Ajax é usado para preencher certas partes da página (como uma lista de preços) quando a página é carregada. Ele não é acionado pelo evento de um usuário (como clicar em um botão), mas é enviado por JavaScript quando a página é carregada. É como se as solicitações do AJAX fossem iguais aos recursos incorporados (como JS e CSS).
Se você desenvolver essa página, ao atualizar -a, atualize o conteúdo da solicitação AJAX incorporada. Para recursos incorporados (arquivos CSS, fotos etc.), o navegador enviará automaticamente os seguintes tipos diferentes de solicitações, se o usuário atualiza F5 (atualizar) ou Ctrl+F5 (Atualização de Force):
1.f5 (atualização): Se o conteúdo da solicitação tiver um cabeçalho de resposta de última hora, o navegador enviará uma solicitação de atualização condicional. Ele usa o cabeçalho da solicitação de IF-modificado para comparação, para que o servidor possa retornar um status 304 para evitar a transmissão de dados desnecessários.
2.CTRL+F5 (FORCE REFRESH): diz ao navegador para enviar uma solicitação de atualização incondicional e o controle de cache do cabeçalho da solicitação está definido como 'sem cache'. Isso informa a todo proxy e cache intermediário: o navegador precisa obter a versão mais recente, independentemente de ter sido armazenado em cache.
O Firefox propaga esse método de atualização para as solicitações do AJAX enviadas quando a página é carregada e trata essas solicitações do AJAX como recursos incorporados. Abaixo está uma captura de tela do httpwatch sob o Firefox, mostrando o efeito das solicitações de Ajax ao refrescar (F5):
O Firefox garante que a solicitação iniciada pelo AJAX seja condicional. Neste exemplo, se os dados estiverem armazenados em cache por menos de 10 segundos, o servidor retornará 304, se exceder 10 segundos, o servidor retornará 200 e retransmissão dos dados.
No IE, a solicitação AJAX iniciada quando a página é carregada é considerada como não tem nada a ver com a atualização de outras partes da página e não será afetada pelo método de atualização do usuário. Se os dados do AJAX em cache não expirarem, não haverá solicitações GET enviadas ao servidor. Ele lerá os dados diretamente do cache e, do httpwatch, é o resultado (cache). A figura a seguir é pressionar F5 para atualizar se o cache não estiver expirado no IE:
Mesmo que seja forçado a atualizar através do Ctrl+F5, os dados obtidos através do AJAX serão lidos no cache:
Isso significa que qualquer coisa obtida através do AJAX não será atualizada no IE, se não expirar - mesmo se você usar o Ctrl+F5 para forçar a atualização. A única maneira de garantir que você obtenha os dados mais recentes é limpar manualmente o cache. Você pode usar a barra de ferramentas Httpwatch:
Observe que o resultado do cache e o resultado de 304 são diferentes. Cache é na verdade 200 (cache), 304 significa 304. O cache realmente não envia uma solicitação ao servidor. Você pode ver no Chrome que seu tempo é 0 e a resposta também está vazia. No entanto, 304 é diferente.
A solicitação 304 é uma solicitação condicional iniciada pelo navegador. Esta solicitação carrega o cabeçalho da solicitação de IF modificado. Se o arquivo não tiver sido modificado depois que o navegador enviar a hora, o lado do servidor retornará um status 304 e informará ao navegador para usar seu conteúdo de cache local. Não é tão rápido quanto a solicitação é enviada para o lado do servidor, mas o lado do servidor não envia dados.
Você pode verificar a página inicial do Taobao, que possui 200 (cache) e 304. Você pode verificar suas diferenças.
Resumir:
Todos sabemos que a principal razão pela qual o Ajax pode aumentar a velocidade do carregamento da página é que ele reduz o carregamento de dados duplicados através do AJAX e realmente atinge a aquisição sob demanda. Como esse é o caso, quando escrevemos o programa AJAX, podemos enviá -lo para o oeste e armazená -lo novamente no cliente para melhorar ainda mais a velocidade de carregamento de dados. Isso é para armazenar em cache os dados na memória do navegador enquanto carrega os dados. Depois que os dados são carregados, desde que a página não seja atualizada, os dados serão armazenados em cache na memória para sempre. Quando o usuário visualiza os dados novamente, não há necessidade de obter dados do servidor, o que reduz bastante a carga do servidor e melhora a experiência do usuário.