Respostas:
Muito pouco por si só, de qualquer forma o DOM estará pronto para você operar (eu estava nervoso com isso até ler no Google ). Se você usar o truque do fim da página, seu código pode ser chamado um pouco antes, mas nada que importe. Mas, o mais importante, essa escolha está relacionada a onde você vincula seu JavaScript à página.
Se você incluir sua script
tag no head
e depender ready
, o navegador encontrará sua script
tag antes de exibir qualquer coisa para o usuário. No curso normal dos eventos, o navegador para de repente e faz o download do seu script, dispara o interpretador JavaScript e entrega o script para ele, em seguida, espera enquanto o interpretador processa o script (e então jQuery observa de várias maneiras para que o DOM esteja pronto). (Digo "no curso normal das coisas" porque alguns navegadores suportam os atributos async
oudefer
nas script
tags.)
Se você incluir sua script
tag no final do body
elemento, o navegador não fará tudo isso até que sua página já esteja amplamente exibida para o usuário. Isso melhora o tempo de carregamento percebido para sua página.
Portanto, para obter o melhor tempo de carregamento percebido, coloque seu script na parte inferior da página. (Essa também é a orientação do pessoal do Yahoo .) E se você vai fazer isso, não há necessidade de usar ready
, embora, é claro, você pudesse, se quisesse.
Porém, há um preço para isso: você precisa ter certeza de que as coisas que o usuário pode ver estão prontas para interagir. Ao mover o tempo de download para depois que a página for amplamente exibida, você aumenta a possibilidade de o usuário começar a interagir com a página antes que seu script seja carregado. Esse é um dos contra-argumentos para colocar a script
tag no final. Freqüentemente, não é um problema, mas você precisa olhar para sua página para ver se é e, em caso afirmativo, como deseja lidar com isso. (Você pode colocar um pequeno elemento embutido script
no head
que configura um manipulador de eventos em todo o documento para lidar com isso. Dessa forma, você obtém o tempo de carregamento aprimorado, mas se eles tentam fazer algo muito cedo, você pode dizer isso a eles ou, melhor, enfileirar o que eles queriam fazer e fazer quando seu script completo estiver pronto.)
Sua página carregará mais lentamente espalhando $(document).ready()
scripts por todo o DOM (em vez de todos no final) porque requer que o jQuery seja carregado de forma síncrona primeiro.
$ = jQuery
. Portanto, você não pode usar $
em seus scripts sem primeiro carregar o jQuery. Essa abordagem força você a carregar o jQuery próximo ao início da página, o que interromperá o carregamento da página até que o jQuery seja totalmente baixado.
Você também não pode async
carregar o jQuery porque, em muitos casos, seu $(document).ready()
(s) script (s) tentarão executar antes que o jQuery seja totalmente carregado de forma assíncrona e causar um erro, porque, novamente, $
ainda não foi definido.
Dito isso, existe uma maneira de enganar o sistema. Definindo essencialmente $
igual a uma função que coloca $(document).ready()
funções em uma fila / matriz. Em seguida, na parte inferior da página, carregue o jQuery, itere na fila e execute $(document).ready()
um de cada vez. Isso permite que você adie o jQuery para o final da página, mas ainda use $
acima dele no DOM. Eu pessoalmente não testei como isso funciona bem, mas a teoria é sólida. A ideia já existe há algum tempo, mas muito, muito raramente a vi implementada. Mas parece uma ótima ideia:
http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax