動機
対象コンテンツをキャッシュさせた際に、hostsを毎回開いて設定して画面を確認するのが大変。
なので、Phantomjsを利用(HTTPリクエストヘッダのIPとHostを設定)して、画面キャプチャとロードタイムの取得するプログラムを作成してみた。
HARDataを作成する
PhantomJSのexampleのnetsniff.jsを参考にしてharファイルを作成
https://github.com/ariya/phantomjs/blob/master/examples/netsniff.js
Headerの内容にキャッシュサーバのIPをききにいくように設定する
var fs = require('fs'),
page = require('webpage').create(),
system = require('system'),
a = 0,
t,
url = system.args[1], // 参照先のFQDNを取得
vip = system.args[2], // 参照先のキャッシュサーバのIP取得
arrdata = url.split(/\r\n|\n|\r/);
var urltmp, urlarr = [];
while ((urltmp = arrdata.shift()) !== undefined) {
if (urltmp !== "") urlarr.push(urltmp);
}
~~~~~~~~~~~~~~~~ 省略 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
var settings = {
headers: {
"Host":urlarr[0].replace(/http\u003a\u002f\u002f|https\u003a\u002f\u002f/g, "")
}
}
ロードタイムとスクリーンショットを取得コード
t = Date.now();
page.open("http://"+ vip, settings , function(status) {
if (status !== 'success') {
console.log('FAIL to load the address');
phantom.exit(1);
} else {
t = Date.now() - t;
page.endTime = new Date();
page.title = page.evaluate(function () {
return document.title;
});
har = createHAR(urlarr[a], page.title, page.startTime, page.resources);
har.log.entries.forEach(function(item) {
});
// ロードタイムをコンソール出力
console.log('Loading time ' + t + ' msec');
// 画面キャプチャの取得
page.render(url + vip + '.jpg', {
format : 'jpeg',
quality : '80'
});
a++;
next();
}
});
}
これで、ロードタイムとスクリーンショットが取れるようになった
speedtest.jsを置いたディレクトリ上で下記を実行
speedtest.js
phantomjs speedtest.js <参照先のFQDN> <参照したいIP>
最後に
phantomjsを利用して、詳細なFQDNごとのロードタイムや、HTTPリクエストヘッダを設定することが可能なため監視や計測などにも使ってみようかなと思う