Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-1910

ServletWebRequest.isAjax Should be cached

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 1.4-M3
    • 1.4-RC2
    • wicket
    • None
    • Any

    Description

      I was profiling my Wicket application and noticed that Jetty's
      getHeader method was hit quite often.

      It turns out the ServletWebRequest.isAjax method is hit quite often by
      each of the page elements (I am generating a large HTML report page).
      Since the Servlet container may not have optimal design for processing
      the getHeader method, I wonder if the ServletWebRequest.isAjax -method
      could/should be cached within wicket.

      I made the following modification to the ServletWebRequest.isAjax
      method, and measured a notable increase in performance:

      public boolean isAjax() {
      if (ajax == null) {
      ajax = false;

      String ajaxHeader = httpServletRequest.getHeader("Wicket-Ajax");
      if (Strings.isEmpty(ajaxHeader) == false)
      {
      try

      { ajax = Strings.isTrue(ajaxHeader); }

      catch (StringValueConversionException e)

      { // We are not interested in this exception but we log it anyway log.debug("Couldn't convert the Wicket-Ajax header: " + ajaxHeader); }

      }
      }

      return ajax;
      }

      However, my question remains: is this a valid optimization or does it
      break the Wicket framework? Should it somehow be incorporated in the
      next releases?

      Attachments

        1. profile.png
          30 kB
          Martin Terra

        Activity

          People

            jdonnerstag Juegen Donnerstag
            mmakundi Martin Terra
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: