我创建了一个使用XML的简单休息服务POST方法。我用Jersey创建了一个REST客户端并创建了我的对象,我试图通过增加我的XML长度,通过为我的对象提供更大的输入来查看响应时间的变化。比如说,我的对象占用了一个简单的员工细节,我会增加。我看到响应时间不一致,从我的观察来看,它不依赖于xml的大小。我计算的时间如下。
long startTime = System.currentTimeMillis();
// enter code here for post `
long elapsedTime = System.currentTimeMillis() - startTime;
请建议是否有更好的方法。
这里我想澄清的是我的服务器在本地主机中以及响应时间变化的原因(一旦它是88ms而另一次是504ms)。我期望的是,当我向我的xml对象提供更大的输入时,它应该增加,但这不会发生,因为我观察。请澄清或指出一个更好的网站或书籍,我可以阅读相同的内容。
答案 0 :(得分:0)
使用System.nanoTime而不是currentTimeMillis;还要注意Java会在运行中进行优化,如果您不首先对服务器进行加热,那么您将对字节代码进行时序解释执行,然后在某些时候它将翻转为本机字节代码。时间因输入长度而不同(在类似功能的步骤中),但在您看到之前,您需要克服一定量的噪音。很多来自GC,很多来自线程调度和操作系统问题。
我建议机械同情小组讨论这类事情。关于如何测量这些类型的系统有很多讨论。 https://groups.google.com/forum/#!forum/mechanical-sympathy
答案 1 :(得分:0)
请注意,您的问题相当广泛(可能会因此而关闭)。我的解释同样广泛,只是为了让您了解为什么可能看到您所看到的行为。
考虑到你的时间长达数百毫秒,你测量时间的方式不太可能产生很大的不同。您调用的网站更有可能需要更长的时间来响应。
将其与您在Google中输入搜索查询时所看到的内容进行比较可能会有所帮助。有时响应会立即弹出"但有时需要花费一些时间才能加载。由于您为每次搜索都使用相同的浏览器,因此它不会成为造成差异的浏览器。
相反,Web服务中的某些内容可能会在调用之间发生变化。在Google搜索示例中,您可能会被路由到其他Google服务器,服务器可能正在使用其他存储进行搜索,查询可能会在某个时候缓存等等。
因此,通过简单地查看客户端代码,无法确定调用之间性能的差异。相反,您应该查看服务器代码并分析不同调用的情况。