2011-06-24 86 views
0

我想衡量一個RTT多久是在服務器... 這是問題所在,當我有下面的工作是完美的作品:計算RTT問題與JavaScript

var start = new Date(); 
var startTime=start.getMilliseconds(); 

document.write('<img src="http://mysite.com/myfile.gif" onload="getEndTime()">'); 


function getEndTime() 
{ 
    var stop= new Date(); 
    var t=stop.getMilliseconds()-startTime; 
    console.log(t); 
} 

但是如果我想將t存儲在變量中並將其打印出該函數,但大多數時間不起作用!

例如:

var start = new Date(); 
var startTime=start.getMilliseconds(); 

document.write('<img src="http://mysite.com/myfile.gif" width="1" height="1" onload="getEndTime()">'); 

var rtt; 

function getEndTime() 
{ 
    var stop= new Date(); 
    var t=stop.getMilliseconds()-startTime; 
    rtt=t; 
} 

console.log(rtt); 

RTT將被0大部分時間!! ...誰能幫助?它是如此令人沮喪!......

+0

嘗試之前'getEndTime做一些事情()'。 – Blender

+0

不確定這是否是您的問題,但在執行document.write之前,您應該定義getEndTime()函數(和rtt)。函數在聲明之前被調用是可能的。 – Jeff

+0

這不是一個解決方案:-) ..我打算在我的頁面中反覆使用相同的結構... – Amir

回答

0

你永遠不會打電話getEndTime(我可以看到),所以如何設置rtt(到console.log被調用時)。

也許在頁面上添加按鈕或者在分配rtt後添加console.log

頁的步驟,因爲我看到他們:

  1. 加載了全局(開始,開始時間,定義功能等),你想要的代碼輸出到頁面的
  2. 申報,並引發上的負載
  3. 立即轉儲RTT(未定義)可變
  4. ...
  5. 的OnLoad 實際上觸發器,但沒有什麼是輸出。

var begin = new Date, 
    rtt = [], 
    imgs = [ 
     'http://myserver.com/foo.gif', 
     'http://myserver.com/bar.gif' 
     // etc. 
    ]; 

function getEndTime(){ 
    var end = new Date; 
    var delta = end.getMilliseconds() - begin.getMilliseconds(); 
    console.log('image loaded in ' + delta + 'ms'); 
    rtt.push(delta); 
} 
function dumpSummary(){ 
    // based on the number of entried in our rtt array, we can determine 
    // if all the images have been loaded. if not, re-call this function (with 
    // a delay until we reach it. 
    if (rtt.length == imgs.length){ 
     console.log('All images have loaded. Their times are:'); 
     for (var r = 0; r < rtt.length; r++){ 
      console.log(r + '. ' + rtt[r]); 
     } 
    }else{ 
     console.log('waiting on more images...'); 
     // not enough entries, try again later 
     setTimeout(dumpSummary,1000); 
    } 
} 
// begin polling for the "finish line" 
dumpSummary(); 

// output the images one-by-one 
console.log('beginning'); 
for (var i = 0; i < imgs.length; i++) 
    document.write('<img src="' + imgs[i] + '" width="1" height="1" alt="" onload="getEndTime();" />'); 
+0

我將你的代碼更改爲:{添加TWEAK :)}但仍然無效... – Amir

+0

@Amir:發現錯誤(試圖引用'start.getMilliseconds()'而不是'end.getMilliseconds() '。[works](http://jsfiddle.net/fLnuC/) –

+0

該代碼完美工作,我是如此愚蠢的..如果你只是定義var start;在開始,並把開始=新Date( );在文檔寫入之前它會工作....再次感謝您的幫助:-) – Amir