2009-12-30 5 views
10

He oído que el operador instanceof en java es un problema de rendimiento,¿Está utilizando el operador instanceof en javascript un problema de rendimiento?

¿Es cierto para Javascript también (IE6, IE7, IE8, FF, Chrome, safari, etc.)? cualquier enlace a documentos auténticos sería útil.

+0

Está buscando algo definitivo, ya veo. Pero el "problema de rendimiento" no es una pregunta definitiva. Por el contrario, es muy vago. Además, las preguntas de rendimiento deben formularse en la forma "¿A o B requieren más memoria/tiempo de ejecución/otra cantidad medible", donde A y B son cosas diferentes que producen el mismo resultado. Entonces necesitaría comparar el operador instanceof con otra cosa que hace lo mismo. –

+0

Hmm, mi pregunta no fue enmarcada de la manera correcta. –

+0

Supongo que podría ejecutar un punto de referencia que le dijera que el operador instanceof tomó 7 microsegundos (número elegido al azar, por ejemplo) para ejecutar. Pero entonces tendrías que preguntarte qué significaba eso en el contexto de algún código real. –

Respuesta

1

Eso ya no es válido para Java: see here.

En cuanto a Javascript, no he podido encontrar ningún artículo que discuta esto, pero dudo mucho que esta instancia cause problemas de rendimiento. Si necesita usarlo, yo diría que lo haga, y luego lo reconsideraré solo si tiene problemas de rendimiento.

+0

incluso no encontré ningún artículo que diga eso, pero supongo que podría haber un impacto. Todavía esperando una conclusión/resultado de referencia ... –

1

Puede hacer fácilmente su propio punto de referencia de JavaScript similar a this one vinculado desde el enlace de Kaleb.

+0

hmm. También estoy haciendo mis propias pruebas, pero aún así preferiría remitir un artículo o un artículo sobre este tema. –

1

No me preocuparía el rendimiento del operador instanceof, porque el propio JavaScript rara vez es un motivo de problemas de rendimiento. Las manipulaciones de DOM usualmente toman mucho más tiempo. Sin embargo, si necesita instanceof en un bucle usado pesado, le sugiero que lo perfile usando FireBug Profiler.

+1

si supone que es frontend JavaScript. Suponiendo que sea Node.js ... – josiah

0

La optimización pre-madura es la causa raíz de todo mal. Pruébelo y si tiene problemas de rendimiento, intente resolver el problema.

No intente resolver algo que nunca es un problema en primer lugar para usted.

+11

Realmente honro los comentarios aquí, pero veo que a la mayoría de ustedes no les gusta mucho contestar la pregunta. Lo estoy planteando desde el punto de vista del conocimiento, no desde el punto de vista del proyecto. Quizás no he enmarcado mi pregunta correctamente. –

+3

Esto hubiera sido bueno como comentario, pero no como respuesta. – bnieland

13

En resumen: parece depender del navegador.

Más información detallada: Encontré esta prueba JSPerf: http://jsperf.com/instanceof-performance/2 comparando una instancia JavaScript de verificación frente a una verificación booleana para una propiedad existente/faltante en un objeto.

El resultado general (tenga cuidado con el pequeño número de muestras) es que en Chrome ambos métodos son parecidos con beneficios para instanceof. En FF, sin embargo, el control de propiedad es más rápido que el operador de instanceof. Actualización de abril de 2017: como señaló @ngryman: en las versiones recientes de FF y Chrome, hacer comprobaciones de propiedades parece mucho más rápido que inscribirse.

Sería interesante extender esa prueba con un caso como comprobar si una comparación de cadenas como obj.type == 'MyClass' tiene una gran influencia en el tema.

+2

En 2017 en Chrome, el control de propiedad es más rápido. – ngryman

+0

@ngryman Gracias por señalar esto. He actualizado mi respuesta. –

Cuestiones relacionadas