onResourceReceived两次记录每个资源?

时间:2013-02-01 16:17:25

标签: javascript phantomjs

我正在尝试使用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')));

除了每个文件都记录两次之外,这种方式运行我的预期,为什么会这样? 有时候时差是非常不同的。     locator.css:323msecs状态:200     locator.css:323msecs状态:200     en-GB.json:2199msecs状态:200     en-GB.json:2200msecs状态:200     测试1完成!!!

1 个答案:

答案 0 :(得分:17)

您需要检查response.stage属性。舞台将有开始和结束。 start给出了第一个字节到达时间和结束时给你的时间得到了完整的响应。

请在您的功能中添加一张支票。

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

};