Hi Kean,

AFAIK, ready() puts the function you passed into an array of
functions. Another function is bound to the DOMContentLoaded event,
which is fired when the DOM is ready on compliant browsers. For the
others, several methods are in place to detect when DOM is loaded.
When the event fires/DOM load is detected, that function starts
calling each of the functions in that array.

Was I clear? :D

In short, ready() stacks functions that will get executed when
DOMContentLoaded fires or the other browser techniques detect DOM is
complete. The slowness in this comes mostly from the overhead of
jQuery's methods. When you call $() jQuery has to:
1. check if you're passing an object/function/array/selector string
2. grab the 'document' object (default)
3. return the jQuery object with document
4. call the ready() method on that object passing your function
5. store the function in an array

that's quite a bit of overhead. this:

(function(){
console.time('a');
for (var i=-1;i<5000;i++){
   $(function(){});
}
console.timeEnd('a');
})();

takes around 200 ms here.

$(document).ready() is a bit faster, around 90ms, probably because it
doesn't run as many conditionals to guess what you want.

hope that was helpful!

cheers,
-ricardo



cheers,
- ricardo

On Dec 31, 1:49 am, Kean <shenan...@gmail.com> wrote:
> No, I don't take that as an insult.
>
> I was just wondering how document ready was coded so it really was
> just a hypothetical question.
>
> Why do I really need so much on ready?
>
> Also, MorningZ, I will be very active in the jQuery mailing list in
> future to learn more js. Perhaps this is not the best starting point
> for us.
>
> On Dec 30, 7:23 pm, MorningZ <morni...@gmail.com> wrote:
>
> > "There probably is a better way to do it. "
>
> > Which is what i was getting at......   i hope "honest" isn't/wasn't
> > taken as "insulting"
>
> > On Dec 30, 10:16 pm, "Michael Geary" <m...@mg.to> wrote:
>
> > > Come on, MorningZ, there's no need for insults.
>
> > > But yes, 5000 of those will be pretty slow - and that's before you even
> > > execute the code inside those functions. How slow? It's easy to test. The
> > > ready functions are run in the order that the $() functions are called. So
> > > simply do this in a test page:
>
> > >     var t1 = +new Date;
> > >     $(function(){});
> > >     // ... Repeat above line 5000 times
> > >     $(function() {
> > >         var t2 = +new Date;
> > >         alert( (t2-t1)/1000 + ' seconds' );
> > >     });
>
> > > You can easily generate that file by hand in a text editor. You don't have
> > > to do 5000 pastes. Start with 10 of them, copy that block and paste it 10
> > > times so you have 100, copy *that* block and paste it 10 times so you have
> > > 1000, copy that and five more pastes and you're done.
>
> > > Test it in IE6 (!), and if you're on your usual development machine, 
> > > triple
> > > the time from the alert to take into account the slower machines that your
> > > visitors will have (think a slow laptop running on battery). If you don't
> > > have IE6, try it in IE7 and as a rough guess, multiply your observed time 
> > > by
> > > six (triple for the slow machines, double again for IE6).
>
> > > Mind if I ask: why do you need 5000 of these? There probably is a better 
> > > way
> > > to do it.
>
> > > -Mike
>
> > > > From: MorningZ
>
> > > > If you've got 5000 of those, it's *seriously* time to
> > > > reconsider your coding techniques.....  depending on that
> > > > much JavaScript is just plain old stupid......
> > > > On Dec 30, 8:59 pm, Kean <shenan...@gmail.com> wrote:
> > > > > Is document ready "actually" an event handler?
>
> > > > > Let's say I have
>
> > > > > $(function(){
>
> > > > > });
>
> > > > > $(function(){
>
> > > > > });
>
> > > > > $(function(){
>
> > > > > });
>
> > > > > $(function(){
>
> > > > > });
>
> > > > > $(function(){
>
> > > > > });
>
> > > > > etc ..... around 5000 of those.
>
> > > > > Will it actually degrade performance like 5000 bind()?
> > > > > My guess is not much performance penalty, but again, it's a guess.

Reply via email to