使用高整数数组索引有什么不利吗?
标题基本上。使用高整数数组索引有什么不利吗?
我们在说javascript,要说清楚。我需要知道是否存在任何性能负面因素,内存问题等,将高值整数用作数组索引而不是低价值整数。我知道,某些程序设计语言会从0分配足够的内存来索引所有的元素与动感“神奇的”数组或诸如此类的东西一个最大值,所以我问:
var arrayA = [];
arrayA[12526] = "a";
var arrayB = [];
arrayB[1] = "b";
不arrayA和arrayB构成一脉相承到系统,还是使用arrayB类结构的影响小得多;
选读:(为什么我就遇到了这个问题)
什么,我想说明的是在一定意义上我猜动态CSS串。 假设我的代码每隔几秒产生一个dom元素(div)和一段CSS,它将所述div移动几秒钟。 5秒后,这个div将被删除,永远不会再被使用,所以CSS也需要继续。
我想,创建一个div后,我也通过var uniqueID = setTimeout
创建一个超时,然后命名为uniqueID
的css选择器。这使我可以同时存在大量的div,每个div都有唯一的ID,因为每个div都有一个计时器。然后我创建一个样式字符串例如#uniqueID {top: 20px; left: 20px;}
明显不同的div会有不同的属性。每次创建这些CSS规则之一时,我都会更新<style>
元素的innerHTML以在其中添加此附加规则。过了一段时间,虽然我拥有的CSS字符串是巨大的....我们正在谈论像2000个独特的样式ID选择器,并没有实际使用它们。所以我想澄清这一点。当我添加一个新的CSS时,做了一个“重写”<style>
元素的innerHTML
的对象,并记住我之前提到过的定时器?那就是我将从数组中移除样式字符串的地方。随着时间的流逝,只有屏幕上的divs
将其CSS存储在页面的<style>
元素中。
这是代码相当多:
var styleSystem = {
repository: [],
add: function (id, style) {
this.repository[id] = style;
this.updateStyle();
console.log("added");
},
remove: function (id) {
this.repository.splice(id, 1);
this.updateStyle();
console.log("removed");
},
updateStyle: function() {
var summedString = "";
this.repository.forEach(function (element) {
summedString += element;
});
document.getElementById("DynamicStyle").innerHTML = summedString;
}
};
请注意:
〜还有就是与代码没有问题,它的作品,我只是担心我被坏人性能明智的,因为我使用高整数索引数组ID来保存这些数据〜
关于性能的话题,最好每次只向DOM树中添加和删除新的<style>
元素,而不是动态地更改一个元素的内容单元素强制一个CSS重绘,可以说没有太多的重新绘制,只有5-10个div divs同时存在?
编辑: 经进一步调查,我注意到,由于预期这不起作用,弦有时会拆除,其他时间不。在视觉上这个东西很有用,但它仍然保留了CSS中的某些字符串,这是不好的。我正在尽我所能避免delete array[key]
,因为它会导致解除优化....解决方案任何人?
从我的浏览器(V54)的当前版本的测试和使用代码:
var arrayA = [];
arrayA[12526] = "a";
var arrayB = [];
arrayB[1] = "b";
尽管事实上,arrayA有12527的长度只在它有一个单一的项目。如果我使用forEach
方法遍历arrayA中的项目,它只返回单个值“a”。因此,理由是它不占用任何额外的内存。
此外,重要的是要注意,数组可以用作字典,您可以将字符串名称(或键)放在方括号中,它就是您的情况中发生的事情。
arrayA["foo"] = "bar";
对于每个返回单个元素,尽管它并不一定意味着其他元素没有分配内存空间,这是我担心的。至于字典数组,它们与对象有何不同? o.0 – Dellirium
@Dellirium:我明白了这个问题,但是通过再次使用Chrome进行测试,元素编号为1000000,与元素编号为1相比,它没有任何额外的内存。至于字典/数组与对象,您可以参考到http://*.com/a/8067675/1640090。 – vbguyny
谢谢你,会进一步调查 – Dellirium