あなたがフェッチしているリソースが正しく最終更新ヘッダを設定している場合は、それは最初の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ページのロードの両方を非同期に処理し、ブロックを制限します。
AJAX呼び出しをエラーなしで実行できるようにするには、--web-security=false
オプションを指定してPhantomJSを実行する必要があります。
出典
2016-04-28 10:12:09
gar