由於我們是在應用層內運行,我們只能做在HTTP上的等待時間的考驗。
var xhr = new XMLHttpRequest()
xhr.open("HEAD", "/", false)
console.time("latency");
xhr.send();
console.timeEnd("latency");
代碼描述:
我創建一個同步AJAX請求到當前主機。我使用"HEAD"
作爲非常輕量級的方法,並且不會收到任何內容。所以,我們可以假設「HEAD」請求的往返距離非常接近於ICMP或TCP上的實際ping。
對於URL,"/"
(當前主機)被使用。由於同源策略,除非允許,否則不能只使用http://google.com之類的任何域名。
我使用console.time()
和console.timeEnd()
來測量比使用常規Date
更準確的持續時間。但是,您也可以使用Date
測量時間:
//...
var now = (new Date()).getTime()
xhr.send();
var duration = (new Date()).getTime() - now; //ms
UPDATE: 即使發生異常試試這個代碼,用於測量延遲:
try {
var xhr = new XMLHttpRequest()
xhr.open("HEAD", "http://google.com" + "/?" + Math.random(), false)
console.time("latency");
xhr.send();
}
catch (e){
//block exception
}
finally {
console.timeEnd("latency");
}
請注意,我也有在URL的末尾添加一個隨機數以防止瀏覽器緩存。
這幾乎是理想的,不幸的是這是一個遠程服務器,並且不支持HEAD(儘管如果我能趕上這個錯誤,我不會有事的太)。我會更新我的帖子,提供有關服務器的更多信息。 – AndyC
我更新了答案。 – advncd
請求/定時捕獲工作正常,但似乎沒有辦法阻止/捕獲由於相同原始策略導致的'XMLHttpRequest無法加載..'錯誤。 – AndyC