Если ресурс вы выборка правильно установки последнего изменения заголовка, он может быть более эффективным, чтобы сделать запрос HTTP HEAD, первым, и только открыть страницу в PhantomJS, если он был изменен. Это определенно будет более сложным, поэтому сначала стоит проверить другие варианты.
Код примера, который проверяет время последней модификации на http://stackoverflow.com, выглядит следующим образом.
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();
})();
Вы можете видеть из консоли, что страница кэшируется в течение 1 минуты.
Функция самоисполняемого modifiedCheck
в этом примере использует анонимные функции для асинхронного обработки как результата вызова AJAX, так и загрузки страницы PhantomJS, что ограничивает блокировку.
Обратите внимание, что вам необходимо запустить PhantomJS с опцией --web-security=false
, чтобы позволить вызову AJAX выполнять без ошибок.