Cosa c'è di meglio nelle prestazioni document.getElementById('elementId')
o $('#elementId')
? Come posso calcolare la velocità da solo?jquery, per quanto riguarda le prestazioni, quale è più veloce getElementById o selettore jquery?
risposta
Se siete preoccupati per le prestazioni, nativo getElementById è molto molto più veloce, ma jQuery offre un accesso molto comodo per un sacco di roba. Quindi, si potrebbe desiderare di usare qualcosa come:
$(document.getElementById("some_id")).jQueryCall();
Questo vi darà una migliore performance, e, allo stesso tempo, permetterà di utilizzare jQuery.
getElementById è più veloce, perché utilizza il codice nativo. Il selettore jQuery utilizzerà anche getElementById, ma prima deve eseguire molti test e confronti sul testo.
+1. Inoltre, la differenza di velocità dipende da come la usi. Se si tratta di una sola chiamata a uno di loro, difficilmente ci sarà alcuna differenza. Se la chiamata viene eseguita centinaia o migliaia di volte all'interno di un ciclo o in modo ricorsivo o qualcosa del genere, si potrebbe notare che il selettore jQuery è un po 'più lento. –
Ovviamente getElementById è più veloce ma con jQuery puoi fare un sacco di cose.
Per verificarlo, è possibile provare a eseguire il ciclo di 10 k per volta e confrontare i timestamp prima e dopo.
Il getElementById nativo è più veloce. Il motore di selezione di Jquery lo avvolge per qualsiasi selettore #x.
Utilizzando la console firebug è possibile creare un profilo di jquery nel modo seguente. Non è sicuro che funzioni bene per le chiamate API native come getElementById.
console.profile();
$('#eleId');
console.profileEnd();
Usa http://jsperf.com/ se si vuole testare qualsiasi tipo di prestazioni tra jQuery e dom ma jQuery è normalmente più lento con tutto quanto si basa sul DOM.
http://jsperf.com/jquery-sharp-vs-getelementbyid –
Il tuo link è rotto, c'è un equivalente in questo URL: http: // jsperf. com/getelementbyid-vs-jquery-id/44 – TyrionGraphiste
@TyrionGraphiste Scusa a partire da oggi il tuo collegamento non esegue neanche i test. Dice che $ non è definito. – Haradzieniec
Mi sono appena imbattuto in questo post mentre mi chiedevo la stessa domanda ... così ho deciso di fare un rapido script di test ... eseguilo, provalo tu stesso, mi ha fatto impazzire!
var now = Date.now();
var diff = 0;
console.log(now);
for(var i=0; i < 1000000; i++)
{
if($(document.getElementById("test")).css('opacity') == '0.2')
$(document.getElementById("test")).css('opacity', '1');
else
$(document.getElementById("test")).css('opacity', '0.2');
}
diff = Date.now() - now;
console.log('With $(document.getElementById("test")).somejQueryCall(): ' + diff + ' milliseconds');
////////////////////////////////////////////////////////////////////////
var now2 = Date.now();
var diff2 = 0;
console.log(now2);
for(i=0; i < 1000000; i++)
{
if($("#test").css('opacity') == '0.2')
$("#test").css('opacity', '1');
else
$("#test").css('opacity', '0.2');
}
diff2 = Date.now() - now2;
console.log('With $("#test").somejQueryCall(): ' + diff2 + ' milliseconds');
////////////////////////////////////////////////////////////////////////
var now3 = Date.now();
var diff3 = 0;
var elem = $("#test");
console.log(now3);
for(i=0; i < 1000000; i++)
{
if(elem.css('opacity') == '0.2')
$(elem).css('opacity', '1');
else
$(elem).css('opacity', '0.2');
}
diff3 = Date.now() - now3;
console.log('With $(elem).somejQueryCall(): ' + diff3 + ' milliseconds');
Dopo l'esecuzione di questo script, ho ottenuto i seguenti risultati:
Run 1
Con $(document.getElementById("test")).somejQueryCall()
: 552 millisecondi
Con $("#test").somejQueryCall()
: 881 millisecondi
Con $(elem).somejQueryCall()
: 1317 millisecondi
Run 2
Con $(document.getElementById("test")).somejQueryCall()
: 520 millisecondi
Con $("#test").somejQueryCall()
: 855 millisecondi
Con $(elem).somejQueryCall()
: 1289 millisecondi
Run 3
Con $(document.getElementById("test")).somejQueryCall()
: 565 millisecondi
Con $("#test").somejQueryCall()
: 936 millisecondi
Con $(elem).somejQueryCall()
: 1445 millisecondi
Non posso credere che la differenza !!! Dovevo solo condividere questo!
Pace!
Heh. Alla ricerca di questa domanda ho trovato questo post eccellente. E anche un post su questo con l'ultimo nel sito di apprendimento di JQuery con suggerimenti specifici per ottimizzare la velocità!
Vale la pena notare che con le ultime specifiche DOM, è probabile che non ci si debba preoccupare delle prestazioni in generale. Solo quando hai creato (o scopri) un collo di bottiglia.
Dal momento che l'altro test di performance che è stata legata a questa pagina sembrava essere rotto, e comprendeva anche qualcosa che non è stato chiesto a questa domanda (vale a dire un metodo di jQuery personalizzato), quindi ho deciso per fare un nuovo punto di riferimento delle prestazioni per rispondere alla domanda, che comprende l'esatto equivalente (restituisce l'elemento DOM) in jQuery, invece di un metodo personalizzato:
https://jsperf.com/jquery-get-0-vs-get-element-by-id
Quando eseguo nel mio Chrome, mostra che una scala jQuery
$('#foo').get(0)
è del 92% più lento rispetto l'operazione equivalente in JavaScript standard
document.getElementById('foo')
Ho anche provato ciò che è attualmente contrassegnato come la risposta accettata qui, che presumibilmente "molto molto più veloce", ma è ancora 89 % più lento rispetto l'equivalente JavaScript standard:
$(document.getElementById("foo")).get(0);
Sentitevi liberi di correre in prima persona e vedere quello che si ottiene nel tuo browser, con la performance benchmark che ho fatto. La versione senza jQuery sembra essere molto più veloce.
- 1. migliori prestazioni per jQuery Selettore
- 2. Per quanto riguarda le prestazioni, quanto è buona la libreria Guava?
- 3. jQuery CSS 'o' selettore
- 4. jQuery: ma per quanto riguarda tutti i bambini?
- 5. jQuery O Selettore?
- 6. jQuery prestazioni selettore: un caso curioso
- 7. Quale è più veloce? Confronto o assegnazione?
- 8. jQuery data- * vs selettore di classe - prestazioni?
- 9. Quale è più veloce, XPath o Regexp?
- 10. Quale è più veloce - INSTR o LIKE?
- 11. Prestazioni jQuery: selezionare per data-attr o per classe?
- 12. Perché questo selettore jQuery è lento?
- 13. Selettore di attributo jQuery per più valori
- 14. Selettore compleanno jQuery che riguarda l'aggiornamento del modulo
- 15. jQuery cosa è più veloce: selettori o metodi?
- 16. jQuery selettore per "Html.CheckBoxFor"
- 17. Che cosa è esattamente un hash per quanto riguarda JSON?
- 18. Selettore jQuery per le stesse classi
- 19. Quale è più veloce, Clojure o ClojureScript (e perché)?
- 20. prestazioni jQuery quando si selezionano più articoli
- 21. Costruisci l'oggetto JavaScript da utilizzare con jQuery .css() (per quanto riguarda le chiavi duplicate?)
- 22. JQuery 'live' per selettore?
- 23. Quale è più veloce, "trova -exec" o "trova | xargs -0 '?
- 24. Selettore jQuery su()
- 25. Javascript querySelector vs. getElementById
- 26. selettore jQuery E operatore
- 27. Quale è più veloce? Costanti, variabili o array di variabili
- 28. Per quanto riguarda JavaScript per Voodoo() ciclo
- 29. Quanto male è jQuery * dentro * Codice MooTools?
- 30. Quale ha prestazioni di runtime più veloci: WPF o Winforms?
Il meglio di entrambi i mondi! –
Non sono sicuro che smetterò mai di ringraziarti mentalmente per avermi mostrato che ... :) – VoidKing
So che è vecchio, ma ti piacerebbe elaborare? Non riesco a trovare questo metodo jQueryCall() ovunque. Grazie – victor