2011-01-12 13 views
5

Con $ .getScript posso caricare i file js al volo. È possibile "scaricare" alcuni di questi file?Scaricare i file caricati con getScript?

Ho un pannello di amministrazione basato su Ajax. Ho 3 sezioni. Facendo clic su ogni sezione voglio caricare solo i file ad esso associati. Quando si passa a un'altra sezione, voglio scaricare i file non necessari.

+1

Qual è il vantaggio di scarico di questi file? – rahul

+1

Non penso che sia possibile, almeno non per tutti i browser. Una volta che il codice JS è stato caricato nel browser, rimarrà lì fino a quando la pagina non viene scaricata. Di cosa sei preoccupato? –

risposta

11

"Scaricamento", se fosse davvero possibile, non avrebbe molto senso qui. Facciamo un passo indietro e guardare il motivo per cui non si caricare tutti i file per cominciare:

  • Sono un'altra richiesta HTTP e X byte, se non ne hanno bisogno, non lo fanno farli
  • hanno effetti indesiderati - non si vuole ciò che X script fa per accadere qui

Ora guardate dal lato opposto, si hai loro carico, che significa sia di quanto sopra avere già successo, hai pagato la richiesta cos di ottenere loro e quello che hanno fatto. Inoltre, l'effetto nella pagina non può essere annullato genericamente. Solo rimuovendo una <script> non rimuove le funzioni che esso dichiarati, gestori di eventi è collegato, ecc

Insomma, perché stai cercando di scaricare? Se vuoi rimuovere gli effetti, beh, non è facile, non in modo generico. Se è per schiarire la pagina ... non c'è alcun vantaggio qui, in realtà dovrai solo sostenere il costo della rimozione dell'elemento, senza alcun beneficio per il client sul lato JavaScript delle cose.

+0

Io uso il plugin di autocomplete ui. Dal database ottengo informazioni e inserisco l'array javascript. Questo array viene passato al completamento automatico dell'interfaccia utente. Array consiste di circa 100.000 elementi. Mi preoccupo per timore di mangiare un sacco di memoria del computer. – Nick

+3

@John - Oh in quel caso stai solo cercando ['delete'] (https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete), come questo:' cancella myArray; 'per liberare la memoria. –

+2

@Nick - e se volessi eseguire alcuni test unitari, alcuni di questi richiederebbero il caricamento di script html e js aggiuntivi dal server, dopo aver terminato una serie di test vorrei rimuovere tutti gli elementi dom, oggetti, azioni ... E tutti gli script che ho scaricato per quella serie di test. –

8

Come indicato da Nick Craver, è difficile capire il motivo per cui si vorrebbe farlo.

Tuttavia se ci sarebbe un motivo valido per farlo. Metterei tutto il codice dello script caricato in una classe. E quando vorrei scaricare questo, vorrei semplicemente assegnarlo a null. per esempio.

//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

Non cancellare o1 essere più efficiente dell'impostazione a null? –

+0

@AresAvatar delete funziona solo con le proprietà dell'oggetto. Quindi in questo caso funzionerebbe come o1 è aggiunto all'oggetto window come proprietà. Ma se fosse var o1 = new Object() fallirebbe. Quindi assegnare a null è un'opzione più sicura a mio parere, in più probabilmente è anche più veloce. in quanto è solo una semplice operazione di confronto con una chiamata di funzione – Ivan

+0

Ivan, che non è corretta. Posso cancellare "var o1 = {};" e o1 non è quindi definito. Inoltre, l'eliminazione non è una chiamata di funzione. È costruito in funzione. L'impostazione su null lascia o1 definita. –

7

Penso che ci siano validi motivi per caricare e scaricare script. Ho scritto uno strumento di monitoraggio in cui il contenuto è scambiato dentro e fuori dal centro <div> per tutto il tempo. Ogni carico richiede l'aggiunta di nuove funzioni al contenuto appena caricato. Se si (un) carica js specifico per il contenuto (non) caricato, l'ingombro della memoria rimane piccolo. E puoi riutilizzare nomi di funzioni precedentemente definiti per risposte leggermente diverse, mentre scrivi generico xhtml.

Assumere un div > con informazioni su una pace dei dati. L'utente desidera modificare quel record specifico in modo tale che il contenuto div > venga sostituito da un modulo con tutti i tipi di comportamento su pulsanti, caselle di controllo, ecc. Il modulo viene sostituito e il <div> viene sostituito con il contenuto originale ma riflette le modifiche . Il modulo è sparito e così è la necessità di qualsiasi comportamento associato.

I.m.h.o. caricamento in un certo <div> sulla tua pagina x.htm + x.css + x.js e la loro sostituzione quando è necessario altro contenuto e comportamento è di gran lunga preferibile rispetto alla nuova analisi del nuovo contenuto e allega tutte le possibili risposte anche se determinati nodi o classi mancano nel nuovo contenuto.

Invece di file javascript di grandi dimensioni, un insieme di moduli js collegabili mantiene il mio codice ben organizzato e il mantenimento dei comportamenti di ajax relativamente facile. Il supporto per un simile schema in jQuery sarebbe di grande aiuto (per me).

+0

puoi inserire il tuo codice di esempio? – blogs4t

0

Si può semplicemente aggiungere e rimuovere i file js dalla testa:

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