Hi Sebastian,

> It is my understanding that hidden classes are not shared between different
> constructors, even if I construct structurally identical objects with the
> same properties and in the same order. This seems to imply that
> deserialized objects coming from mongodb will not share the same hidden
> class as structurally identical objects created by the constructors, hence
> functions that use these objects will not be well optimized into native
> code. Am I right?

Yes.  In a constructor function, the hidden class begins with an
element that also includes a prototype.  In two different constructor
functions these initial elements will be different, making their
hidden classes different.

If you have hot code that is being impacted because you pass it both
objects you construct and ones from the MongoDB driver you're using,
one thing you can do is make your constructor take the MongoDB object
representation as an input.  Then you would be able to make your hot
code monomorphic.  If you don't have any hot code being impacted, it's
probably not something you should worry about unless your Mongo driver
is putting objects it constructs into dictionary mode for some reason.

An example: http://jsfiddle.net/xznxP/

"hot" only deoptimizes when given the raw object here, which has a
different hidden class.

> Is there any hidden class inheritance built into v8? That is, if I create
> object o={a:1, b:2} and later add o.z=3, will native code optimized for the
> hidden class before the property-add still work unmodified afterwards?

No.

- Justin

On Jul 19, 4:16 pm, Sebastian Ferreyra Pons <[email protected]>
wrote:
> I have two questions.
>
> #1
> I'm developing a Node.js/Mongodb web app.
>
> This means that objects used in the code will be created by at least two
> different code paths:
>
>    1. Constructor functions
>    2. Deserialization code in the mongo driver.
>
> It is my understanding that hidden classes are not shared between different
> constructors, even if I construct structurally identical objects with the
> same properties and in the same order. This seems to imply that
> deserialized objects coming from mongodb will not share the same hidden
> class as structurally identical objects created by the constructors, hence
> functions that use these objects will not be well optimized into native
> code. Am I right?
>
> #2
> Is there any hidden class inheritance built into v8? That is, if I create
> object o={a:1, b:2} and later add o.z=3, will native code optimized for the
> hidden class before the property-add still work unmodified afterwards?

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to