2010-08-24 11 views
6

Helo,Rimuovere funzioni non desiderate jQuery

una libreria come jQuery è a pieno carico e viene fornito con molte funzioni che non ci all'utente nei nostri script. Mi chiedo se c'è un modo per dire leggere il mio script scoprire tutte le funzioni jQuery che sto usando e le sue dipendenze e quindi rimuovere le restanti funzioni dalla libreria jQuery. Questo potrebbe essere applicato praticamente a qualsiasi libreria e non è una domanda specifica di jQuery.

Fammi sapere le tue opinioni su come ciò sia possibile. So che potrebbe essere un mal di testa in seguito se dico che aggiungo una nuova funzione al mio codice e la funzione non esiste in jQuery. Ma sono disposto a correre questo rischio.

+0

Buon Dio, posso chiedere perché? – jAndy

+0

Sì, è possibile. Abbiamo un software che funziona su migliaia di siti e il codice jQuery viene aggiunto insieme al nostro codice. Ma mentre andiamo avanti, vogliamo rimuovere le parti non necessarie (dato che utilizziamo a malapena alcune delle funzioni jQuery principali tranne alcune). Abbiamo caricato jQuery usando CDN, ma ai nostri clienti non piace. Vogliono auto-ospitare tutto. Non chiedermi perché, perché non lo so. –

+0

Se si dispone di una strategia di caching ragionevole, è possibile servire l'intero file jQuery localmente, ma memorizzarlo nella cache in modo da non doversi preoccupare del costo del download/richiesta HTTP aggiuntiva. [Caching Tutorial per Web Authors e Webmaster] (http://www.mnot.net/cache_docs/) è una grande risorsa. –

risposta

1

jQuery non offre download pacchettizzati come Prototype e MooTools, e costruirli da soli sarà probabilmente difficile, perché dovresti risolvere manualmente tutte le dipendenze - e ancora e ancora per ogni nuova versione di jQuery.

Inoltre, con una dimensione gzip da 24 kb attualmente per la libreria completa, l'ho messo in una dimensione non molto importante. La libreria viene caricata una sola volta - se la si carica dalla CDN, viene memorizzata nella cache centralizzata, rendendola fattibile anche per le connessioni lente del modem.

0

Questa sarebbe una cattiva idea.

In primo luogo si consiglia di rimuovere diciamo InArray come è possibile utilizzare una alternativa di base javascript, ma altri metodi che si possono contare su InArray.

Fondamentalmente i metodi jQueries si utilizzano l'un l'altro per completare le attività, questo è uno dei modi in cui mantengono le dimensioni del pacchetto.

Se si vuole veramente fare questo vorrei farlo in questo modo:

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

e ripartire da zero!

2

Anche se non ho idea perché, si potrebbe fare questo:

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

Questo è il makefile dal lib jQuery. jQuery è suddiviso in diversi moduli, che vengono messi insieme. Quelle base files sono ordinate in dependencys, quindi potresti sborsare moduli che non stai usando ...

Non sono sicuro al 100% se funziona, non l'ho mai provato da solo, ma puoi dargli uno scatto .

+0

Anche se non ci siamo divisi in diversi file per le fasi di sviluppo, non è che siano in grado di funzionare come standalone, ma solo il team jquery organizza lì i lavoratori, ad esempio, il team di dati lavorerebbe su 'data.js' e quindi in poi, avrebbero un sacco di tester che testavano i nuovi metodi/funzionalità. quindi è solo un processo di progettazione niente di più - bel riferimento però :) – RobertPitt

+1

@RobertPitt: non lo so, sembra un albero delle dipendenze per me. L'ordine ha un senso. Quindi credo davvero che potresti semplicemente rimuovere le "Dimensioni" per esempio. Le dimensioni – jAndy

+0

possono essere possibili in quanto altre entit come 'css' funzionano con' elem.offsetWidth 'e tale, ma la rimozione di sotto-pacchetti come css causerebbe enormi problemi in quanto utilizzata in tutta la libreria! - Per non parlare delle nuove librerie aggiunte, ne soffrirebbero anche :( – RobertPitt

1

Se il tuo JavaScript non è altamente dinamico in natura, puoi dare il colpo a Closure Compiler.

Raccogliere tutto il tuo JavaScript in un unico luogo (tra cui jQuery, i plugin, altre biblioteche, tutto) e dei mangimi a GCC con l'opzione di compilazione avanzate.

Questo rimuoverà tutte le funzioni inutilizzate che potrebbero potenzialmente interrompere il codice. Lo consiglierei solo se hai casi di test, o il tuo JS è abbastanza piccolo da testare completamente manualmente.

Un semplice esempio del tipo di ottimizzazione del compilatore fa è:

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

hello(); 

avranno ridotto a:

alert("Hello, undefined"); 

dato che questo è tutto ciò che è fondamentalmente accadendo.

Problemi correlati