根据我的阅读,确定网络速度我需要从具有已知文件大小的Web下载图像,然后确定此过程为我的Mbps计算获取变量所花费的时间。我的第一个问题是,如何使用javascript将图像下载到Windows Phone?我对javascript函数有点熟悉,因为我一直在研究,但我不知道如何告诉函数保存图像的位置。此外,我的猜测是我将使用HTML5新增的导航API来确定下载过程所需的时间。为此,我应该使用window.performance.timing
中的哪些指标来进行此计算。目前我有一个针对每个指标的功能,我可以返回,但我不确定在此计算中使用哪个。
答案 0 :(得分:0)
您不需要使用JavaScript来测试性能,我也不会推荐它。您也可以使用C#,如下所示。
如果您对HttpClient
使用便携式课程library,则可以下载如下文件:
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#代码中,您可以使用Null
Stream
这一事实,这意味着所有下载的内容都会被忽略(而不是暂时复制到像{{{{{ 1}}不会使用的数组。)
考虑到移动/蜂窝网络的普遍脆弱,你会发现测试之间存在很大差异。
如果您计划使用您的应用程序下载大量内容,我强烈建议您考虑采用更多自适应样式技术。不是根据“时间点”选择网络性能数字,而是使用实际应用程序数据测量数据下载的性能,并根据该数据进行更改。
在评论中,您提到使用IE10中提供的较新的performanceTiming
对象。虽然你可以构建一个符合标准的网页,在其上放置资源,然后使用对象的各种事件和属性,我认为它为Windows Phone应用程序增加了不必要的开销和复杂性(以及用C#标记的问题) ,特别是当你想要进行特定的隔离测试时。由于您无法控制浏览器下载内容的性质,因此您需要非常仔细地构建它,以确保仅下载“网络速度”测量资源。
另请注意,无论您在构建测试时使用的编程语言/平台如何,都无法控制运行测试时可能发生的其他后台下载。