9

phantomjs を使用して、ページに影響を与える競合状態の可能性に関するいくつかのメトリックを取得しようとしています.2 つのスクリプト ファイルがあり、サイトでホストされている一部の機能は、サード パーティからのファイルによって設定されたいくつかのグローバルに依存しています.

phantomjs で onResourceReceived を使用すると、各ファイルがロードされたときにログを記録し、そのテストを何度も実行して、この競合状態が問題を引き起こす頻度を把握できると考えました。私のコードの例を以下に示します (実際のコードではありません)。私はBBCと提携していません):

(function (p, wp) {
  "use strict";
  var page, start,
    count = 0, max = 10,
    webpage = require('webpage'),
    url = "http://www.bbc.co.uk";

  function process() {
    if (max == count) {
      console.log('done processing!');
      p.exit();
    } else {
      count++;
      start = new Date();
      page = wp.create();
      page.onResourceReceived = onResourceReceived;
      page.open(url, onOpen);
    }
  }

  function onResourceReceived(response) {
    var match, t = new Date(),
    url = response.url,
    status = response.status;
    t = t.valueOf() - start.valueOf();
    if (!!(match = url.match(/locator\.css/))) {
      console.log(match[0] + ': ' + t + 'msecs status: ' + status);
    }
    if (!!(match = url.match(/en-GB\.json/))) {
      console.log(match[0] + ': ' + t + 'msecs status: ' + status);
    }
  };

  function onOpen() {
    console.log('Test ' + count + ' done!!!');
    page.close();
    process();
  }

  process();
}(phantom, require('webpage')));

これは、各ファイルが2回ログに記録されることを除いて、私が期待したとおりに実行されますが、これはなぜですか? 時差が大きく異なる場合もあります。locator.css: 323msecs status: 200 locator.css: 323msecs status: 200 en-GB.json: 2199msecs status: 200 en-GB.json: 2200msecs status: 200 テスト 1 完了!!!

4

1 に答える 1

17

response.stageプロパティを確認する必要があります。ステージには開始と終了があります。startは最初のバイトの到着時刻を示し、endは完全な応答を受け取った時刻を示します。

関数にチェックを追加してください。

function onResourceReceived(response) {
    if(response.stage == 'end') return;
  //rest of your code from above example.

};

于 2013-02-08T22:09:57.253 に答える