Önbellek AJAX istekleri

2 Cevap php

Ben bir PHP uygulaması için AJAX GET istekleri yolluyorum ve daha sonra kullanmak üzere talep döner önbelleğe istiyorum.

Ben GET kullanıyorum çünkü farklı istekleri farklı URL'ler (= 5 örn. getHTML.php? Page = 2 ve getHTML.php? Sayfa) talep nedeniyle bu mümkün olmalıdır.

Ben müşteri tarayıcı önbelleğe uygun bir şekilde istek URL içerik yapmak için PHP-uygulamada ilan Hangi başlıklar gerekiyor? (Ben bir önbellek parametre vardır JQuery'nin $. Ajax fonksiyonunu kullanıyorum) AJAX-isteğini işleme JavaScript şey bildirmek gerekiyor mu?

How would I handle edits which change the content of e.g. getHTML.php?page=2 so that the client doesn't fall back to the cached version? Adding another parameter to the GET request e.g. getHTML.php?page=2&version=2 is not possible because the link to the requested URL is created automatically without any checking (which is preferably the way I want it to be).

AJAX-istek önbelleğe alınmış bir istek URL çalıştığınızda nasıl tarayıcı tepki verecek? AJAX isteği derhal geri başarı mı?

Teşekkürler

Willem

2 Cevap

Sunucuda şu başlıkları ekleyin:

    header("Cache-Control: private, max-age=$seconds");
    header("Expires: ".gmdate('r', time()+$seconds));

$seconds bariz bir anlamı vardır nerede.

Sunucu Pragma gibi bazı diğer anti-önbelleğe alma başlıkları sorunu yoksa Ayrıca, kontrol edin. Başlığı çok: Eğer öyleyse, "önbellek Pragma" ekleyin.

Eğer sayfayı yenileyin sonra, hala önce bunları talep ettik olsa bile, içerik sunucu çağrıları yapmak olacak. PHP başlıkları bu konuda size yardımcı olmayacaktır.

Ben ne gerek zaten Geçerli sayfada sunucudan istenen içeriğin bir istemci tarafında önbelleğe alma mekanizması olduğunu düşünüyorum.

Bu use-case için JavaScript bir karma tablo kullanın ve sunucuya bir arama yapmadan önce bu sorgulayabilirsiniz. Kullanıcı o zaten görmüş içeriğin başka isteği için beklemek zorunda kalmazsınız çünkü bu kullanıcı deneyimini geliştirmek olacaktır.

İşte bir örnek:

//placeholder for hash table as cache
var cache = [];

var getPage = function(pageNr){
    if(cache[pageNr]){
    	//content is already in cache, use it from there
    	handleContent(cache[pageNr]);
    }
    else{
    	//object with parameteres sent with GET request
    	var params = {};
    	params.page = pageNr;

    	$.ajax({
    	  url: "getHTML.php",
    	  data: params,
    	  cache: false,
    	  success: function(response){
    	  	//handle your response here
    		handleContent(response);

    		//store the response in the cache for later use
    	    cache[pageNr] = response;
    	  }
    	});
    }
};

Şimdi talep sayfaları öncelikle içerik varsa görmek için geçerli önbelleğe bakacağız. Değilse, bu sunucu arama yapmak ve önbellek yanıtı saklar.

Google Finance haberlerin ilerlerken zaman kullanıcı deneyimine benzer

NOTE that if you refresh the page this cache will be erased.

Bir sayfa için düzenlemeler durumda sunucu her zaman içerik en son sürümünü dönen sağlamak amacıyla Yahoo Olağanüstü Performans Maurice Perry'nin bağlantıları kullanmak zorunda olacak.

More on hash tables in JavaScript: http://www.mojavelinux.com/articles/javascript_hashes.html