qual é a diferença / vantagem / desvantagem de escrever o script na parte inferior da página e escrever o script em
$(document).ready(function(){});
javascript
jquery
Sourav
fonte
fonte
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 nohead
e dependerready
, o navegador encontrará suascript
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 atributosasync
oudefer
nasscript
tags.)Se você incluir sua
script
tag no final dobody
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 embutidoscript
nohead
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.)fonte
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
fonte