myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Leonardo Uribe <lu4...@gmail.com>
Subject Re: Weird PlexusContainer object in ViewRoot
Date Tue, 10 Jan 2012 22:47:06 GMT
Hi

Thanks for your interest about doing these comparisons.

2012/1/10 Thomas Andraschko <zoigln@googlemail.com>:
> So, here are finally some results from JMeter for 600 requests. Both
> MyFaces and Mojarra runs on Jetty8.
>
> http://img59.imageshack.us/img59/4720/stateless.jpg
>
> AFAICS MyFaces performs better on postbacks but Mojarra seems to be faster
> for get requests.
>

Yes, MyFaces has some smart optimizations in that part that avoids
process the view before render view (second call to buildView), and
there are other improvements inside facelets algorithm that at the end
reduce the time required to build a view.

> Anybody knows why Mojarra is a lot faster for the first example (Simple
> page with 2000 items in a h:datatable) under load?
>

Doing some black box tests with NetBeans Profiler, I notice Mojarra
has some optimizations in the renderer part. The bottleneck is caused
because MyFaces did many unnecessary calls to HashMap.get() (one per
property). This was improved using a "flag" property for common
passthrough attributes, just like in the old times when memory was
scarce and assembler was the king. That optimization is still
incomplete, but I already have it on my laptop (without review), so
I'll commit that code in a few days.

Another hot spot is our ResponseWriter implementation. It creates a
lot of StringBuilder instances, but it is possible to rearrange the
code to eliminate them and write directly over the stream, or like
trinidad does, reuse the same instance over and over. Again, I already
have the code but it will take some days to review and commit.

The good news are with these changes and other improvements already
done / todo , MyFaces can become even faster and lighter, requiring
less memory resources. Maybe with these changes it could be faster
than Mojarra in all situations (note I'm speculating here and I don't
have the data that prove that (not yet but soon) ).

> Also i sent back the the code to rudy for 3 weeks ago but he did not shared
> / posted it. Now i completely refactored the code again and added complete
> MyFaces compatibility.
> Is anyone interested in this extension?
> Where could i share it?
> I could add it as submodule to primefaces-extensions but it has nothing to
> do with primefaces...
> MyFaces Extension or else would be great :D
>

Maybe apache extras is a good place (I don't know if the code can be
licensed under ASL v2). I think it is a interesting goodie, and maybe
a good place could be MyFaces commons.

regards,

Leonardo Uribe

