2011-01-12 17 views
5

Con $ .getScript puedo cargar archivos js sobre la marcha. ¿Es posible "descargar" algunos de estos archivos?¿Descargar archivos cargados con getScript?

Tengo un panel administrativo basado en ajax. Tengo 3 secciones. Al hacer clic en cada sección, quiero cargar solo los archivos que están asociados a ella. Al cambiar a otra sección, quiero descargar archivos innecesarios.

+1

Cuál es el beneficio de descarga de estos archivos? – rahul

+1

No creo que sea posible, al menos no para todos los navegadores. Una vez que se cargó el código JS en el navegador, permanecerá allí hasta que la página se descargue. ¿Qué te preocupa? –

Respuesta

11

"Descarga", si fuera realmente posible, no tendría mucho sentido aquí. Vamos a dar un paso atrás y mirar por la que no lo hace carga todos los archivos, para empezar:

  • Son otra petición HTTP y X bytes, si no los necesita, no lo hacen conseguirlos
  • tienen efectos no deseados - que no quiere lo que X script hace a pasar aquí

Ahora miramos desde el otro lado, se ha ellas cargada, lo que significa que las dos anteriores tiene ya sucedió, pagó la solicitud cos t de conseguirlos y lo que han hecho. Además, lo que efecto tenían en la página no se puede deshacer genéricamente. Solo eliminando un <script> no elimina las funciones que declaró, controladores de eventos adjuntos, etc.

En resumen, ¿por qué está descargando? Si es para eliminar los efectos, bueno, eso no es fácil, no de una manera genérica de todos modos. Si es para aligerar la página ... no hay ningún beneficio aquí, en realidad solo incurrirá en el costo de eliminar el elemento, sin beneficio para el cliente en el lado de JavaScript de las cosas.

+0

Uso el complemento autocompletar de ui. De la base de datos obtengo información y la coloco en la matriz javascript. Esta matriz se pasa a ui autocompletar. La matriz consta de aproximadamente 100 000 elementos. Me preocupa que a tiempo comas mucha memoria de la computadora. – Nick

+3

@John - Oh, en ese caso, solo está buscando ['delete'] (https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete), así:' eliminar myArray; 'para liberar la memoria. –

+2

@Nick - ¿Qué pasa si quisiera ejecutar algunas pruebas de unidad, algunas de ellas requerirían cargar scripts adicionales html y js del servidor, después de terminar un lote de pruebas me gustaría eliminar todos los elementos dom, objetcs, acciones ... Y todos los scripts que descargué para ese lote de pruebas. –

8

Según lo señalado por Nick Craver, es difícil entender el motivo por el que querría hacer eso.

Sin embargo, si hubiera una razón válida para hacerlo. Pondría todo el código del script cargado en una clase. Y cuando me gustaría descargar esto, simplemente lo asignaría a nulo. p.ej.

//external file: 
o1=new Object(); 
o1.function1=function(){ 
    //blah blah blah 
    }; 
o1.function2=function(){ 
    //blah blah blah 
    }; 
o1.var1=1; 

//and if when i'll need to get rid of all of this i can just 
o1=null; 
+0

¿No sería más eficiente eliminar o1 que establecerlo en nulo? –

+0

@AresAvatar delete solo funciona con las propiedades del objeto. Entonces, en este caso, funcionaría cuando o1 se anexa al objeto ventana como una propiedad. Pero si fuera var o1 = new Object(), fallaría. Por lo tanto, la asignación a null es una opción más segura en mi opinión, y probablemente también sea más rápida. como es solo una operación simple en comparación con una llamada de función – Ivan

+0

Ivan, eso no es correcto. Puedo eliminar "var o1 = {};" y o1 no está definido. Además, eliminar no es una llamada a función. Es una operación incorporada. El ajuste a nulo deja o1 definido. –

7

Creo que hay razones válidas para cargar y descargar scripts. He escrito una herramienta de supervisión donde el contenido se intercambia dentro y fuera del centro <div> todo el tiempo. Cada carga requiere que se adjunten nuevas funciones al contenido recién cargado. Si (des) carga js específico para el contenido (no) cargado, entonces la huella de memoria se queda pequeña. Y puede reutilizar nombres de funciones previamente definidos para respuestas ligeramente diferentes, mientras escribe xhtml genérico.

Suponga un <div> con información sobre la tranquilidad de los datos. El usuario desea editar ese registro específico para que el contenido <div> sea reemplazado por un formulario con todo tipo de comportamientos en botones, casillas de verificación, etc. El formulario se sustituye y el <div> se reemplaza por el contenido original pero refleja los cambios . El formulario se ha ido y también lo es la necesidad de cualquier comportamiento asociado.

I.m.h.o. cargando en un cierto <div> en su página x.htm + x.css + x.js y reemplazarlos cuando se necesita otro contenido y comportamiento es, de lejos, preferible a volver a analizar el nuevo contenido y adjuntar todas las respuestas posibles, incluso si faltan ciertos nodos o clases en el nuevo contenido.

En lugar de grandes archivos javascript, un conjunto de módulos js conectables mantiene mi código bien organizado y el mantenimiento de comportamientos ajax es relativamente fácil. El apoyo para tal esquema en jQuery sería una gran ayuda (para mí).

+0

¿Puede usted publicar su código de ejemplo? – blogs4t

0

Usted puede simplemente añadir y eliminar archivos js de la cabeza:

$('script').last().remove();`//remove last file from html file 
$('head').append('<script src=""></script>'); //add js file 
Cuestiones relacionadas