2016-12-06 29 views
0

標題基本上。使用高整數數組索引有什麼不利嗎?

我們在說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],因爲它會導致解除優化....解決方案任何人?

回答

1

從我的瀏覽器(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://stackoverflow.com/a/8067675/1640090。 – vbguyny

+0

謝謝你,會進一步調查 – Dellirium

相關問題