2010-01-14 15 views
8

Negli ultimi mesi ho creato un sito Ruby on Rails e ho utilizzato solo una piccola quantità di funzioni JavaScript incorporate. Comunque farò molto più sviluppo di JavaScript nelle prossime settimane e mesi e sto discutendo su quale framework JavaScript utilizzare.Quali sono le differenze attuali tra jQuery e Prototype?

Da un lato jQuery sembra essere il più popolare, ma di nuovo Prototype è già integrato in Rails. Ho letto anche un sacco di articoli online di alcuni anni fa che parlano di come jQuery sia più conciso in alcune cose, ma sciatto sugli altri, e dando vari altri pareri.

Quindi le mie domande sono le persone che hanno utilizzato sia (preferibilmente di recente):

  • Qual è la differenza tra utilizzando Prototype e jQuery da un puro JavaScript e da una prospettiva di Ruby on Rails?
  • C'è una differenza significativa tra loro o sono ora abbastanza vicini l'uno all'altro in termini di funzionalità e scrittura del codice?
  • Quanto è alto il costo di commutazione in termini di cose che devono essere reimpiegate e codice che deve essere riscritto?

Grazie

risposta

13

precedente discussione

Molto, se non tutto il vostro domanda è stato già discusso. Vedere la search o:

passaggio da prototipo a JQuery

Sono in procinto di passare da Protoype a JQuery, principalmente per motivi di prestazioni (ho visto troppi benchmark con Prototype che arriva sempre per ultimo a JQuery, MooTools e Dojo.) Direi che il costo di commutazione non è orribile, perché la maggior parte dei concetti di base (Selezione, Effetti, Ajax) sono molto simili. Tuttavia, ogni riga del codice Prototype deve essere accuratamente riscritta, con attenzione, soprattutto perché molte funzioni e costrutti di supporto ($$$) sembrano ingannevolmente simili.

Se il codice contiene molti costrutti concatenati complessi che potrebbero essere disponibili anche in Jquery, ma funzionano in modo diverso, la migrazione può diventare un'attività molto complessa. Se lo usi solo per la rapida selezione di elementi $(), effetti e un po 'di Ajax, non così tanto.

In ogni caso, preparatevi per una fase di intenso apprendimento. I costrutti JQuery sono piccoli e intelligenti, ma sono terribili da leggere IMHO (e sembrano terribili rispetto a un blocco di Javascript nativo, ma questa è una discussione diversa). Ci vuole sicuramente tempo per familiarizzare con la sintassi e i principi se provieni da un framework diverso, o Javascript nativo.

+0

+1 ottima risposta Pekka! –

3

C'è una bella differenza nel modo in cui si lavora con jQuery rispetto al prototipo, una volta che ci si abitua alle sfumature dei framework diventa abbastanza facile passare da uno di essi all'altro.

L'ostacolo più grande all'inizio è il fatto che Prototype si innesta immediatamente nel dominio. Non appena lo includi nella pagina, tutti gli elementi domati in alto avranno a loro disposizione la funzionalità prototipo. Con jQuery lascia tutti gli elementi da solo fino a quando non si accede a uno con il selettore jQuery $ ('css-class'). L'oggetto che torni da quella chiamata avrà i metodi jQuery allegati.

Se vuoi rilassarti in jQuery puoi lasciare tutto usando il prototipo e includere jQuery e chiamare jQuery.noConflict();http://docs.jquery.com/Core/jQuery.noConflict. Ciò restituirà il metodo '$' al prototipo e ti permetterà di usare jQuery chiamando jQuery ('css-class').

Se si desidera passare completamente a jQuery, si consiglia di utilizzare il plug-in jRails (http://github.com/aaronchi/jrails). Sostituirà tutte le guide ajax e gli farà usare jQuery invece del prototipo. L'ho fatto in molti progetti e non ho mai avuto problemi.

Alla fine dovresti solo dare un'occhiata al prototipo e jQuery e vedere quale si adatta al tuo stile di codifica. Puoi realizzare le stesse cose con entrambi i framework, è solo una sintassi leggermente diversa e un modo di pensare per ognuno.

2

jQuery è più efficiente per piccoli effetti client intelligenti. prototypejs è più efficiente per lo sviluppo di javascript profondi.

jQuery ha una serie di plugin per effetti UI robusti. prototypejs ha una libreria completa per Enumerables, Functions, Hash.

+0

Cosa ti dice che il prototipo è più efficiente per lo sviluppo di Javascript in profondità? La biblioteca stessa è più efficiente? Tu come sviluppatore sei più efficiente? –

+0

Quasi tutto in jQuery è correlato al DOM. Ma prototypejs offre molti metodi di funzione incredibilmente utili (curry, wrap ...: http://api.prototypejs.org/language/function.html), e un oggetto Enumerable con una meravigliosa API (invoke, pluck ...: http : //api.prototypejs.org/language/enumerable.html) – Alsciende

+0

Quindi, ciò che intendo per "è più efficiente per" è "offre funzionalità avanzate per" e quindi "ci rende più efficienti per". – Alsciende

9

La risposta di Pekka è ottima, ma una cosa che dovrebbe essere aggiunta è che Rails si sta muovendo pesantemente nella direzione di essere un framework agnostico Javascript. Anche se quando Rails è uscito per la prima volta, la sua integrazione AJAX era innovativa, il panorama Javascript è cambiato radicalmente da allora e l'integrazione di Rails non è più all'altezza delle best practice. Come tale, l'integrazione del prototipo non dovrebbe essere considerata un fattore importante oggi su Rails 2.3, e sarà ancora meno di un fattore in Rails 3.0 che sarà probabilmente rilasciato nei prossimi mesi. Recentemente ho letto an interesting article descrivendo alcune delle modifiche più significative all'integrazione Javascript di Rails negli anni.

Il mio progetto corrente ha migliaia di righe di codice Prototype legacy, ma di recente abbiamo iniziato a utilizzare jQuery perché i suoi benefici erano troppo grandi per passare. Le mie impressioni:

Il prototipo è un framework maturo che svolge un ottimo lavoro ottimizzando le differenze tra i browser e fornendo funzionalità a tutto tondo. Sfortunatamente è un po 'pesante con le sue modifiche all'ambiente Javascript predefinito, e non sta vedendo un rapido sviluppo e non ha un ecosistema di plugin significativo.

jQuery è un quadro più recente che è stato in grado di sfruttare alcune delle lezioni dei primi framework JavaScript come Prototype per creare qualcosa di più modulare, meno invadente, e molto più potente e conciso. Adoro ancora il prototipo, ma la manipolazione del DOM e l'ecosistema di plugin di jQuery sono semplicemente troppo buoni per essere ignorati. Se stavo iniziando un progetto greenfield, dovrei andare con jQuery perché sembra che si tratti dell'innovazione (almeno tra queste due scelte).

Problemi correlati