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. >