From e65f17b86cdfbe04453766161d5159203e672a7f Mon Sep 17 00:00:00 2001 From: Ben Alpert Date: Sun, 8 Jun 2014 12:51:16 -0700 Subject: [PATCH] Add helpful message about pooled classes Hopefully this will make fewer people confused at all of the null properties. The string won't wrap nicely so I tried to keep it pithy: https://s3.amazonaws.com/uploads.hipchat.com/6574/26709/v8vzKAC784QMkX2/upload.png --- src/utils/PooledClass.js | 41 ++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/src/utils/PooledClass.js b/src/utils/PooledClass.js index e1ed2b100c870..606c28e8ee94f 100644 --- a/src/utils/PooledClass.js +++ b/src/utils/PooledClass.js @@ -20,6 +20,14 @@ var invariant = require('invariant'); +var ABOUT_POOLING_MESSAGE = null; +if (__DEV__) { + ABOUT_POOLING_MESSAGE = ( + 'This object is reused for performance reasons. If you\'re seeing this ' + + 'after logging an object, try logging individual properties.' + ); +} + /** * Static poolers. Several custom versions for each potential number of * arguments. A completely generic pooler is easy to implement, but would @@ -29,46 +37,54 @@ var invariant = require('invariant'); */ var oneArgumentPooler = function(copyFieldsFrom) { var Klass = this; + var instance; if (Klass.instancePool.length) { - var instance = Klass.instancePool.pop(); + instance = Klass.instancePool.pop(); Klass.call(instance, copyFieldsFrom); - return instance; } else { - return new Klass(copyFieldsFrom); + instance = new Klass(copyFieldsFrom); } + instance._ABOUT_POOLING = null; + return instance; }; var twoArgumentPooler = function(a1, a2) { var Klass = this; + var instance; if (Klass.instancePool.length) { - var instance = Klass.instancePool.pop(); + instance = Klass.instancePool.pop(); Klass.call(instance, a1, a2); - return instance; } else { - return new Klass(a1, a2); + instance = new Klass(a1, a2); } + instance._ABOUT_POOLING = null; + return instance; }; var threeArgumentPooler = function(a1, a2, a3) { var Klass = this; + var instance; if (Klass.instancePool.length) { - var instance = Klass.instancePool.pop(); + instance = Klass.instancePool.pop(); Klass.call(instance, a1, a2, a3); - return instance; } else { - return new Klass(a1, a2, a3); + instance = new Klass(a1, a2, a3); } + instance._ABOUT_POOLING = null; + return instance; }; var fiveArgumentPooler = function(a1, a2, a3, a4, a5) { var Klass = this; + var instance; if (Klass.instancePool.length) { - var instance = Klass.instancePool.pop(); + instance = Klass.instancePool.pop(); Klass.call(instance, a1, a2, a3, a4, a5); - return instance; } else { - return new Klass(a1, a2, a3, a4, a5); + instance = new Klass(a1, a2, a3, a4, a5); } + instance._ABOUT_POOLING = null; + return instance; }; var standardReleaser = function(instance) { @@ -80,6 +96,7 @@ var standardReleaser = function(instance) { if (instance.destructor) { instance.destructor(); } + instance._ABOUT_POOLING = ABOUT_POOLING_MESSAGE; if (Klass.instancePool.length < Klass.poolSize) { Klass.instancePool.push(instance); }