I hope I'm not violating an NDA when I say that SeeSaw, the big UK
video-on-demand Tapestry project, went down this path. They eventually
turned off a huge amount of the features that, to me, make Tapestry
special, including all dynamically generated JavaScript ... mostly to
support more aggressive caching of full pages, or partial pages.

Anyway, at the end of the day, they found that they could have used
Tapestry almost completely vanilla and it wouldn't have affected their
throughput. Their problems were all elsewhere.

Hopefully, Ben or Alfie is on the list to correct me if what I say is
way off the mark.

How are you identifying that rendering is your bottleneck?  Just how
much are you rendering? What tools are you using to gauge performance,
and how are you identifying rendering vs. database access (when they
can easily be mixed together)?

There are a bunch of options out there, including progressive
enhancement, that require much less re-architecting.

You might find that the issue is database queries during rendering; I
know you've mentioned caching is enabled, but that may not be enough.

I'd look for ways to ensure that rendering is not held up by any
database operations:

- try to do all your db queries up front, and in parallel (tricky with
Hibernate and SQL)
- leverage caching
- watch out for n+1 queries (via tripping over entity relationships)

Finally, you may need to think in terms of a in-memory cacheable
version of your data, optimized for quick access during rendering.
That is, do your queries, and convert your entities into some form of
simple DTO.  I would even think that the DTO could be a collection of
public fields (possibly, immutable public fields).  Tapestry 5.3 is
quite happy to treat a public field just like a property.  The DTOs
could contain just the data needed at render time, and could be
denormalized, which is to say, roll data from relationships and/or
inheritance, as much as possible, into a single object.







On Sat, Jul 28, 2012 at 4:11 AM, Jens Breitenstein <mailingl...@j-b-s.de> wrote:
> Hi T5'ers
>
> we have some performance issues and started thinking about caching our pages
> (lets say parts of them to be precise). Due to the fact we are showing user
> related information along with "public information" on a page, we can not
> make use of a simple web proxy caching.
>
> Therefore we are thinking about a "component rendering result cache".
>
> Assume we have several independent components to show an overview of items
> (and we have a lot of items rendered in a loop) and we want to cache the
> rendering result of one of these particular components for several seconds
> before rendering it again (to reflect new items or changes). I am aware this
> means we are showing stale data for some seconds, but honestly this is not
> an issue because after rendering and displaying it in the browser data is
> considerably old anyway :-)
>
> What might be a good place to intercept the rendering and store the output
> from a component and on the other hand use outputraw for sending cached
> data?
> Does anyone tried this before?
>
> Any idea or comment is appreciated, thanks in advance
>
>
> Jens
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>



-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to