Wenn die Ressource Sie richtig die letzte Änderung Header Einstellung sind holen, ist es effizienter sein könnte eine HTTP HEAD-Anforderung zuerst zu machen und nur die Seite in PhantomJS öffnen, wenn es geändert wurde. Dies wäre definitiv komplexer, so dass es sich lohnt, zuerst andere Optionen zu prüfen.
Ein Beispielcode, der die letzte Modifikationszeit unter http://stackoverflow.com überprüft, ist wie folgt.
var url = 'http://stackoverflow.com';
var page = require('webpage').create();
var interval = 1000; // change according to needs
var previousLastModified;
(function modifiedCheck() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var lastModified = xhr.getResponseHeader("Last-Modified");
if (lastModified !== previousLastModified) {
page.open(url, function(status) {
if (status === 'success') {
previousLastModified = lastModified;
// TODO: do something with fetched page
console.log('fetched page.');
}
setTimeout(modifiedCheck, interval);
});
} else {
setTimeout(modifiedCheck, interval);
}
}
};
console.log('making HEAD request.');
xhr.open('HEAD', url);
xhr.send();
})();
Sie können von der Konsolenprotokollierung sehen, dass die Seite für 1 Minute zwischengespeichert wird.
Die selbstausführende modifiedCheck
-Funktion im Beispiel verwendet anonyme Funktionen zur asynchronen Verarbeitung des Ergebnisses des AJAX-Aufrufs und der PhantomJS-Seitenladung, wodurch die Blockierung begrenzt wird.
Hinweis: Sie müssen PhantomJS mit der Option --web-security=false
ausführen, damit der AJAX-Aufruf ohne Fehler ausgeführt werden kann.