使用高整数数组索引有什么不利吗?

问题描述:

标题基本上。使用高整数数组索引有什么不利吗?

我们在说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"; 
+0

对于每个返回单个元素,尽管它并不一定意味着其他元素没有分配内存空间,这是我担心的。至于字典数组,它们与对象有何不同? o.0 – Dellirium

+0

@Dellirium:我明白了这个问题,但是通过再次使用Chrome进行测试,元素编号为1000000,与元素编号为1相比,它没有任何额外的内存。至于字典/数组与对象,您可以参考到http://*.com/a/8067675/1640090。 – vbguyny

+0

谢谢你,会进一步调查 – Dellirium