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
Ben Alpert committed
Jun 8, 2014 at 12:51 UTC
e65f17b86cdfbe04453766161d5159203e672a7f
1 file changed
+29
-12
src/utils/PooledClass.js
+29
-12
@@ -20,6 +20,14 @@
20
21
var invariant = require('invariant');
22
23
+var ABOUT_POOLING_MESSAGE = null;
24
+if (__DEV__) {
25
+ ABOUT_POOLING_MESSAGE = (
26
+ 'This object is reused for performance reasons. If you\'re seeing this ' +
27
+ 'after logging an object, try logging individual properties.'
28
+ );
29
+}
30
+
31
/**
32
* Static poolers. Several custom versions for each potential number of
33
* arguments. A completely generic pooler is easy to implement, but would
@@ -29,46 +37,54 @@ var invariant = require('invariant');
37
*/
38
var oneArgumentPooler = function(copyFieldsFrom) {
39
var Klass = this;
40
+ var instance;
41
if (Klass.instancePool.length) {
33
- var instance = Klass.instancePool.pop();
42
+ instance = Klass.instancePool.pop();
43
Klass.call(instance, copyFieldsFrom);
35
- return instance;
44
} else {
37
- return new Klass(copyFieldsFrom);
45
+ instance = new Klass(copyFieldsFrom);
46
}
47
+ instance._ABOUT_POOLING = null;
48
+ return instance;
49
};
50
51
var twoArgumentPooler = function(a1, a2) {
52
var Klass = this;
53
+ var instance;
54
if (Klass.instancePool.length) {
44
- var instance = Klass.instancePool.pop();
55
+ instance = Klass.instancePool.pop();
56
Klass.call(instance, a1, a2);
46
- return instance;
57
} else {
48
- return new Klass(a1, a2);
58
+ instance = new Klass(a1, a2);
59
}
60
+ instance._ABOUT_POOLING = null;
61
+ return instance;
62
};
63
64
var threeArgumentPooler = function(a1, a2, a3) {
65
var Klass = this;
66
+ var instance;
67
if (Klass.instancePool.length) {
55
- var instance = Klass.instancePool.pop();
68
+ instance = Klass.instancePool.pop();
69
Klass.call(instance, a1, a2, a3);
57
- return instance;
70
} else {
59
- return new Klass(a1, a2, a3);
71
+ instance = new Klass(a1, a2, a3);
72
}
73
+ instance._ABOUT_POOLING = null;
74
+ return instance;
75
};
76
77
var fiveArgumentPooler = function(a1, a2, a3, a4, a5) {
78
var Klass = this;
79
+ var instance;
80
if (Klass.instancePool.length) {
66
- var instance = Klass.instancePool.pop();
81
+ instance = Klass.instancePool.pop();
82
Klass.call(instance, a1, a2, a3, a4, a5);
68
- return instance;
83
} else {
70
- return new Klass(a1, a2, a3, a4, a5);
84
+ instance = new Klass(a1, a2, a3, a4, a5);
85
}
86
+ instance._ABOUT_POOLING = null;
87
+ return instance;
88
};
89
90
var standardReleaser = function(instance) {
@@ -80,6 +96,7 @@ var standardReleaser = function(instance) {
96
if (instance.destructor) {
97
instance.destructor();
98
}
99
+ instance._ABOUT_POOLING = ABOUT_POOLING_MESSAGE;
100
if (Klass.instancePool.length < Klass.poolSize) {
101
Klass.instancePool.push(instance);
102
}