2010-08-24 13 views
6

Helo,Entfernen Sie unerwünschte jQuery-Funktionen

Eine Bibliothek wie jQuery ist voll geladen und kommt mit vielen Funktionen, die wir nicht in unseren Skripten verwenden können. Ich frage mich, ob es eine Möglichkeit gibt zu sagen, lesen Sie mein Skript finden Sie alle jQuery-Funktionen, die ich verwende und seine Abhängigkeiten und dann entfernen Sie die restlichen Funktionen aus der jQuery-Bibliothek. Dies könnte auf praktisch jede Bibliothek angewendet werden und ist nicht wirklich eine jQuery-spezifische Frage.

Lassen Sie mich Ihre Gedanken darüber, wie dies erreichbar ist. Ich weiß, dass es später Kopfschmerzen sein kann, wenn ich sage, dass ich meinem Code eine neue Funktion hinzufüge und die Funktion in jQuery nicht existiert. Aber ich bin bereit, dieses Risiko einzugehen.

+0

Guter Gott, darf ich fragen warum? – jAndy

+0

Ja, Sie können. Wir haben Software, die auf Tausenden von Websites läuft, und der jQuery-Code wird zusammen mit unserem Code hinzugefügt. Aber während wir uns vorwärts bewegen, wollen wir die unnötigen Teile entfernen (da wir nur einige wenige der jQuery-Kernfunktionen verwenden). Wir haben jQuery mit CDN geladen, aber unsere Kunden mögen es nicht. Sie wollen alles selbst veranstalten. Frag mich nicht warum, wie ich es nicht weiß. –

+0

Wenn Sie eine vernünftige Caching-Strategie entwickeln, können Sie die gesamte jQuery-Datei lokal bereitstellen, aber zwischenspeichern, so dass Sie sich keine Gedanken über die Kosten für den Download/die zusätzliche HTTP-Anfrage machen müssen. [Caching-Tutorial für Web-Autoren und Webmaster] (http://www.mnot.net/cache_docs/) ist eine großartige Ressource. –

Antwort

1

jQuery bietet keine gepackten Downloads wie Prototype und MooTools, und es ist wahrscheinlich schwierig, sie selbst zu erstellen, da Sie alle Abhängigkeiten manuell aussortieren müssten - und immer wieder für jedes neue jQuery-Release.

Darüber hinaus bei derzeit 24kb gziped Größe für die vollständige Bibliothek, ich lege es Ihnen Größe ist nicht wirklich wichtig. Die Bibliothek wird nur einmal geladen - wenn Sie sie aus dem CDN laden, wird sie zentral zwischengespeichert, was es sogar für langsame Modemverbindungen möglich macht.

0

Dies wäre eine schlechte Idee.

Zuerst möchten Sie vielleicht entfernen lassen sagen InArray, wie Sie eine Basis-JavaScript-Alternative verwenden können, aber andere Methoden, die Sie behalten, können sich auf InArray verlassen.

Grundsätzlich verwenden jQueries-Methoden einander, um Aufgaben zu erledigen, dies ist eine der Möglichkeiten, wie sie die Paketgröße niedrig halten.

Wenn Sie das wirklich tun möchte ich wie so tun würde:

$M = MyjQuery = function(element,context) 
{ 
    this.fn = {} 
    this.extend = function(base,new) 
    { 
     //Extend them here 
    } 
} 

Und von vorne anfangen!

2

Auch wenn ich keine Ahnung, warum Sie dies tun könnte:

Zum http://github.com/jquery/jquery/blob/master/Makefile

Das ist die Make-Datei aus dem jQuery lib ist. jQuery ist in mehrere Module aufgeteilt, die zusammengestellt werden. Diese base files sind in abhängigkeiten, soooo Sie könnten Module, die Sie nicht verwenden ... Peel out

Ich bin nicht 100% sicher, wenn das funktioniert, habe es nie selbst versucht, aber Sie können das eine Chance geben .

+0

Auch wenn es in mehrere Dateien für die Entwicklungsphasen aufgeteilt ist, bedeutet das nicht, dass sie als Standalone ausgeführt werden können, sondern nur das jquery Team dort Mitarbeiter organisiert, zum Beispiel würde das Daten Team an 'data.js' arbeiten und so Dann hätten sie einen Haufen Tester, die die neuen Methoden/Funktionen testen würden. also ja es ist nur ein Design-Prozess nichts mehr - nette Referenz aber :) – RobertPitt

+1

@RobertPitt: Ich weiß es nicht, es sieht aus wie ein Abhängigkeitsbaum für mich. Die Reihenfolge ergibt Sinn. Ich glaube wirklich, dass Sie einfach die "Dimensionen" entfernen können. – jAndy

+0

Dimensionen können möglich sein, da andere Verbindungen wie 'css' mit' elem.offsetWidth' arbeiten und solche, aber das Entfernen von Unterpaketen wie css würde dann große Probleme verursachen, da sie in der gesamten Bibliothek verwendet werden! - ganz zu schweigen von den neuen Bibliotheken hinzugefügt, sie würden auch leiden :( – RobertPitt

1

Wenn Ihr JavaScript nicht sehr dynamisch in der Natur ist, dann können Sie die Closure Compiler eine Aufnahme geben.

Gather alle sie JavaScript in einem Ort (wie jQuery, Plugins, andere Bibliotheken, alles) und führen Sie es mit der erweiterten Übersetzungsoption gcc.

Dadurch werden alle nicht verwendeten Funktionen entfernt, die möglicherweise Ihren Code brechen. Ich würde dies nur empfehlen, wenn Sie entweder Testfälle haben oder Ihr JS klein genug ist, um es vollständig manuell zu testen.

Ein einfaches Beispiel für die Art der Optimierung der Compiler tut, ist:

function hello(name) { 
    alert('Hello, ' + name); 
} 

hello(); 

wird erhalten reduziert:

alert("Hello, undefined"); 

denn das ist alles, was im Grunde geschieht.