Hacer referencia a javascript externo en lugar de alojar mi propia copia

40

Supongamos que tengo una aplicación web que utiliza jQuery. Es una mejor práctica alojar los archivos javascript necesarios en mis propios servidores junto con los archivos de mi sitio web, o hacer referencia a ellos en el CDN de jQuery (ejemplo: enlace )?

Puedo ver profesionales para ambos lados:

  • Si está en mis servidores, es una dependencia externa menos; Si jQuery bajó o cambió su estructura de alojamiento o algo así, entonces mi aplicación se rompe. Pero siento que eso no sucederá a menudo; debe haber muchos sitios de poco tiempo haciendo esto, y el equipo de jQuery querrá evitar romperlos.
  • Si está en mis servidores, es una referencia externa menos que alguien podría llamar un problema de seguridad
  • Si se hace referencia externamente, no tengo que preocuparme por el ancho de banda para servir los archivos (aunque sé que no es mucho).
  • Si se hace referencia externa y estoy implementando este sitio web en muchos servidores que necesitan tener sus propias copias de todos los archivos, entonces es un archivo menos que debo recordar para copiar / actualizar.
pregunta Mr. Jefferson 12.03.2012 - 18:13

7 respuestas

58

Debes hacer ambas cosas:

Comience con el alojamiento desde un CDN como Google , ya que probablemente tendrá un nivel más alto. -tiempo que su propio sitio y se configurará para el tiempo de respuesta más rápido. Además, cualquier persona que haya visitado una página que enlaza con la CDN utilizará su copia en caché del archivo, por lo que ni siquiera tendrá que volver a descargar una copia, lo que hará que la carga inicial sea aún más rápida.

Luego, agregue una referencia de respaldo a su propio servidor en caso de que el CDN esté fuera de servicio (no es probable, pero seguro es seguro). Los fallbacks son relativamente fáciles de entender, pero deben personalizarse para adaptarse al script que se está utilizando:

<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script><script>if(!window.jQuery)document.write('<scriptsrc="/path/to/jquery-ver.sion.min.js"><\/script>');
</script>

Asegúrese de no escribir </script> en ningún lugar dentro de un elemento <script> , ya que cerrará el elemento HTML y hará que falle la secuencia de comandos. La solución simple es usar una barra invertida como escape: <\/script> .

Una razón más para hacer ambas cosas:

Si elige un CDN popular, es muy improbable que tenga algún tiempo de inactividad, sin embargo, en el futuro lejano lejos (de aquí a 18 meses desde ahora La ley de Moore ) cuando el formato de alojamiento cambia, o la dirección se ajusta, o la red se coloca detrás de un muro de pago, o cualquier otra cosa, es posible que Tu enlace ya no funcionará como está. Si utiliza un respaldo, entonces le dará un poco de tiempo para adaptarse a cualquier nuevo formato de alojamiento antes de tener que volver a visitar todos los sitios web que haya creado y cambiar los enlaces de CDN.

otra razón para hacer ambas cosas:

Recientemente he sido golpeado con una serie de cortes de Internet. Pude seguir trabajando localmente en proyectos en los que había vinculado copias locales de recursos de script, y rápidamente descubrí que había una serie de proyectos que necesitaban tener copias locales vinculadas.

    
respondido por el zzzzBov 12.03.2012 - 19:01
34

Tenía la misma pregunta, luego leí esto artículo y me vendieron la idea de permitir que Google aloje mi biblioteca jQuery.

