微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – onResourceReceived记录每个资源两次?

我试图用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完成!

解决方法

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

添加检查您的功能.

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

};

原文地址:https://www.jb51.cc/js/151293.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