Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

321
Vistas
¿Cómo inspecciono si una propiedad de objeto es una propiedad dentro del objeto, una propiedad rápida o una propiedad lenta en v8?

La publicación https://v8.dev/blog/fast-properties menciona que hay tres tipos de propiedades. ¿Cómo puedo saber cuál es una propiedad?

Espero respuestas con una función de sintaxis nativa v8 o una función devtool.

about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

(Desarrollador V8 aquí.)

Si un objeto tiene propiedades de modo de diccionario es una decisión por objeto (no por propiedad). El estado alternativo es tener propiedades "rápidas", lo que normalmente significa una combinación de propiedades dentro y fuera del objeto.

Cualquier compilación de V8 que se ejecute con --allow-natives-syntax puede usar %HasFastProperties(obj) para saber si un objeto tiene propiedades "rápidas" (el valor devuelto es true ) o propiedades de diccionario ( false ).

Para ver cuántas propiedades en el objeto tiene un objeto en modo "rápido", necesita una compilación de depuración y usar %DebugPrint(obj) .

Que yo sepa, DevTools no expone esta información. (Lo cual está bien en mi humilde opinión, ya que no debería preocuparse por esto, aparte de la curiosidad).

Nota al margen: creo que "rápido" y "lento" son descripciones muy engañosas, porque suenan demasiado como "buen caso" y "mal caso", cuando en realidad tienen diferentes puntos fuertes y débiles. Los objetos que rastrean el diseño preciso de sus propiedades usando su clase oculta son rápidos para leer/escribir los valores de las propiedades existentes, pero extremadamente lentos para agregar/eliminar propiedades. Los objetos que usan un diccionario para sus propiedades son un poco más lentos para leer/escribir valores de propiedad, pero mucho más rápidos para agregar/eliminar propiedades. Entonces, según el caso de uso de su aplicación, a veces desea uno y otras veces el otro, y aparte de los casos patológicos, el motor también es bastante bueno para cambiar a uno u otro, y no hay un estado de objeto que sea claramente mejor que el otro. (Y si sabe que agregará y eliminará muchas propiedades, el uso de un Map le brindará un mejor rendimiento que el uso de objetos simples).

about 4 years ago · Santiago Gelvez Denunciar

0

Aquí hay una breve explicación de la diferencia entre las propiedades rápidas y lentas. Cuando se crea un objeto en JS, se le adjunta una clase oculta. Cuando se agrega una propiedad al objeto, ocurre una "transición de clase" (la antigua clase oculta cambia a una nueva clase oculta con la nueva propiedad en ella)

Cuando V8 ve que se declara una función de constructor de clase, crea una clase oculta, por ejemplo: C0. Ahora, cuando V8 ve en la siguiente línea que se agrega una propiedad, en nuestro ejemplo: nombre actualiza el C0 con la nueva propiedad y cambia de C0 a una nueva clase oculta, digamos C1, luego ve la siguiente propiedad: edad y cambia a C2 .

Agregar nuevas propiedades dinámicamente a los objetos de 2 personas en este ejemplo no es una solución optimizada porque el orden en el que se instancian las dos nuevas propiedades (me gusta y no me gusta) es diferente. Un orden diferente da como resultado la creación de dos clases ocultas diferentes en lugar de compartir una clase oculta común.

Entonces: creamos C0 para la función constructora persona. Pasa a C1 por nombre y luego a C2 por edad. Para person1, cuando ve una propiedad "me gusta" y pasa a C3a y para "no me gusta" a C4a. PERO, para person2 V8 primero ve que se le agrega la propiedad "no le gusta" y, por lo tanto, en lugar de compartir la clase oculta C3a, crea una nueva clase oculta C3b. Luego crea una nueva clase oculta para propiedades como C4b.

Dado que los dos objetos no comparten las clases ocultas (cuando podrían haberlas compartido); el acceso a las propiedades del objeto es lento porque V8 ahora no puede utilizar el almacenamiento en caché en línea. Si los dos hubieran compartido la clase oculta, V8 habría utilizado el almacenamiento en caché en línea para un acceso más rápido. Entonces, en el ejemplo a continuación, esas son propiedades lentas. Habría sido rápido si el pedido fuera el mismo.

Espero que esto ayude un poco.

 function person(name,age) { this.name = name; this.age = age; } let person1 = new person("jim", 28); let person2 = new person("jane", 27); person1.likes = "games"; person1.dislikes = "running"; person2.dislikes = "cities"; person2.likes = "nature";

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda