On Mon, Jul 29, 2019 at 8:46 PM seth.brenith via v8-dev < [email protected]> wrote:
> Hello, > > I've recently been looking through the JetStream 2 test suite, and I found > a pretty interesting behavior in the FlightPlanner > <https://github.com/WebKit/webkit/blob/master/PerformanceTests/JetStream2/RexBench/FlightPlanner/flight_planner.js> > benchmark. It defines a class constructor for a class named Leg as follows: > > constructor(fix, location) > { > this.previous = undefined; > this.next = undefined; > this.fix = fix; > this.location = location; > this.course = 0; > this.distance = 0; > this.trueAirspeed = 0; > this.windDirection = 0; > this.windSpeed = 0; > this.heading = 0; > this.estGS = 0; > this.startFlightTiming = false; > this.stopFlightTiming = false; > this.engineConfig = EngineConfig.Cruise; > this.fuelFlow = 0; > this.distanceRemaining = 0; > this.estimatedTimeEnroute = undefined; > this.estTimeRemaining = 0; > this.estFuel = 0; > } > > > At a glance, this seems like good code, written following best practices: > it defines all of the properties for the object, in a consistent order, > with reasonable default values. However, a bunch of subclasses extend from > Leg, which makes all of these stores megamorphic. I tried wrapping the > contents of this constructor with "if (this.constructor === Leg)", and > copying all of the property-initialization code into the leaf subclass > constructors, to enforce monomorphic behavior during construction; this > yielded a 17% improvement to average speed. > > Of course, storing properties during construction is only part of the > problem; there are also many megamorphic loads and stores of these > properties elsewhere. > > This seems like a pretty common case that might have come up previously, > but I found nothing in a quick search through the bug tracker and v8-dev > group. Have there been previous discussions, or are there existing design > docs regarding faster property access when using ES6 class inheritance? > > Thanks! > > -- > -- > v8-dev mailing list > [email protected] > http://groups.google.com/group/v8-dev > --- > You received this message because you are subscribed to the Google Groups > "v8-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/v8-dev/15af9604-d1ed-4ce8-a0ff-3e92667739b0%40googlegroups.com > <https://groups.google.com/d/msgid/v8-dev/15af9604-d1ed-4ce8-a0ff-3e92667739b0%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-dev/CAH3p7oPr8ANve0SRcdUW9Q3dybNG5B2b-rkp8PLcqt__pSsg3A%40mail.gmail.com.
