2011-01-12 7 views
5

Mit $ .getScript kann ich js Dateien im laufenden Betrieb laden. Ist es möglich, einige dieser Dateien zu "entladen"?Entladen Sie die mit getScript geladenen Dateien?

Ich habe eine Ajax-basierte administrative Panel. Ich habe 3 Abschnitte. Wenn ich auf jeden Abschnitt klicke, möchte ich nur die Dateien laden, die damit verknüpft sind. Wenn ich zu einem anderen Abschnitt wechsle, möchte ich unnötige Dateien löschen.

+1

Was ist der Vorteil, diese Dateien Entladestelle? – rahul

+1

Ich glaube nicht, dass es möglich ist, zumindest nicht für alle Browser. Sobald der JS-Code in den Browser geladen wurde, bleibt er dort, bis die Seite entladen wird. Worüber machen Sie sich Sorgen? –

Antwort

11

"Entladen", wenn es wirklich möglich wäre, würde hier nicht viel Sinn machen. Lassen Sie uns einen Schritt zurück und schauen, warum Sie tun nicht Last alle Dateien mit zu beginnen:

  • Sie sind eines anderen HTTP-Anforderung und X Bytes, wenn Sie sie nicht brauchen, nicht erhalten sie
  • Sie haben unerwünschte Effekte - Sie wollen nicht, was Skript X hier passieren tut

nun von der anderen Seite es betrachtet, Sie haben geladen sie, die beiden oben bedeutet, haben bereits passiert, Sie haben die Anfrage cos bezahlt t sie zu bekommen und was sie getan haben. Auch was Wirkung sie auf der Seite hatten, kann nicht generisch rückgängig gemacht werden. Nur durch das Entfernen eines <script> entfernt nicht die Funktionen, die es erklärt, Event-Handler es angeschlossen, etc.

Kurz gesagt, warum versuchen Sie zu entladen? Wenn es darum geht, die Effekte zu entfernen, ist das nicht einfach, nicht irgendwie generisch. Wenn es die Seite aufhellen soll ... gibt es hier keinen Vorteil, Sie werden nur die Kosten für das Entfernen des Elements auf sich nehmen, ohne dass der Kunde auf der Seite von JavaScript davon profitiert.

+0

Ich verwende ein Autocomplete-Plugin. Aus der Datenbank bekomme ich Informationen und stecke sie in das Javascript-Array. Dieses Array wird an die automatische Vervollständigung übergeben. Array besteht aus ungefähr 100 000 Elementen. Ich mache mir Sorgen, dass ich nicht rechtzeitig viel Computerspeicher brauche. – Nick

+3

@John - Oh, in diesem Fall suchen Sie nur nach ['delete'] (https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete), so:' delete myArray; 'um die Erinnerung frei zu machen. –

+2

@Nick - was wäre, wenn ich einige Komponententests ausführen möchte, einige von mir würde erfordern zusätzliche HTML und Js Skripte vom Server, nach Abschluss einer Charge von Tests möchte ich alle dom Elemente, Objekte entfernen, Aktionen ... UND alle Skripte, die ich für diese Testreihe heruntergeladen habe. –

8

Wie von Nick Craver gezeigt, ist es schwer zu verstehen, warum Sie das tun möchten.

Allerdings, wenn es einen gültigen Grund dafür geben würde. Ich würde den gesamten Code des geladenen Skripts in eine Klasse schreiben. Und wenn ich das entladen möchte, würde ich es einfach null zuweisen. z.B.

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

Wäre das Löschen von o1 nicht effizienter als das Setzen auf null? –

+0

@AresAvatar delete funktioniert nur mit Objekteigenschaften. In diesem Fall würde es funktionieren, wenn o1 als Eigenschaft an das Fensterobjekt angehängt wird. Aber wenn es var o1 = new Object() wäre, würde es fehlschlagen. Das Zuweisen von null ist meiner Meinung nach eine sicherere Option, und es ist wahrscheinlich auch schneller. wie es ist nur eine einfache Operation im Vergleich zu einem Funktionsaufruf – Ivan

+0

Ivan, das ist nicht korrekt. Ich kann "var o1 = {};" löschen und o1 ist dann undefiniert. Löschen ist auch kein Funktionsaufruf. Es ist ein eingebauter Betrieb. Einstellung auf Null verlässt o1 definiert. –

7

Ich denke, dass es gültige Gründe gibt, Skripte zu laden und zu entladen. Ich habe ein Überwachungstool geschrieben, in dem Inhalt ständig ausgetauscht und ausgetauscht wird <div>. Für jeden Ladevorgang müssen neue Funktionen an den gerade geladenen Inhalt angehängt werden. Wenn Sie js spezifisch für den (un) geladenen Inhalt laden (un), bleibt der Speicherbedarf gering. Und Sie können zuvor definierte Funktionsnamen für etwas andere Antworten wiederverwenden, während Sie generisches xhtml schreiben.

Nehmen Sie eine <div> mit Informationen über einen Frieden der Daten. Der Benutzer möchte diesen bestimmten Datensatz bearbeiten, so dass der Inhalt <div> durch ein Formular mit allen Arten von Verhalten auf Schaltflächen, Kontrollkästchen usw. ersetzt wird. Das Formular wird subitted und die <div> wird durch den ursprünglichen Inhalt ersetzt, aber die Änderungen widerspiegelt . Die Form ist weg und das Bedürfnis nach einem damit verbundenen Verhalten.

I.m.h.o. Laden in einer bestimmten <div> auf Ihrer Seite x.htm + x.css + x.js und sie zu ersetzen, wenn andere Inhalte und Verhaltensweisen erforderlich sind, ist es bei weitem vorzuziehen, den neuen Inhalt erneut zu analysieren und alle möglichen Antworten anzuhängen, selbst wenn bestimmte Knoten oder Klassen im neuen Inhalt fehlen.

Anstelle von großen Javascript-Dateien, eine Reihe von Pluggable-JS-Module hält meinen Code gut organisiert und die Wartung von Ajax-Verhalten relativ einfach. Die Unterstützung für ein solches Schema in jQuery wäre eine enorme Hilfe (für mich).

+0

können Sie bitte Ihren Beispielcode posten? – blogs4t

0

Sie können einfach anhängen und js Dateien vom Kopf entfernen:

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