Poolable nesneler oluşturmaya çalışıyorum, başka bir deyişle, sıfırdan yeni olanları oluşturmak yerine geri dönüştürülmüş nesneler, bu çok yavaş.Performans ölçümünde büyük bir fark yaratan döngü
var Poolable = {
pool: [],
new: function(args) {
var obj;
if (this.pool.length > 0) {
obj = this.pool.shift();
obj._recycled = false;
} else {
obj = Object.create(this.prototype);
}
this.apply(obj, arguments);
return obj;
},
delete: function(obj) {
if (obj._recycled) {
throw ("This object has already been recycled!");
}
obj._recycled = true;
this.pool.push(obj);
}
};
var extend = function(a, b) {
for (var i in b) {
if (b[i]) {
a[i] = b[i];
}
}
return a;
};
var Vector = extend(function(x, y) {
this.x = x;
this.y = y;
}, Poolable);
Vector.prototype.add = function(v) {
this.x += v.x;
this.y += v.y;
};
ben şöyle kullanabilirsiniz:
var v = Vector.new(1, 2);
// When I'm done
Vector.delete(v);
Orada herhangi şikayetler belirgin, ama sonra tuhaf bir şey olup olmadığını görmek için bu test edildi
: Büyük bir iç çok daha hızlı Poolable sürümünü kullanıyor loop için ise, Poolable olmayanlar küçük döngüler için çok daha hızlıdır.
Küçük döngü: http://jsperf.com/poolable-vs-non-poolable-objects/8
Büyük döngü: http://jsperf.com/poolable-vs-non-poolable-objects/9
Soru: pisliği testi kurma mi?
mi: Böyle basit yapısı için
, tüm Object.create + sadece daha uzatılmasını yerine denedi mi? Bu durumda neden bir havuz kullanmalısın? – gurvinder372
@ gurvinder372 Evet. Bir 2D Fizik Motoru yapmaya çalışıyorum ve yaratılan yüksek sayıda Vektör, işi yavaşlatıyordu. – SlySherZ
Vatansız nesnelere neden sahip olamıyorsunuz? – gurvinder372