2011-10-09 12 views

Respuesta

46

El V8 design docs implican las búsquedas serán al menos tan rápido, si no más rápido:

motores

La mayoría de JavaScript utilizan una estructura de datos de diccionario-como de almacenamiento para las propiedades del objeto - cada acceso a la propiedad requiere un búsqueda dinámica para resolver la ubicación de la propiedad en la memoria. Este enfoque hace que acceder a las propiedades en JavaScript sea mucho más lento que acceder a las variables de instancia en los lenguajes de programación como Java y Smalltalk. En estos idiomas, las variables de instancia están ubicadas en en desplazamientos fijos determinados por el compilador debido al diseño del objeto fijo definido por la clase del objeto. El acceso es simplemente una cuestión de una carga o almacenamiento de memoria , que a menudo requiere solo una instrucción.

Para reducir el tiempo requerido para acceder a las propiedades de JavaScript, V8 does no utiliza la búsqueda dinámica para acceder a las propiedades. En cambio, V8 dinámicamente crea clases ocultas detrás de las escenas. [...] En V8, un objeto cambia su clase oculta cuando se agrega una nueva propiedad.

Parece que agregar una nueva clave puede ser un poco más lento, debido a la creación de clases ocultas.

+0

Gracias Domenic! por lo que parece ser seguro para mí utilizar búsquedas de objetos como búsquedas de diccionario si estoy haciendo más búsquedas que hashing. –

+0

Para V8, ¿es cierto que la búsqueda dinámica no se utiliza tanto para la notación de puntos como para los corchetes? –

15

Sí, puede suponer que al agregar una clave, y luego usarla para acceder a ella están efectivas operaciones de tiempo constante.

Debajo del capó, el motor JS puede aplicar algunas técnicas para optimizar las búsquedas posteriores, pero a los efectos de cualquier algoritmo, puede suponer O (1).