sorry, some mistake in sequence

it should be:
component1.setupRender();
other component1 rendering
component2.setupRender();
other component2 rendering

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

> Hello,
>
> Future would not helps, because components renders one after one.
> For example page contains component1 and component2.
>
> The render sequence is next:
>
> component1.setupRender();
> other component1 rendering
> component1.setupRender();
> other component2 rendering
>
> So if i create Future in setupRender and get result, i get delay1 in
> rendering component1, and delay2 in rendering component2. Overall delay
> would be delay1+delay2.
> If page is complex and contains many independent components which call
> many remote services, overall delay could be very much.
>
>
> Thank you and Chris for ProgressiveDisplay recommending, i'll look it.
>
> On Tue, Apr 14, 2015 at 3:00 PM, Dmitry Gusev <dmitry.gu...@gmail.com>
> wrote:
>
>> 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