Hi
OK lets assume you have a sidebar that shows some dynamic content:
*sidebar.dust:*
<ul>
{#sidebar}
<li>{.}</li>
{/sidebar}
</ul>
and you reference this template from the main tamplate with simple
{>sidebar/}
you also have an initialized view base like so:
var base = dust.makeBase({
sidebar: function(chunk, context, bodies){
return chunk.map(function(chunk) {
setTimeout(function() {
chunk.render(bodies.block, context.push('a'))
.render(bodies.block, context.push('b'))
.render(bodies.block, context.push('c'))
.end();
}, 1000);
});
}
}
the {#sidebar} will call the function and the body will be rendered after
the timeout 3 times and the outcome will be
<ul><li>a</li><li>b</li><li>c</li></ul>
the setTimeout is to only simulate that there is some io going on
this approach is very nice if you have multiple such views that need to do
some io as it will be done in parallel and thus will lower the total wait
time for the user
this is only an example and i don't recommend on putting all your helpers i
the base of all your views :)
btw, while working on my project i created a module to load dust templates
and bind snippets when ill have time to make it publishable ill announce it
here
Regards Michał Kruk
On Tue, Nov 27, 2012 at 6:45 PM, Oliver Leics <[email protected]>wrote:
> What about this MetaTemplate:
>
> <html>
> <head>
> {css}
> </head>
> <body>
> {header} <- fast - gives the user the "that site answers quick"
> {breadcrumbs} <- slower than the header but displays quicker than the
> next:
> {db crud stuff} <- slow. sometimes realy slow.
> {footer} <- fast too, but has to wait for {db crud stuff}
> {javascript}
> </body>
> </html>
>
> The idea is to give the user the "that site answers quick" experience.
>
> On Tue, Nov 27, 2012 at 6:00 PM, Jeff Barczewski
> <[email protected]> wrote:
> > I don't believe you understood my example.
> >
> > It is the fetching of the main data that will be expensive in my example,
> > maybe it is the result of many hits to multiple databases, complex join,
> or
> > a map reduce.
> >
> > However the browser also needs to fetch and parse all the other
> resources it
> > needs to be able to display the page.
> >
> > So rather than wait for everything before you deliver the page and then
> it
> > still may have to fetch and parse javascript and css after it gets the
> page,
> > if you instead were streaming the page and the head went first, then the
> > browser could be fetching any resources it needs, parsing them and be
> ready
> > once the data can be delivered.
> >
> > We are talking about optimizing the time it takes for the browser to
> have a
> > usable page (meaning it has fetched all its resources and parsed them).
> >
> > If you wait and deliver only a fully rendered template, the browser might
> > still need to fetch and parse other resources after it receives the
> HTML, so
> > there will be a delay and possibly the data could be presented without
> style
> > until it has time to fetch and re-render.
> >
> > Thus with async rendering, you can potentially improve the time it takes
> to
> > be ready to use a page by doing things while waiting on others.
> >
> >
> >
> > On Tuesday, 27 November 2012 10:35:59 UTC-6, Вадим Барышев wrote:
> >>
> >> Rendering of templates is very-very fast Task, because it just
> >> concatenation function. Less than 0.1ms. What wasting time do you mean?
> You
> >> can waitng all data, and push it all into template engine. It will be
> faster
> >> than if you do it by parts, because synchronous algorithm of template
> engine
> >> faster and easier than asynchronous.
> >>
> >> вторник, 27 ноября 2012 г., 20:26:56 UTC+4 пользователь Jeff Barczewski
> >> написал:
> >>>
> >>> @Oliver Here is an example where an asynchronous template engine like
> >>> dust could provide a nice optimization in time to render a page from
> server
> >>> to browser.
> >>>
> >>> Let's say a dynamic page on the server is rendered from a layout and it
> >>> depends on several pieces of data from the database all of which can
> vary
> >>> from page to page:
> >>>
> >>> - javascript
> >>> - css
> >>> - main data
> >>>
> >>> I can fetch all of them in parallel from one or more databases and as
> >>> soon as I have the javascript and css, I can start rendering and
> streaming
> >>> the head, so the browser can fetch and parse, then when the data is
> ready, I
> >>> stream the rest.
> >>>
> >>> Assuming the javascript and css data can be fetched more rapidly than
> the
> >>> main data (which could be using a complicated query), then I am not
> wasting
> >>> time waiting for everything, the browser can be using the time to
> prepare
> >>> what it has, then when the final data arrives, it can instantly finish
> the
> >>> render.
> >>>
> >>> Given this template:
> >>>
> >>>
> >>> <html>
> >>> <head>
> >>> {javascript}
> >>> {css}
> >>> </head>
> >>> <body>
> >>> {mainData}
> >>> </body>
> >>> </html>
> >>>
> >>>
> >>>
> >>> It can stream the template in chunks from the server to the browser,
> >>> blocking at {javascript} until it has that data, then blocking at
> {css},
> >>> then {mainData}.
> >>>
> >>> So as the data becomes available, more chunks can be delivered to the
> >>> browser. Assuming these are all fetched in parallel and that
> javascript and
> >>> css return first, we will have a nice optimization by being able to
> get the
> >>> browser javascript and css to parse, while it is waiting for the main
> part
> >>> of the page.
> >>>
> >>> It is mostly useful for rendering templates on the server. If you are
> >>> rendering on the client, then you will likely be synchronous.
> >>>
> >>>
> >>> Jeff
>
>
>
> --
> Oliver Leics @ G+
> https://plus.google.com/112912441146721682527
>
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>
--
Job Board: http://jobs.nodejs.org/
Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en