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')));

这有点像我预期的那样运行,除了每个文件被记录两次,这是为什么呢?有时时差是非常不同的。locator.css:323msecs 状态:200 locator.css:323msecs 状态:200 en-GB.json:2199msecs 状态:200 en-GB.json:2200msecs 状态: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 回答