Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • webconsole-3.1.0
    • webconsole-3.1.2
    • Web Console
    • None

    Description

      When navigating through the Configuration Status tabs, the Services is a little bit slower than others (except Bundles, which is the slowest). I look at the code and it might be improved, to make is faster.

      It seems that implementation now is so slow because first it renders to JSON and then converts he data to text.

      A significant optimization can be achieved if:
      1. Skip to JSON conversion - generate the text directly from the service references.
      2. Improve usage of message formatter by using pre-parsed formatters:

      final MessageFormat format = new MessageFormat(pattern);
      ..
      format.format(object[])

      instead of: MessageFormat.format(pattern, object[])

      3. reuse one Object[] for MessageFormat - this will reduce the temporary objects

      —
      I've also created a prototype and the performance improvement is even visible while browsing the tabs. The measured results are:
      ServicesServlet.printConfiguration(): now = 250
      ServicesConfigurationPrinter.printConfiguration(): now = 140
      ServicesServlet.printConfiguration(): now = 250
      ServicesConfigurationPrinter.printConfiguration(): now = 141
      ServicesServlet.printConfiguration(): now = 265
      ServicesConfigurationPrinter.printConfiguration(): now = 125
      ServicesServlet.printConfiguration(): now = 250

      Attachments

        Activity

          I've committed the optimized version.
          Now the printer is in separate class.

          I'm just wandering what to do with the ServicesServlet.getStatusLine() method. Actually, the plugin (I mean javascript) no longer uses the "status" field, from the JSON data. It uses the serviceCount, to generate localized status message.

          So this method is can be moved to the new ServicesConfigurationPrinter.

          But if we move it there, and remove the "status" from JSON data, then we might break some other bundle. As example, someone did alternative UI for webconsole, but still needs it's JSON serialization data and reads that "status" field.

          To remove or not to remove - that is question
          So, WDYT?

          v_valchev Valentin Valchev added a comment - I've committed the optimized version. Now the printer is in separate class. I'm just wandering what to do with the ServicesServlet.getStatusLine() method. Actually, the plugin (I mean javascript) no longer uses the "status" field, from the JSON data. It uses the serviceCount, to generate localized status message. So this method is can be moved to the new ServicesConfigurationPrinter. But if we move it there, and remove the "status" from JSON data, then we might break some other bundle. As example, someone did alternative UI for webconsole, but still needs it's JSON serialization data and reads that "status" field. To remove or not to remove - that is question So, WDYT?

          I think this can be resolved.

          fmeschbe Felix Meschberger added a comment - I think this can be resolved.

          Apache Felix Web Console 3.1.2 has been released. The issues are now closed.

          fmeschbe Felix Meschberger added a comment - Apache Felix Web Console 3.1.2 has been released. The issues are now closed.

          People

            v_valchev Valentin Valchev
            v_valchev Valentin Valchev
            Votes:
            0 Vote for this issue
            Watchers:
            Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack