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

Performance regression in Component.configure() in 1.5

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.5.3
    • 1.5.4, 6.0.0-beta1
    • wicket
    • None

    Description

      Wicket 1.5 is slower than 1.4 in rendering deep component trees.
      See the attached application that adds recursively components with specified depth. In 1.5 it is several times slower than 1.4.

      I found several problems:

      1) org.apache.wicket.Component.configure() calls org.apache.wicket.Component.setRenderAllowed()
      The problems is that configure() is called for each component in the hierarchy and setRenderAllowed() is overwritten in MarkupContainer to visit all children and call it for them. And the final result is that setRenderAllowed() is called for the parent and all its children, then for the first child and all its children again, and so on...

      The solution is to completely remove org.apache.wicket.MarkupContainer.setRenderAllowed()

      2) If you increase the number of components to > 1000 in 1.5 we hit StackOverflowError in
      2.1) org.apache.wicket.MarkupContainer.getMarkupType()
      2.2) org.apache.wicket.Component.getLocale()
      2.3) org.apache.wicket.MarkupContainer.internalMarkRendering(boolean)

      For 2.1 and 2.2 I suggest to add transient fields which will cache the calculated value after the first call of the get method.
      For 2.3 I don't see a solution for now

      Attachments

        1. myproject-1.4.tgz
          5 kB
          Martin Tzvetanov Grigorov
        2. myproject-1.5.tgz
          20 kB
          Martin Tzvetanov Grigorov
        3. WICKET-4278.patch
          2 kB
          Martin Tzvetanov Grigorov
        4. WICKET-4278.patch
          1 kB
          Martin Tzvetanov Grigorov

        Activity

          People

            mgrigorov Martin Tzvetanov Grigorov
            mgrigorov Martin Tzvetanov Grigorov
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: