2014-03-31 44 views
0

從我已閱讀的內容中,確定網絡速度我需要從已知文件大小的Web下載圖像,然後確定此過程用於獲取變量的時間爲我的Mbps計算。我的第一個問題是,如何使用JavaScript將圖像下載到Windows Phone?我對JavaScript函數有些熟悉,現在我一直在研究,但我不知道如何告訴函數在哪裏保存圖像。另外,我的猜測是,我將使用新的HTML5導航API來確定下載過程的時間。爲此,我應該從window.performance.timing中使用哪些指標來計算。目前我有一個函數可以返回每個度量標準,但我不確定在計算中使用哪個度量標準。如何在Windows Phone中使用Javascript確定網絡速度

回答

0

你不需要使用JavaScript來測試性能,我不會推薦它。您也可以使用C#,如下所示。

如果使用便攜類libraryHttpClient,你可以下載這樣的文件:

HttpClient httpClient = new HttpClient(); 
HttpResponseMessage response = null; 
try 
{  
    // generate a stream on your sever matching the download size requested  
    response = await httpClient.GetAsync(
     "http://www.example.com/speedtest/?size=Large"); 

    response.EnsureSuccessStatusCode(); // Throws exception if bad HTTP status code 

    // no reason to measure time to save to file system or store the bytes 
    // unnecessarily 
    await response.Content.CopyAsAsync(Stream.Null); 

} 
catch (HttpRequestException hre) 
{ 
    // something went wrong 
} 

裹上面用你的時間代碼來計算下載時間。請記住,無論編程語言如何,執行此類操作都可能消耗大量且不合理的用戶數據計劃。要做一個準確的測試,你需要多次運行以及非常大的下載。我用過的一個測試例如使用了100MB的數據。

在上面的C#代碼,就從這樣的事實中受益,它的使用NullStream這意味着所有所下載的內容的被忽略(而不是暫時複製到像byte陣列將不被使用的結構) 。

鑑於移動/蜂窩網絡的普遍脆弱性,您會注意到測試之間存在很大差異。

如果您打算在應用程序中下載大量內容,我強烈建議您考慮採用更多自適應樣式技術。不要根據「時間點」選擇網絡性能數字,而應使用實際應用程序數據來衡量數據下載的性能,並根據此數據進行更改。

在評論中,您提到使用IE10中新增的performanceTiming對象。雖然你可以構建一個符合標準的網頁,然後將資源放在它上面,然後使用對象的各種事件和屬性,但我認爲它會給Windows Phone應用程序(以及使用C#標記的問題)增加不必要的開銷和複雜性,特別是當你想要做一個特定的獨立測試時。由於您無法控制瀏覽器如何下載內容的性質,因此您需要非常小心地確定只下載「網絡速度」測量資源。

另外請注意,無論使用編程語言/平臺構建測試,您都無法控制運行測試時可能發生的其他後臺下載。

+0

有趣的是,感謝您的解決方案。我計劃使用JavaScript的原因是因爲我正在使用可能在IE10中返回的新window.performance.timing值,並且我已經看到了幾個關於收集數據和根據結果計算性能統計數據的示例的時間API。我還沒有遇到過使用這些數據的一件事,那就是計算連接的速度。我正在嘗試使用下載文件所需的時間和已知的文件大小來創建我自己的解決方案。你會有關於如何在JavaScript中做到這一點的任何信息? – Matthew

+0

我不明白你會如何有效地做到這一點,但是爲什麼我發佈了C#解決方案。您不需要使用JavaScript,也沒有有效的方法來轉儲我所知道的響應。下載大型「blob」來測試JavaScript中的網絡性能可能會導致應用程序出現內存不足錯誤。 – WiredPrairie