Hi,

could you create a Future in your setupRender and use actual results w/
Future.get() during the rendering?

As Chris said I'd also recommend you looking at the ProgressiveDisplay
component.



On Tue, Apr 14, 2015 at 2:56 PM, Тимур Бухараев <bukhar...@gmail.com> wrote:

> I can't call both in setupRender, because i need one blocking wait to
> receive all requests in parallel.
>
> Steps:
> 1. prepareData(), all components send their request for data, remember all
> requests.
> 2. setupRender(), all components gets data from tokens. getData() could be
> like this:
>    Response getData() {
>        while ( !allRequestsAreRecieved() ) {
>            Thread.sleep( 10 );
>        }
>        return data;
>    }
>
> Now, we if we need 3 data: data1, data2, data3, we dont wait on blocking
> calls 3 times one after one. We do one blocking call. So overall delay
> would be max( delay1. delay2, delay3), not delay1 + delay2 + delay3
>
> On Tue, Apr 14, 2015 at 2:39 PM, Chris Poulsen <mailingl...@nesluop.dk>
> wrote:
>
> > Or maybe you can use progressive display?
> >
> >
> http://jumpstart.doublenegative.com.au/jumpstart7/examples/ajax/progressivedisplayvariations
> >
> > On Tue, Apr 14, 2015 at 1:36 PM, Chris Poulsen <mailingl...@nesluop.dk>
> > wrote:
> >
> > > If your prepareData() is non-blocking, why not just call it right
> before
> > > you do the token.getData() ? (both in setupRender() )
> > >
> > > On Tue, Apr 14, 2015 at 1:03 PM, Тимур Бухараев <bukhar...@gmail.com>
> > > wrote:
> > >
> > >> Hi,
> > >>
> > >> My pages consist page class and several components inside.
> > >>
> > >> Page and its components needs some information from remote services. I
> > get
> > >> this information with blocking calls in setupRender(). For example,
> if i
> > >> need user's profile data, i get it like this:
> > >>
> > >> setupRender() {
> > >>  profileData = loadProfileDate(); // blocking call, waiting for the
> > >> response
> > >> }
> > >>
> > >> And now i can use profileData in render to show some information.
> > >>
> > >> The problem is page and components need many remote data, so there are
> > >> many
> > >> serial requests to remote services. It harms latency, because overall
> > >> latency is sum of serial requests delays.
> > >>
> > >> I have idea to improve latency, sending requests in parallel. I want
> > make
> > >> non blocking function sendRequest, which returns me token. All
> > components
> > >> call non blocking sendRequest for remote data, then i'll wait in
> > blocking
> > >> call waitResponses(), which wait for all responses.Then component get
> > >> their
> > >> data from token.
> > >>
> > >> Some code for illustration:
> > >>
> > >> MyComponent {
> > >>     @Inject
> > >>     private RemoteService remoteService;
> > >>
> > >>     private Token<Response> token;
> > >> }
> > >>
> > >> void prepareData() {
> > >>     token = remoteService.sendRequest(); // non blocking call
> > >> }
> > >>
> > >> void setupRender() {
> > >>     Response response = token.getData(); // first call is blocking,
> wait
> > >> for all responses, other calls just return data;
> > >> }
> > >>
> > >> Why i did not just realize my idea and write this post?
> > >>
> > >> Because i need two separate phases: first for send request, and second
> > for
> > >> prepare rendering. All componets should send in first phase, and after
> > get
> > >> data in second.
> > >>
> > >> Tapestry have setupRender and beginRender, but they have another
> order.
> > It
> > >> call setupRender and beginRender for first component, and then - for
> > >> second. But i need phase 1 calls for all components, then phase 2 call
> > for
> > >> all components.
> > >>
> > >> And now my question is: is there any way in Tapestry to create this
> > >> phases?
> > >> Thank you for your attention, sorry for my English.
> > >>
> > >
> > >
> >
>



-- 
Dmitry Gusev

AnjLab Team
http://anjlab.com

Reply via email to