2010-11-02 11 views
7

Necesito incluir un archivo javascript externo en mi página, sin embargo, no quiero que afecte el rendimiento de mi sitio, en caso de que el servidor donde está javascript esté inactivo o no responda.¿Cómo garantizar que el javascript externo no impida el rendimiento del sitio?

Lo que me gustaría saber es si es posible con javascript para hacer una especie de función de contenedor para garantizar que la página donde está alojado el javascript externo responda dentro de un margen de tiempo aceptable.

Considero agregar el atributo "aplazar" al lugar donde incluyo el javascript, pero que, hasta donde yo sé, todavía deja el sitio colgado después de que se cargue el resto de la página.

Si no es posible hacerlo en javascript, ¿hay alguna buena alternativa?

Mi sitio está hecho C# asp.net.

Respuesta

4

Si el JavaScript externo es autocontenido, es decir, ninguno de los scripts depende de que se cargue antes de que funcionen correctamente, la solución puede ser bastante simple. Este ejemplo es con jQuery, pero cualquier biblioteca (o incluso ninguna biblioteca) es viable:

<div id="script-placeholder"></div> 
<script type="text/javascript"> 
$(function(){ 
    $('.script-placeholder').append('<script type="text/javascript" src="http://site.com/file.js"></scr'+'ipt>'); 
}); 
</script> 

Este esperará hasta que se cargue toda la página, a continuación, insertar un nuevo bloque <script> en el DIV marcador de posición vacío, lo que activará el navegador para intentar descargar el script. Si el servidor remoto está respondiendo lentamente o está inactivo, el script aún tardará mucho tiempo en desaparecer, pero no impedirá que los usuarios usen el rest de su página mientras espera.

0

Interesante pregunta. Probablemente puedas usar ajax con una devolución de llamada y hacer algún tipo de tiempo de espera por el cual realizarías alguna acción si no se ha cargado para entonces. ¿Hay alguna razón particular para depender de otro sitio? Parece mucho más simple copiarlo a su sitio directamente.

1

Coloque la secuencia de comandos en la parte inferior de su página, que al menos lo pospondrá hasta que todo lo demás se haya cargado.

Dependiendo de sus necesidades, usted podría incluso cargarlo completamente después de todo lo demás a través de xhr (gancho en el evento real de carga ventana que esperar a que las imágenes también), y luego inyectar de forma dinámica el contenido de eval() ing la respuesta texto. Necesitaría un proxy en su sitio para evitar limitaciones entre dominios, lo que podría frustrar sus propósitos, no estoy seguro.

Ver aquí para más detalles: http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/

Cuestiones relacionadas