Thanks for the quick feedback!
I rewrote the JS version to be closer to the native one:
var array = [];
var input = {
"_id": {
"$oid": "5a00bad8f759511811e030ba"
},
"attributes": [
{
"key": "smartshape.scene.node.path|default",
"value": "/scene/Lot444.scene",
"type": "imported"
},
{
"key": "max x",
"value": 196.5773162841797,
"type": "computed"
},
{
"key": "max y",
"value": 18.55002021789551,
"type": "computed"
},
{
"key": "max z",
"value": 22.87815856933594,
"type": "computed"
},
{
"key": "min x",
"value": 149.9346771240234,
"type": "computed"
},
{
"key": "min y",
"value": 18.54999732971191,
"type": "computed"
},
{
"key": "min z",
"value": -23.35353088378906,
"type": "computed"
},
{
"key": "box radius",
"value": 23.32131958007814,
"type": "computed"
},
{
"key": "center x",
"value": 173.25599670410156,
"type": "computed"
},
{
"key": "center y",
"value": 18.55000877380371,
"type": "computed"
},
{
"key": "center z",
"value": -0.23768615722655895,
"type": "computed"
},
{
"key": "width",
"value": 46.64263916015628,
"type": "computed"
},
{
"key": "height",
"value": 2.2888183600855427e-05,
"type": "computed"
},
{
"key": "depth",
"value": 46.231689453125,
"type": "computed"
},
{
"key": "box volume",
"value": 0.04935534689932106,
"type": "computed"
},
{
"key": "box surface",
"value": 4312.740269302394,
"type": "computed"
}
],
"name": "default1161",
"uuid": "70bf7d72-1fa9-5c8f-21ff-03ef209d4404",
"surfaces": [
"6f5201a2-31a7-14d0-6b2a-5130007d2a51"
],
"aabb": [
196.5773162841797,
18.55002021789551,
22.87815856933594,
149.9346771240234,
18.54999732971191,
-23.35353088378906
],
"position": null,
"scale": null,
"rotation": null,
"parents": [
"18497b66-3f32-6e98-1899-2998203e6397",
null
],
"file": "5a00b9a4aa5d2517d32d03da",
"numChildren": 0,
"sceneTreeIndices": [
0
]
};
function process(value) {
if (typeof value === "number") {
return value;
} else if (typeof value === "string") {
return value;
} else if (Array.isArray(value)) {
var array = [];
for (var item of value) {
array.push(process(item));
}
return array;
} else if (typeof value === "object") {
if (!value) {
return value;
}
var obj = {};
for (var key of Object.keys(value)) {
obj[key] = process(value[key]);
}
return obj;
} else {
return value;
}
return value;
}
for (var i = 0; i < 26000; ++i) {
var obj = process(input);
array.push(obj);
}
Now it takes *30ms. That's still 5x faster* than the native code.
I'm suspecting my Local<Object> are copied/GCed multiple time to build the
final object.
Isn't that the case?
Is there a better way to do it?
using a constructor function and just filling in the values should be
> faster than assembling them one property at a time.
The root object is expected to be the same 99% of the time.
Each of his field too.
So I could definitely have a map<key, function>.
How can I implement such a constructor function in v8 ?
Thanks !
--
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
---
You received this message because you are subscribed to the Google Groups
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.