在Spring MVC中,在哪里开始和结束计数器以测试速度执行时间?
问题内容:
我想知道特定页面的渲染需要多长时间,Spring MVC框架中可以启动和停止计时器的各个部分在哪里?
顺便说一句,我应该使用哪个java类来获取最准确的时间(以毫秒为单位)?
问题答案:
-
创建一个,
javax.servlet.Filter
并将其映射到所有其他过滤器上方的web.xml中。在doFilter(..)
您的客户代码周围chain.doFilter(request, response)
-
使用
System.currentTimeMillis
或System.nanoTime()
(更准确)或perf4j。
这将显示服务器生成响应花费了多少时间。如果要在客户端看到页面的完整加载时间,请在firefox上安装FireBug。
关于a Filter
操作方式的注释。请求 进来 ,并作为参数传递给传递 第一过滤器
中的链。现在,筛选器可以决定继续执行或停止执行。如果选择继续,它将调用.chain.doFilter(..)
。现在,针对该资源的所有定义的过滤器都会发生同样的情况,最终流到达目标Servlet
(在本例中为DispatcherServlet
)。当doGet(..)
/
doPost(..)
方法完成后,程序流,在逻辑上,返回给调用者-即,在链中的最后一个过滤器。完成后,程序流程将返回上面的流程,直到到达第一个已调用的过滤器为止chain.doFilter(..)
。那是您进行时序计算的那一行。当第一个过滤器返回时,流程进入servlet容器内部,不久响应被发送到浏览器。因此,您的代码将是:
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain) {
long start = System.nanoTime();
chain.doFilter(request, response);
long end = System.nanoTime();
// log end-start
}