在Spring MVC中,从哪里开始和结束计数器来测试速度执行时间?

Bla*_*man 2 java performance spring servlets spring-mvc

我想知道渲染一个特定页面需要多长时间,Spring MVC框架中我可以启动和停止计时器的各个部分在哪里?

顺便说一句,我应该使用什么java类来获得最准确的时间(以毫秒为单位)?

Boz*_*zho 10

  • 创建一个javax.servlet.Filter并在web.xml中将其映射到所有其他过滤器之上.在doFilter(..)你的coutner代码的地方chain.doFilter(request, response)

  • 使用System.currentTimeMillis,或System.nanoTime()(更准确)或perf4j.

这将显示服务器生成响应所需的时间.如果您想在客户端看到页面的完整加载时间,请在Firefox上安装FireBug.


关于如何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
}
Run Code Online (Sandbox Code Playgroud)