[mochikit] Reasons to not use a simple ondomload signal?

2008-05-08 Thread csnyder

Hi MochiKitters,

I've been using the following trick successfully for a few months now.
It _seems_ to work fine cross-browser and cross platform.

script type=text/javascript
  signal(window,'ondomload');
/script
/body
/html

But based on the recent thread about implementing ondomload, I assume
that there must be cases when a simple signal at the end of the dom
isn't enough.

Can anyone give me a quick earful about why the above isn't the best
way to do it?

-- 
Chris Snyder
http://chxo.com/

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
MochiKit group.
To post to this group, send email to mochikit@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/mochikit?hl=en
-~--~~~~--~~--~--~---



[mochikit] Re: Reasons to not use a simple ondomload signal?

2008-05-08 Thread machineghost

As I understand things (and I am by no means a JS event sequence
expert), the ordering is as follows:

1.  Browser reads page line by line; every time it reads enough lines
to complete a JS statement, it executes that statement; meanwhile, non-
JS content is loaded in to the DOM as it is read
2.  Once the browser has finished reading the page it will have a
complete DOM ... in memory.
3.  The browser will then render that DOM tree to your screen.
4.  Once it has finished rendering the DOM tree, it invokes any
onload events.

Technically that's wrong, because the first three things are really
happening simultaneously (ie. the browser starts rendering the top of
the page even before it has a complete DOM loaded), but it's simpler
to think of it that way (because they will almost always finish in
that order).

The problem with your code, as I understand it, is that your code
goes off in #1, which means there is no guarantee that a complete DOM
will exist.  If you instead wait for onLoad though, you have to wait
for the page to render.  So what people who are interested in the
onDOMLoad event are after is getting an event that triggers after 2
but before 3.  That way, you don't have to wait for the page to
render, and as long as your code doesn't require any rendered
information (like what are the dimensions of $('someElement')) it
should work fine.

But all of the above was written with my very flawed understanding of
the JS event model; please take it with a giant helping of salt.

Jeremy

On May 8, 9:37 am, csnyder [EMAIL PROTECTED] wrote:
 Hi MochiKitters,

 I've been using the following trick successfully for a few months now.
 It _seems_ to work fine cross-browser and cross platform.

 script type=text/javascript
   signal(window,'ondomload');
 /script
 /body
 /html

 But based on the recent thread about implementing ondomload, I assume
 that there must be cases when a simple signal at the end of the dom
 isn't enough.

 Can anyone give me a quick earful about why the above isn't the best
 way to do it?

 --
 Chris Snyderhttp://chxo.com/
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
MochiKit group.
To post to this group, send email to mochikit@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/mochikit?hl=en
-~--~~~~--~~--~--~---



[mochikit] Re: Reasons to not use a simple ondomload signal?

2008-05-08 Thread Per Cederberg

Antti Koivisto, one of the Safari browser developers, wrote an
interesting blog entry about page loading recently. It explains some
of the difficulties involved from a browser perspective:

http://webkit.org/blog/166/optimizing-page-loading-in-web-browser/

And a small extract of the most relevant section:

---
Problems start when a document contains references to external
scripts. Any script can call document.write(). Parsing can't proceed
before the script is fully loaded and executed and any
document.write() output has been inserted into the document text.
Since parsing is not proceeding while the script is being loaded no
further requests for other resources are made either. This quickly
leads to a situation where the script is the only resource loading and
connection parallelism does not get exploited at all. A series of
script tags essentially loads serially, hugely amplifying the effect
of latency.
---

So, in my understanding, putting a script tag at the very end of the
HTML text on the page should be nearly identical to actually waiting
for the onDOMLoad event. All the document text should have been parsed
already and be available in the DOM tree.

One of the many issues with onload is also the latency involved in
loading images and CSS files, which actually adds up to quite some
time (as most browsers only request 2 objects simultanously per web
site).

/Per

