onResourceReceived两次记录每个资源?

Hel*_*oem 9 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')));
Run Code Online (Sandbox Code Playgroud)

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

小智 17

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

请添加一个检查您的功能.

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

};