javascript browser

javascript map



¿Cómo implementa JavaScript VM el acceso a las propiedades de los objetos? ¿Es Hashtable? (2)

Los objetos en JavaScript se pueden usar como Hashtable (la clave debe ser String) ¿Funciona bien como Hashtable la estructura de datos?

Quiero decir, ¿implementado como Hashtable detrás de la escena?

Actualización : (1) Cambié HashMap a hashtable (2) Supongo que la mayoría de los navegadores lo implementan de la misma forma, si no, ¿por qué no? ¿Hay algún requisito sobre cómo implementarlo en las especificaciones de ECMAScript?

Actualización 2 : entiendo, me pregunto cómo V8 y la máquina virtual JS de Firefox implementan los captadores / definidores Object.properties.


"Supongo que la mayoría de los navegadores lo implementan de la misma manera, si no, ¿por qué no? ¿Hay algún requisito sobre cómo implementarlo en las especificaciones de ECMAScript?"

No soy un experto, pero no puedo pensar en ninguna razón por la cual una especificación de idioma detalle exactamente cómo deben implementarse sus características internamente. Tal restricción no tendría ningún propósito en absoluto, ya que no afecta el funcionamiento del lenguaje de ninguna otra manera que no sea el rendimiento.

edición - a pesar de los dos votos a la baja, de hecho, esto es absolutamente correcto y, de hecho, la independencia de implementación de la especificación ECMA-262 se describe específicamente en la sección 8.6.2 de la especificación:

"Las descripciones en estas tablas indican su comportamiento para los objetos ECMAScript nativos, a menos que se indique lo contrario en este documento para tipos particulares de objetos ECMAScript nativos. Los objetos del host pueden admitir estas propiedades internas con cualquier comportamiento dependiente de la implementación, siempre y cuando sea consistente con el Restricciones de objeto host indicadas en este documento "

"Los objetos del host pueden implementar estos métodos internos de cualquier manera a menos que se especifique lo contrario";

La palabra "hash" no aparece en ninguna parte en toda la especificación ECMA-262.

(original, continuado)

Las implementaciones de Javascscript en, digamos, Internet Explorer 6.0 y V8 de Google Chrome no tienen casi nada en común, pero (más o menos) ambas se ajustan a la misma especificación.

Si desea saber cómo hace algo un intérprete de javascript específico, debe investigar ese motor específicamente.

Los hashtables son una forma eficiente de crear referencias cruzadas. No son el único camino. Algunos motores pueden optimizar el almacenamiento para conjuntos pequeños (para los cuales la sobrecarga de una tabla hash puede ser menos eficiente), por ejemplo.

Al final del día, todo lo que necesitas saber es que funcionan. Puede haber formas más rápidas de crear tablas de búsqueda de conjuntos grandes, utilizando ajax, o incluso en la memoria. Por ejemplo, vea la interesante discusión en esta publicación del blog de John Reseig sobre el uso de una estructura de datos trie.

Pero eso no es ni aquí ni allá. Su elección de si usar este u objetos nativos de JS, no debe guiarse por la información sobre cómo JS implementa los objetos. Debería ser manejado solo por la comparsión de rendimiento: cómo se escala cada método. Esta es la información que obtendrá al realizar pruebas de rendimiento, no solo por saber algo sobre la implementación del motor JS.


V8 no implementa el acceso a las propiedades del objeto como una tabla hash, en realidad lo implementa de una mejor manera (en cuanto al rendimiento)

¿Entonces, cómo funciona? "V8 no usa la búsqueda dinámica para acceder a las propiedades. En cambio, V8 crea dinámicamente clases ocultas detrás de la escena", que hacen que el acceso a las propiedades sea casi tan rápido como acceder a las propiedades de los objetos C ++.

¿Por qué? porque en la clase fija, cada propiedad se puede encontrar en una ubicación de compensación fija específica.

Entonces, en general, acceder a la propiedad de un objeto en V8 es más rápido que Hashtable.

No estoy seguro de cómo funciona en otras máquinas virtuales

Puede encontrar más información aquí: https://developers.google.com/v8/design#prop_access

También puede leer más sobre Hashtable en JS aquí: (mi blog) http://simplenotions.wordpress.com/2011/07/05/javascript-hashtable/