Skip to content

Commit

Permalink
Tweaked wording for v8 "performance cliff" issue
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Vaughn committed Dec 4, 2018
1 parent d987172 commit 1dc108e
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions packages/react-reconciler/src/ReactFiber.js
Original file line number Diff line number Diff line change
Expand Up @@ -254,14 +254,16 @@ function FiberNode(
this.alternate = null;

if (enableProfilerTimer) {
// Note: The following is done to avoid a v8 deopt.
// Note: The following is done to avoid a v8 performance cliff.
//
// It is important to initialize the fields below with doubles.
// Otherwise Fibers will deopt and end up having separate shapes when
// doubles are later assigned to fields that initially contained smis.
// This is a bug in v8 having something to do with Object.preventExtension().
// Initializing the fields below to smis and later updating them with
// double values will cause Fibers to end up having separate shapes.
// This behavior/bug has something to do with Object.preventExtension().
// Fortunately this only impacts DEV builds.
// Unfortunately it makes React unusably slow for some applications.
// To work around this, initialize the fields below with doubles.
//
// Learn more about this deopt here:
// Learn more about this here:
// https://github.com/facebook/react/issues/14365
// https://bugs.chromium.org/p/v8/issues/detail?id=8538
this.actualDuration = Number.NaN;
Expand All @@ -270,7 +272,8 @@ function FiberNode(
this.treeBaseDuration = Number.NaN;

// It's okay to replace the initial doubles with smis after initialization.
// This simplifies other profiler code and doesn't trigger the deopt.
// This won't trigger the performance cliff mentioned above,
// and it simplifies other profiler code (including DevTools).
this.actualDuration = 0;
this.actualStartTime = -1;
this.selfBaseDuration = 0;
Expand Down

0 comments on commit 1dc108e

Please sign in to comment.