2013-02-01 24 views
9

Tôi đang cố gắng sử dụng các số liệu để có được một số chỉ số về khả năng xảy ra tình trạng chủng tộc ảnh hưởng đến trang, tôi có 2 tệp tập lệnh, một số chức năng được lưu trữ trên trang web của tôi phụ thuộc vào một số globals được đặt bởi một tệp đến từ bên thứ ba . Tôi nghĩ rằng sử dụng onResourceReceived trong phantomjs Tôi có thể đăng nhập khi mỗi tập tin tải và sau đó chạy kiểm tra một loạt các lần để có được một ý tưởng về mức độ thường xuyên điều kiện chủng tộc này sẽ gây ra vấn đề, một ví dụ của mã của tôi là dưới đây (nó không phải mã thực sự và tôi không liên kết với BBC):onResourceReceived ghi lại mọi tài nguyên hai lần?

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

Loại này chạy như thế nào tôi mong đợi ngoại trừ mỗi tệp được ghi hai lần, tại sao lại như vậy? Đôi khi sự khác biệt về thời gian rất khác nhau. locator.css: 323msecs trạng thái: 200 locator.css: 323msecs trạng thái: 200 vi-GB.json: trạng thái 2199msecs: 200 vi-GB.json: trạng thái 2200msecs: 200 Thử nghiệm 1 đã hoàn thành !!!

Trả lời

17

Bạn cần kiểm tra thuộc tính response.stage. giai đoạn sẽ bắt đầu và kết thúc. bắt đầu cung cấp cho byte đầu tiên đến thời gian và kết thúc cung cấp cho bạn khi bạn nhận được phản ứng đầy đủ.

vui lòng thêm một dấu kiểm vào chức năng của bạn.

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

};

+0

Cảm ơn rất nhiều câu trả lời này là hoàn hảo –

Các vấn đề liên quan