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.