3 ms·
The main difference that may allow Dart to run faster than JavaScript isn't type checks, but objects having static shape at runtime. In JavaScript, I can write
by jashkenas 15y ago
The main difference that may allow Dart to run faster than JavaScript isn't type checks, but objects having static shape at runtime.
In JavaScript, I can write this:
var dog = new Animal();
dog.name = "Fido";
... adding a new field to the "dog" object, even though other objects of the same class may have no such field. Objects that share common sets of fields are the famous "hidden classes" that V8 is able to optimize.
You can't write the above example in Dart. Dart doesn't have to work as hard as V8 to discover and cache hidden classes, because the shape of an object is statically fixed to be the same as its class.
- azakai 15y agoYes, but how much of a slowdown is it to manage hidden classes? Furthermore, in the most performance sensitive code, you might not even have classes at all, just raw calculations (for example on typed arrays), which Dart will be no faster than JS at.
- DasIch 15y agoIf you know the shape you can reduce attribute access to an array lookup, if you don't attribute access requires a hash table lookup. That is a problem for performance and memory consumption.
- azakai 15y agoSure, but again, (1) JS engines can and do infer the shape at runtime using hidden classes, and they also get array lookups that way (and not hash table lookups), and (2) I suspect these lookups are not even on the critical path of typical performance-intensive code, but that's speculation of course.