的數組什麼是更有效的(在存儲器消耗換算)的方式來存儲長度萬的陣列具有4個整數屬性:陣列陣列或對象
選項1:對象數組
var array = [];
array[0] = {p1:1, p2:1, p3:1, p4:1}
或
選項2:整數四個陣列
var p1 = [], p2 = [], p3 = [], p4 = [];
p1[0] = 1;
p2[0] = 1;
p3[0] = 1;
p4[0] = 1;
的數組什麼是更有效的(在存儲器消耗換算)的方式來存儲長度萬的陣列具有4個整數屬性:陣列陣列或對象
選項1:對象數組
var array = [];
array[0] = {p1:1, p2:1, p3:1, p4:1}
或
選項2:整數四個陣列
var p1 = [], p2 = [], p3 = [], p4 = [];
p1[0] = 1;
p2[0] = 1;
p3[0] = 1;
p4[0] = 1;
四個由10,000個元素組成的數組在內存方面可能會更好,因爲您只存儲四個複雜對象(數組),然後存儲40,000個整數 - 另一種方式是存儲10,000個數組和40,000個整數數組)。
選項2. 4個對象(數組也是對象)與10001個對象。
我的猜測是,單純從比特和字節的角度來看,一個多維數組將有最小的足跡:
var p = [];
p[0] = [1,1,1,1];
它不是單個數組 - 兩個維度是由數組內的數組「模擬」的。它是2個數組 - 一個外部和一個內部。有了10000個元素,它將成爲10001個陣列。 –
是的。四個10,000個物品陣列與10,000個四個物品陣列......前者可能會獲勝 – jackwanders
我實際測試了谷歌瀏覽器的任務管理器這兩個選項,這顯示關於打開的選項卡(Shift+ESC
)信息,並且,當這不可能是100%精確的,但它確實表明顯著差異:
對於第一種選擇,用10,000個元素創建的陣列,每個是與4個屬性作爲對象你指定的內存使用量猛增了大約10MB啓動陣列後。
第二種方法是創建4個數組,每個數組包含10,000個元素,使內存使用跳轉大約5MB。
某些內存使用跳轉可能與創建和內部瀏覽器內容的實際處理有關,但重點是 - 與預期的一樣 - 創建對象會爲您正在存儲的數據增加更多開銷。
這裏有兩個有效的答案:「自己嘗試一下,找出答案」和「沒關係」。編寫一個基準腳本並找出哪一個消耗更多內存是非常容易的。你不應該在乎,因爲差異是微不足道的,這個規模的內存消耗在開發網站時並不重要。無論哪一種選擇都會導致邏輯上更合理,可維護的代碼就是您應該使用的代碼。 – meagar
@meagar還有「它取決於JavaScript引擎實現」 –
除此之外,所有的答案都會忘記,取決於你如何創建它,JavaScript數組可能需要更多的大小來存儲它的元素。請參閱有關非常類似問題的討論http://stackoverflow.com/questions/5040753/why-arraylist-grows-at-a-rate-of-1-5-but-for-hashmap-its-2 –