README
Sea
An object pool for node.js designed for ease of use and resiliency. Unlike many
object pooling libraries, Sea has a bounded free list size while still
keeping track of the count of outstanding objects. So, if you miss a free()
in your code, the objects will be garbage collected as normal.
Example
var ObjectPool = require('sea'); // singleton
function Widget() {
this.foo = null;
this.bar = null;
}
// `clear` is required to be implemented on your type
Widget.prototype.clear = function clear() {
this.foo = null;
this.bar = null;
}
// `reset` is required to be implemented on your type
Widget.prototype.reset = function reset(foo, bar) {
this.foo = foo;
this.bar = bar;
}
ObjectPool.setup({
Type: Widget,
maxSize: 1000
});
function main(argv) {
ObjectPool.bootstrap({
statReceiver: function statReceiver(type, name, value, tags) {
// type: 'gauge'
// name: 'object-pool.free' or 'object-pool.outstanding'
// value: int
// tags: {name: 'poolname'}
// do something with stat, like:
statsd[type](name + '.' + tags.name, value);
},
reportInterval: 5000, // stat reporting interval
timers: require('timers'), // or other timers object
// true will enable the outstanding list to keep track of instances
// that aren't getting freed
debug: false
});
var w = Widget.alloc();
w.reset('some', 'values');
// do things with w
w.free();
ObjectPool.unref();
}
if (require.main === module) {
main(process.argv);
}
License
MIT.