>
> 2012/1/5 Thomas Andraschko <zoigln@googlemail.com>
>
>> Hi Mark,
>>
>> thanks for sharing your request times!
>>
>> don't know but it's really that slow^^
>> Currently the test page is embedded in a private project but i will create
>> an own test project only for "stateless-jsf".
>> I will also do some load tests with JMeter and share the result then.
>>
>> Hopefully MYFACES-3266 can be done in the next versions, this blows up my
>> code :)
>>
>> Best regards,
>> Thomas
>>
>>
>> 2011/12/31 Mark Struberg <struberg@yahoo.de>
>>
>>> MyFaces is faster, but I didn't think that Mojarra is so slow ^^.
>>> Our fat pages (~2000 lines in a complex h:dataTable -> more than 300.000
>>> ELResolver invocations) use to take up to 350ms. Small pages render in 17ms
>>> on our Server with OWB and MyFaces.
>>>
>>> I once tested the fat pages with Glassfish and didn't came under 5
>>> seconds. But this was quite some time ago when Weld used to be much slower
>>> (we now gave them a few hints on performance improvements in the meantme)
>>> and the Sun EL impl had some serious performance hogs.
>>>
>>>
>>> Is your test page setup freely available? You might share your findings
>>> with the Mojarra team. They might be interested to check where they have
>>> problematic spots.
>>>
>>> LieGrue,
>>> strub
>>>
>>>
>>> ----- Original Message -----
>>> > From: Thomas Andraschko <zoigln@googlemail.com>
>>> > To: MyFaces Discussion <users@myfaces.apache.org>
>>> > Cc:
>>> > Sent: Saturday, December 31, 2011 4:21 AM
>>> > Subject: Re: Weird PlexusContainer object in ViewRoot
>>> >
>>> > Hi,
>>> >
>>> > so i just did some final tests and these are the result with MyFaces
>>> and a
>>> > simple test page.
>>> > The values are not really accurate, i just tested in on my locale system
>>> > with firebug for around 10-15 times.
>>> >
>>> > AJAX PostBacks (Production):
>>> > Before: 32-52ms
>>> > After: 23-37ms
>>> >
>>> > PostBack (Production):
>>> > Before: 27ms
>>> > After: 12ms
>>> >
>>> > The same page with Mojarra:
>>> >
>>> > AJAX PostBacks (Production):
>>> > Before: 148-196ms
>>> > After: 26-50ms
>>> >
>>> > PostBack (Production):
>>> > Before: 140-170ms
>>> > After: 15-27ms
>>> >
>>> > Also if the values are not really accurate, is MyFaces really that much
>>> > faster?
>>> >
>>> > You said that you use a simliar plugin for stateless views.
>>> > How does your plugin work? Some details would be great :)
>>> >
>>> > Best regards
>>> > Thomas
>>> >
>>> > 2011/12/30 Thomas Andraschko <zoigln@googlemail.com>
>>> >
>>> >>  Hi,
>>> >>
>>> >>  yep, thanks!
>>> >>  I completly redeveloped it (i also contributed the new code back)
and
>>> i
>>> >>  just test it but the improvement is similar - it's much faster!
>>> >>  I can post the detail later :)
>>> >>
>>> >>
>>> >>
>>> >>  2011/12/30 Martin Koci <martin.kocicak.koci@gmail.com>
>>> >>
>>> >>>  Hi,
>>> >>>
>>> >>>  do you mean non-static logger in myfaces UIViewRoot ? That is
>>> probably
>>> >>>  problem [1] - I must solve it finally.
>>> >>>
>>> >>>  I checked quickly statelessjsf - we use similar solution in some
jsf
>>> >>>  project - completely stateless views.
>>> >>>
>>> >>>  Which improvement do you see with myfaces + statelessjsf? The
blog
>>> [2]
>>> >>>  shows at the first picture time 98ms vs. 7ms : 90% improvement:
did
>>> you
>>> >>>  get similar results with myfaces?
>>> >>>
>>> >>>  Regards,
>>> >>>
>>> >>>  Kočičák
>>> >>>
>>> >>>  [1] https://issues.apache.org/jira/browse/MYFACES-3266
>>> >>>  [2]
>>> >>>
>>> >>>
>>> >
>>> http://industrieit.com/blog/2011/11/stateless-jsf-high-performance-zero-per-request-memory-overhead/
>>> >>>
>>> >>>  Thomas Andraschko píše v Pá 30. 12. 2011 v 12:43 +0100:
>>> >>>  > Hi,
>>> >>>  >
>>> >>>  > thanks for you answer :)
>>> >>>  > Jap, i deploy it with jetty:run.
>>> >>>  > I already found the issue, somehow this objects are stored
in the
>>> >>>  Logger.
>>> >>>  > I changed the code that the logger will be removed before
cloning
>>> > the
>>> >>>  > ViewRoot.
>>> >>>  > Now it also works with MyFaces :)
>>> >>>  >
>>> >>>  > Thomas
>>> >>>  >
>>> >>>  > 2011/12/30 Martin Koci <martin.kocicak.koci@gmail.com>
>>> >>>  >
>>> >>>  > > Hi,
>>> >>>  > >
>>> >>>  > > Plexus container is a IoC container used by Maven, so
this
>>> > must be
>>> >>>  > > bug/feature in maven jetty plugin in combination with
>>> > statelessjsf. Do
>>> >>>  > > you deploy it with mvn jetty:run?
>>> >>>  > >
>>> >>>  > > Regards,
>>> >>>  > >
>>> >>>  > > Kočičák
>>> >>>  > >
>>> >>>  > > Thomas Andraschko píše v Út 27. 12. 2011 v 15:00
+0100:
>>> >>>  > > > Hi,
>>> >>>  > > >
>>> >>>  > > > i'm trying to use the statelessjsf addon (It's
a
>>> > addon developed by
>>> >>>  > > > industrieit from rudy but the link is currently
offline)
>>> > for my
>>> >>>  > > > application. In a basic sample application it works
with
>>> > myfaces
>>> >>>  (with
>>> >>>  > > some
>>> >>>  > > > modification) and mojarra.
>>> >>>  > > > Somehow in my real project, i get an exception
when the
>>> > addon is
>>> >>>  trying
>>> >>>  > > to
>>> >>>  > > > clone the viewroot:
>>> >>>  > > >
>>> >>>  > > > java.lang.IllegalArgumentException: Can not set
>>> >>>  > > > org.codehaus.plexus.PlexusContainer field
>>> >>>  > > >
>>> >>>  org.codehaus.plexus.archiver.manager.DefaultArchiverManager.container
>>> > to
>>> >>>  > > >
>>> > org.codehaus.plexus.archiver.manager.DefaultArchiverManager
>>> >>>  > > >     at
>>> >>>  > > >
>>> >>>  > >
>>> >>>
>>> >
>>> sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
>>> >>>  > > >     at
>>> >>>  > > >
>>> >>>  > >
>>> >>>
>>> >
>>> sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
>>> >>>  > > >     at
>>> >>>  > > >
>>> >>>  > >
>>> >>>
>>> >
>>> sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37)
>>> >>>  > > >     at
>>> >>>  > > >
>>> >>>  > >
>>> >>>
>>> >
>>> sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:57)
>>> >>>  > > >
>>> >>>  > > > This does only occur if i run the application within
>>> > maven and
>>> >>>  jetty. On
>>> >>>  > > > Tomcat, no exception occurs.
>>> >>>  > > > Where does this Plexus stuff come from? Why is
it in the
>>> > view root?
>>> >>>  > > >
>>> >>>  > > > Thanks and best regards
>>> >>>  > > > Thomas
>>> >>>  > >
>>> >>>  > >
>>> >>>  > >
>>> >>>
>>> >>>
>>> >>>
>>> >>
>>> >
>>>
>>
>>

Mime
View raw message