[ 
https://issues.apache.org/jira/browse/FELIX-2282?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Valentin Valchev updated FELIX-2282:
------------------------------------

    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

  was:
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:
{code}
final MessageFormat format = new MessageFormat(pattern);
..
format.format(object[])
{code}
instead of 
{code}
MessageFormat.format(pattern, object[])
{code}
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


> Optimize Services Printer
> -------------------------
>
>                 Key: FELIX-2282
>                 URL: https://issues.apache.org/jira/browse/FELIX-2282
>             Project: Felix
>          Issue Type: Improvement
>          Components: Web Console
>    Affects Versions: webconsole-3.0.0
>            Reporter: Valentin Valchev
>             Fix For: webconsole-3.0.2
>
>         Attachments: ServicesConfigurationPrinter.java
>
>
> 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

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to