LoginSignup
2
3

More than 5 years have passed since last update.

PhantomJSでキャッシュサーバを指定でパフォーマンス測定

Last updated at Posted at 2016-01-14

動機

対象コンテンツをキャッシュさせた際に、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リクエストヘッダを設定することが可能なため監視や計測などにも使ってみようかなと思う

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3