这是管理经常创建和销毁对象的重用的非常简单的方法。 freelist 仅在当前没有可用对象时创建新对象,减少内存占用而无需等待垃圾回收等。使用它涉及三个简单的步骤:
为向量创建一个新的freelist(你想重用的虚构对象类型):
// Some type of object I want to be able to reuse
var Vector = require('./Vector');
// The freelist itself
var FreeList = require('freelist').FreeList;
// Arguments are (freelistName, maxSize, constructorForNewObjects)
var vectorsList = new FreeList('vectors', 1000, function() {
// quick way to use constructor with arguments object
return Vector.apply(Object.create(Vector.prototype), arguments);
});
从freelist中获取一个新向量:
var vector = vectorsList.alloc(/* optional arguments for the Vector constructor /*);
释放不再需要的向量:
vectorsList.free(vector);
就是这样。
需要注意的非常重要的一点:
尽管我已经在上面编写了将来自 alloc 调用的参数传递给向量构造函数的方法,但 只有在列表中没有可用的可用向量时才会发生。否则你只会得到第一个可用的向量,仍然用它在构造时的任何参数构造。
如果您想真正干净地初始化每个对象,您可能不应该将对象的初始化放入构造函数中,而应放入 init 函数中,您在从 freelist 中获取对象后总是调用该函数。
当然,这可能由 freelist 完成,通过一些巧妙的技巧再次调用构造函数进行初始化。