On Thu, May 8, 2008 at 7:10 PM, machineghost [EMAIL PROTECTED] wrote:

 As I understand things (and I am by no means a JS event sequence
 expert), the ordering is as follows:

 1.  Browser reads page line by line; every time it reads enough lines
 to complete a JS statement, it executes that statement; meanwhile, non-
 JS content is loaded in to the DOM as it is read
 2.  Once the browser has finished reading the page it will have a
 complete DOM ... in memory.
 3.  The browser will then render that DOM tree to your screen.
 4.  Once it has finished rendering the DOM tree, it invokes any
 onload events.

 Technically that's wrong, because the first three things are really
 happening simultaneously (ie. the browser starts rendering the top of
 the page even before it has a complete DOM loaded), but it's simpler
 to think of it that way (because they will almost always finish in
 that order).

 The problem with your code, as I understand it, is that your code
 goes off in #1, which means there is no guarantee that a complete DOM
 will exist.  If you instead wait for onLoad though, you have to wait
 for the page to render.  So what people who are interested in the
 onDOMLoad event are after is getting an event that triggers after 2
 but before 3.  That way, you don't have to wait for the page to
 render, and as long as your code doesn't require any rendered
 information (like what are the dimensions of $('someElement')) it
 should work fine.

 But all of the above was written with my very flawed understanding of
 the JS event model; please take it with a giant helping of salt.

 Jeremy

 On May 8, 9:37 am, csnyder [EMAIL PROTECTED] wrote:
 Hi MochiKitters,

 I've been using the following trick successfully for a few months now.
 It _seems_ to work fine cross-browser and cross platform.

 script type=text/javascript
   signal(window,'ondomload');
 /script
 /body
 /html

 But based on the recent thread about implementing ondomload, I assume
 that there must be cases when a simple signal at the end of the dom
 isn't enough.

 Can anyone give me a quick earful about why the above isn't the best
 way to do it?

 --
 Chris Snyderhttp://chxo.com/
 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
MochiKit group.
To post to this group, send email to mochikit@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/mochikit?hl=en
-~--~~~~--~~--~--~---



[mochikit] Re: Reasons to not use a simple ondomload signal?

2008-05-08 Thread Bob Ippolito

Yeah, the major problem of doing a synthetic ondomload event like that
is that you need to instrument all of your pages with that script tag
at the bottom. It's nicer to do it via DOM calls because you don't
need to change the markup.

-bob

On Thu, May 8, 2008 at 12:16 PM, Per Cederberg [EMAIL PROTECTED] wrote:

 Antti Koivisto, one of the Safari browser developers, wrote an
 interesting blog entry about page loading recently. It explains some
 of the difficulties involved from a browser perspective:

 http://webkit.org/blog/166/optimizing-page-loading-in-web-browser/

 And a small extract of the most relevant section:

 ---
 Problems start when a document contains references to external
 scripts. Any script can call document.write(). Parsing can't proceed
 before the script is fully loaded and executed and any
 document.write() output has been inserted into the document text.
 Since parsing is not proceeding while the script is being loaded no
 further requests for other resources are made either. This quickly
 leads to a situation where the script is the only resource loading and
 connection parallelism does not get exploited at all. A series of
 script tags essentially loads serially, hugely amplifying the effect
 of latency.
 ---

 So, in my understanding, putting a script tag at the very end of the
 HTML text on the page should be nearly identical to actually waiting
 for the onDOMLoad event. All the document text should have been parsed
 already and be available in the DOM tree.

 One of the many issues with onload is also the latency involved in
 loading images and CSS files, which actually adds up to quite some
 time (as most browsers only request 2 objects simultanously per web
 site).

 /Per

 On Thu, May 8, 2008 at 7:10 PM, machineghost [EMAIL PROTECTED] wrote:

 As I understand things (and I am by no means a JS event sequence
 expert), the ordering is as follows:

 1.  Browser reads page line by line; every time it reads enough lines
 to complete a JS statement, it executes that statement; meanwhile, non-
 JS content is loaded in to the DOM as it is read
 2.  Once the browser has finished reading the page it will have a
 complete DOM ... in memory.
 3.  The browser will then render that DOM tree to your screen.
 4.  Once it has finished rendering the DOM tree, it invokes any
 onload events.

 Technically that's wrong, because the first three things are really
 happening simultaneously (ie. the browser starts rendering the top of
 the page even before it has a complete DOM loaded), but it's simpler
 to think of it that way (because they will almost always finish in
 that order).

 The problem with your code, as I understand it, is that your code
 goes off in #1, which means there is no guarantee that a complete DOM
 will exist.  If you instead wait for onLoad though, you have to wait
 for the page to render.  So what people who are interested in the
 onDOMLoad event are after is getting an event that triggers after 2
 but before 3.  That way, you don't have to wait for the page to
 render, and as long as your code doesn't require any rendered
 information (like what are the dimensions of $('someElement')) it
 should work fine.

 But all of the above was written with my very flawed understanding of
 the JS event model; please take it with a giant helping of salt.

 Jeremy

 On May 8, 9:37 am, csnyder [EMAIL PROTECTED] wrote:
 Hi MochiKitters,

 I've been using the following trick successfully for a few months now.
 It _seems_ to work fine cross-browser and cross platform.

 script type=text/javascript
   signal(window,'ondomload');
 /script
 /body
 /html

 But based on the recent thread about implementing ondomload, I assume
 that there must be cases when a simple signal at the end of the dom
 isn't enough.

 Can anyone give me a quick earful about why the above isn't the best
 way to do it?

 --
 Chris Snyderhttp://chxo.com/
 


 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
MochiKit group.
To post to this group, send email to mochikit@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/mochikit?hl=en
-~--~~~~--~~--~--~---