2009-12-30 10 views
10

Ho sentito dire che operatore instanceof in Java è un problema di prestazioni,Sta usando l'operatore instanceof in javascript un problema di prestazioni?

E 'vero per Javascript troppo (IE6, IE7, IE8, FF, Chrome, Safari, ecc.)? qualsiasi link a documenti autentici sarebbe utile.

+0

Stai cercando qualcosa di definitivo, vedo. Ma "problema di prestazioni" non è una domanda definitiva. Al contrario, è molto vago. Inoltre, le domande sulle prestazioni devono essere poste nel modulo "A o B richiede più memoria/tempo di esecuzione/altra quantità misurabile", dove A e B sono cose diverse che producono lo stesso risultato. Quindi dovresti confrontare l'operatore instanceof con qualcos'altro che fa la stessa cosa. –

+0

Hmm, la mia domanda non è stata inquadrata nel modo giusto. –

+0

Suppongo che potresti eseguire un benchmark che ti diceva che l'operatore instanceof ha impiegato 7 microsecondi (il numero scelto a caso solo per esempio) da eseguire. Ma allora dovresti chiederti cosa significhi nel contesto di un codice reale. –

risposta

1

Questo non è più vero per Java - see here.

Per quanto riguarda Javascript, non sono riuscito a trovare alcun articolo che discute di questo, ma dubito fortemente che l'istanza di causa dei problemi di prestazioni. Se hai bisogno di usarlo, direi di farlo e poi riconsiderare solo se stai riscontrando problemi di prestazioni.

+0

anche io non ho trovato nessun articolo che lo dicesse, ma credo che ci potrebbe essere un impatto. Ancora in attesa di una conclusione/risultato benchmark ... –

1

Si potrebbe facilmente creare il proprio benchmark JavaScript simile a this one collegato dal collegamento di Kaleb.

+0

hmm. Sto facendo anche i miei test, ma preferirei comunque riferire un articolo o un documento su questo argomento. –

1

Non mi preoccuperei delle prestazioni dell'operatore instanceof, perché JavaScript stesso è raramente un motivo di problemi di prestazioni. Le manipolazioni DOM solitamente richiedono molto più tempo. Tuttavia, se hai bisogno di un'istanza in un ciclo pesante usato, ti suggerirei di profilarlo usando il profiler FireBug.

+1

se si assume che sia JavaScript frontend. Supponendo che sia Node.js ... – josiah

0

L'ottimizzazione pre-matura è la causa principale di tutti i mali. Provalo e se riscontri problemi di prestazioni, prova a risolvere il problema.

Non cercare di risolvere qualcosa che non è mai un problema al primo posto per te.

+11

Onorato davvero i commenti qui, ma, vedo che molti di voi non sono così entusiasti nel rispondere alla domanda. Lo sto chiedendo dal punto di vista della conoscenza non da un punto di vista del progetto. Forse non ho inquadrato la mia domanda giusta. –

+3

Questo sarebbe stato buono come commento, ma non come risposta. – bnieland

13

In breve: sembra essere dipendente dal browser.

Più dettagliato: Ho trovato questo test JSPerf: http://jsperf.com/instanceof-performance/2 confrontando un'istanza JavaScript di controllo rispetto a un controllo booleano per una proprietà esistente/mancante in un oggetto.

Il risultato complessivo (attenzione al piccolo numero di campioni) è che in Chrome entrambi i metodi sono uguali con vantaggi per instanceof. In FF, tuttavia, il controllo della proprietà è più veloce dell'operatore instanceof. Aggiornamento Apr 2017: come ha sottolineato @ngryman: in entrambe le versioni recenti di FF e Chrome, il controllo delle proprietà sembra molto più rapido di instenaceof.

Sarebbe interessante estendere tale test con un caso come verificare se un confronto di stringhe come obj.type == 'MyClass' ha una forte influenza sul soggetto.

+2

Nel 2017 in Chrome, il controllo proprietà è più veloce. – ngryman

+0

@ngryman Grazie per avermelo fatto notare. Ho aggiornato la mia risposta. –

Problemi correlati