2013-02-01 5 views
9

phantomjsを使用して、ページに影響を及ぼす競合状態の可能性についてのメトリックを取得しようとしています。私は2つのスクリプトファイルを持っています。私のサイトでホストされているいくつかの機能は、 。onResourceReceivedはすべてのリソースを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ステータス:200 locator.css:323msecsステータス:200 エンGB.json:2199msecsステータス:200 エンGB.json:2200msecsステータス:200 試験1行います!

答えて

17

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

あなたの機能にチェックを入れてください。

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

};

+0

この回答は完璧です –

関連する問題