A Google Closure library team member asserts that waiting for DOMContentReady event is a bad practice.
The short story is that we don’t want
to wait for DOMContentReady (or worse
the load event) since it leads to bad
user experience. The UI is not
responsive until all the DOM has been
loaded from the network. So the
preferred way is to use inline scripts
as soon as possible.
Since they still don’t provide more details on this, so I wonder how they deal with Operation Aborted dialog in IE. This dialog is the only critical reason I know to wait for DOMContentReady (or load) event.
- Do you know any other reason?
- How do you think they deal with that IE issue?
A little explanation first: The point with inline JavaScript is to include it as soon as possible. However, that “possible” is dependent on the DOM nodes that that script requires being declared. For example, if you have some navigation menu that requires JavaScript, you would include the script immediately after the menu is defined in the HTML.
As long as you only address DOM nodes that you know have been declared, you wont run into DOM unavailability problems. As for the IE issue, the developer must strategically include their script so that this doesn’t happen. It’s not really that big of a concern, nor is it difficult to address. The real problem with this is the “big picture”, as described below.
Of course, everything has pros and cons.
Pros
Cons
scriptincludes throughout your presentation, both of which can be difficult to manage. Neither are acceptable in my opinion as well as by a large portion of the community.Do I use this technique? No. I prefer to load all script at the end of the page, just before the closing
</body>tag. In almost every case, this is sufficiently fast for perceived and actual initialization performance of effects and event handlers.Is it okay for other people to use it? Developers are going to do what they want/need to get the job done and to make their clients/bosses/marketing department happy. There are trade-offs, and as long as you understand and manage them, you should be okay either way.