我将测试我的网站速度,主要是网络服务器延迟。总结一下我想要实现的目标:
1)在我的网站上托管javascript的网页(http://myweb.com/test-speed.html)
2)我把这个网址给了我的朋友
3)他们不需要做任何事情,他们只需要访问这个网页,然后在网页上打印出延迟。
4)如果网页也可以告诉访问者所处的状态(使用IP地址范围数据库),那将是一个加号。
任何现有解决方案? 我可以修改javascript来将数据记录到数据库中,但我认为这里的核心是如何编写javascript以了解延迟。
答案 0 :(得分:8)
网络速度与网页加载延迟完全不同,因为后者包括许多其他因素,如服务器端计算时间,关联请求和缓存,渲染,异步元素等。
实际上,以下解决方案将测试发送GET请求与完全接收响应主体之间(但在呈现任何内容或检索任何关联资产之前)之间的持续时间。虽然您可以自由地使用替代实现,但我使用jQuery框架稍微简化了XHR创建过程。
// prepare the XHR object
$.ajax({
beforeSend: function(){
// right before firing off the request, create a global object that includes the request send time
window.startTime = new Date();
},
// send the request to the root URI of this host
url: '/',
success: function(){
// once the request comes back, record the end time
window.endTime = new Date();
// take the difference, which will yield a number in milliseconds, and print it out
document.write(window.endTime - window.startTime + " ms");
}
});
只需将其放在页面上的<script>
标记中,就可以了。根据需要修改document.write
电话,将其置于更显眼的位置。此外,您可以随后在监控Web服务中插入后续调用,以将其写入数据库。
网上有很多关于地理位置的教程,所以其中任何一个都可以。您可以利用Geolocation API,但更有可能的是,您只需按IP地址执行此操作即可,因为这实际上对您的需求更为重要。为此,有大量的在线Web服务可以为您提供基于IP的地理定位。这当然可以在服务器端完成,因此精确的实现将取决于您的技术。
答案 1 :(得分:2)
我认为您可以使用以下方式进行基本延迟测试:
<script type="text/javascript">
var time1 = new Date();
</script>
<script type="text/javascript" src="latency.js"></script>
latency.js会:
var time2 = new Date();
我相信time2 - time1
应该是粗略的往返延迟。这是执行latency.js
GET请求并接收单行响应所需的时间。这不精确,因为我们包括用于处理数据包的时间,传输实际行(这取决于带宽,而不是延迟),以及解析和执行JavaScript。
然而,延迟应该仍占主导地位。
如上所述,4。是标准的IP地理定位。 This是使用google.loader.ClientLocation
的简单工作演示。 google.loader.ClientLocation.address.region
应该是美国的州。
答案 2 :(得分:2)
var startTime = new Date;
var roundTripLatencyInMS = new Date-startTime;
。谷歌地理定位与您的第二个问题无关,或提出单独的问题。
答案 3 :(得分:0)