El artículo establece los principales beneficios de permitir que sus bibliotecas sean alojadas por la Red de entrega de contenido (CDN) de Google:

  • Disminución de la latencia : los usuarios que no se encuentren físicamente cerca de su servidor podrán descargar jQuery más rápido desde Google que si los obliga a descargarlo desde su servidor ubicado arbitrariamente.
  • Aumento del paralelismo : los navegadores limitan el número de conexiones que se pueden realizar simultáneamente. Dependiendo de qué navegador, este límite puede ser tan bajo como dos conexiones por nombre de host. El uso de Google AJAX Libraries CDN elimina una solicitud a su sitio, permitiendo que se descargue más contenido local en paralelo.
  • Mejor almacenamiento en caché : utilizando las bibliotecas AJAX de Google, es posible que sus usuarios no necesiten descargar jQuery en absoluto. Por otro lado, si está alojando jQuery localmente, sus usuarios deben descargarlo al menos una vez. Es probable que cada uno de sus usuarios ya tenga docenas de copias idénticas de jQuery en el caché de su navegador, pero esas copias de jQuery se ignoran cuando visitan su sitio.

En cuanto a las dos viñetas que enumeró como profesionales para alojar su propia biblioteca, recuerde que es Google la versión de la nube, y Google sabe lo que están haciendo y puede confiar en su disponibilidad y seguridad. Sin embargo, @zzzzBov hace un muy buen punto en su respuesta a esta pregunta, donde recomienda también almacenar una copia local de la biblioteca y omitirla en el improbable caso de que no se pueda acceder a la versión CDN por cualquier motivo.

    
respondido por el CFL_Jeff 12.03.2012 - 18:23
17

Personalmente, tomo el ejemplo de enlace

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="includes/js/libs/jquery-1.6.1.min.js"%3E%3C/script%3E'))</script>

Esto extrae el archivo principal de jQuery de Google, pero si no se carga por alguna razón, la siguiente línea lo carga desde su propio servidor.

    
respondido por el Adrian J. Moreno 12.03.2012 - 18:57
5

Es una mejor práctica usar un CDN, y si ese CDN es Google, mejor aún, como lo han señalado tanto @CFL_Jeff como @Morons.

Estoy agregando esta respuesta para señalar algo que a menudo se pasa por alto al señalar en otra parte, que es evitar la advertencia de contenido mixto . Considere el uso de URL sin protocolo, por ejemplo:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js" type="text/javascript">
</script>

Todavía hay algunos problemas de compatibilidad con el uso de URL sin protocolo, así que también eche un vistazo a las respuestas en ¿Puedo cambiar todos mis enlaces http: // a solo //? en SO, pero al menos trate de manejar posibles advertencias de contenido mixto en algunas manera.

    
respondido por el jcmeloni 12.03.2012 - 18:56
4

Debe hacer referencia a Biblioteca de API de Google ..

La razón principal de esto es acelerar las cargas de tu página . Si su usuario ya ha visitado otro sitio que hace referencia a la misma biblioteca, ya estará almacenado en el caché de los navegadores y no tendrá que descargarse en absoluto .

    
respondido por el Morons 12.03.2012 - 18:24
0

Podría estar equivocado, pero la implementación de document.write sobrescribe cualquier cosa que tenga el DOM. Dado que es una buena práctica colocar los archivos JavaScript al final del cuerpo,

Propongo el siguiente método basado en respuestas anteriores:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript">

if(!window.jQuery)
{
    //Creates the script element
    var script = document.createElement('script'); 
    //Adds the type attribute with "text/javascript" value
        script.setAttribute('type', 'text/javascript'); 
    //Adds the source attribute and populates it
        script.setAttribute('src', 'Put_The_Relative_Path_To_Your_JavaScript_File_Here'); 
    //Adds it to the end of the body, as it is good practice, to prevent render-blocking.  
    document.body.appendChild(script);

}

//Note that there's no need for you to verify with an onload function, since all scripts
//must be loaded before going to the next one! 

</script>
    
respondido por el Jose A 26.04.2015 - 15:42
0

Me gustaría agregar que el alojamiento de una copia local es una buena práctica, ya que ninguno de los estados anteriores se relaciona con una postura segura por la cual la ubicación geográfica y la estricta Lista Blanca sean imprescindibles. No alojar ese archivo presume localmente para imponer una postura de seguridad reducida a sus clientes.

    
respondido por el Mark 27.04.2015 - 14:22

Lea otras preguntas en las etiquetas