如果你用一点点突发和一点递归做了什么:
主功能
发生的情况是一个给定的间隔(即 500 个)通过,在以给定的迭代次数结束index
循环时,它会以相同的突发数重新调用自己。当特征数组的末尾完成时,函数结束。burst
for
burst
var transferFeatures = function (index, burst) {
for (var z = 0; z <= burst; z++) {
if (index === features.length) {
return;
}
var feature = features[index];
if (feature.onScreen) {
dataArray.push(feature.attributes);
}
index++;
}
if (index !== features.length) {
transferFeatures(index, burst);
}
};
测试
为了模拟负载,我使用各种键值对(最重要的是您的attributes
内部对象)创建了一个对象数组:
//To simulate a random boolean
var randomBoolean = function () {
return Math.random() <= 0.5;
};
//A random integer
var getRand = function () {
return (Math.floor(Math.random() * 10).toString());
};
// Create a bunch of dummy objects
var randomFeatures = function (arr, i) {
for (var p = 0; p < i; p++) {
arr.push({
onScreen: randomBoolean(),
attributes: {
width: getRand(),
height: getRand(),
someAtt: "I'm just an attribute",
coolKidsRideBikes: true,
foo: "bar",
bar: "baz"
}
});
}
};
当然,这与onScreen()
您将使用的测试不同,但无论哪种方式,它都会计算出一个boolean
值。我认为如果你在你的代码中应用这个概念,你可能会得到惊人的结果。
我在顶部链接的小提琴中的所有内容都被称为:
randomFeatures(features, 5000);
console.log(features.length);
transferFeatures(0,500);
console.log(dataArray.length);
负载测试
我模拟了(500 万)个随机对象被a of5000000
推送到,脚本在大约 3.29 秒内完成。
features
burst
1000