@samitouri / QOS-React-2 / commits / e65f17b86c

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 }