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


问题内容

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

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


问题答案:
  • 创建一个,javax.servlet.Filter并将其映射到所有其他过滤器上方的web.xml中。在doFilter(..)您的客户代码周围chain.doFilter(request, response)

  • 使用System.currentTimeMillisSystem.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
}