Usted mencionó tres lugares:
En las etiquetas;
En el HTML; y
En un archivo externo.
Déjame abordar cada uno de esos.
La mejor práctica es tener común Javascript en uno o más archivos externos y cuanto menos archivos mejor, ya que cada archivo JS cargado bloqueará la carga de la página hasta que se cargue ese archivo JS.
La palabra "común" es extremadamente importante. Lo que eso significa es que no desea poner el código de JavaScript específico de la página en ese archivo externo por razones de almacenamiento en caché. Digamos que tienes un sitio con 1000 páginas. Cada página tiene un código JS específico. Eso podría ser 1000 archivos diferentes o un archivo realmente grande que ejecuta una gran cantidad de código innecesario (por ejemplo, buscar ID que no están en esa página en particular, pero están en uno de los 999 otros). Ninguno de estos resultados es bueno.
El primero le da poco impulso de almacenamiento en caché. El segundo puede tener tiempos de carga de página terribles.
Así que lo que debes hacer es poner todas las funciones comunes en un solo archivo JS donde el archivo JS solo contiene funciones. En cada página HTML, llama a las funciones de JS necesarias para esa página.
Idealmente, sus archivos JS también se almacenan en caché de forma efectiva. La mejor práctica es utilizar un encabezado HTTP Expires de mucho futuro y un número de versión para que el archivo JS solo se cargue una vez en cada navegador, sin importar cuántas páginas visiten. Cuando cambia el archivo, cambia el número de versión y fuerza una recarga. Usando -mtime (hora de última modificación del archivo JS) es un esquema común, dando como URL:
<script type="text/javascript" src="/js/script.js?1233454455"></script>
donde se genera automáticamente que -mtime. Su servidor web está configurado para servir archivos JS con un encabezado Expires apropiado.
Así que mezcla los archivos externos y scripts en páginas de (en mi humilde opinión) la mejor manera posible.
El último lugar que mencionó estaba en la etiqueta. Aquí depende un poco de las bibliotecas y frameworks JS que use.Soy un gran admirador de jQuery, que alienta discreto Javascript. Eso significa que (con suerte) no coloque ningún Javascript en su marcado en absoluto. Así que en lugar de:
<a href="#" onclick="doStuff(); return false;">do stuff</a>
haces:
<a href="#" id="dostuff">do stuff</a>
con Javascript:
$(function() {
$("#dostuff").click(doStuff);
});
Puede aclarar en la etiqueta o en la etiqueta? –
Por "en la etiqueta", quise decir entre las etiquetas '
' y ''. Lo mismo ocurre con ''. – NessDanposible duplicado de http://stackoverflow.com/questions/1013112/where-should-i-declare-javascript-files-used-in-my-page-headhead-or-near – CMS