2015-06-20 36 views
0

我最近在閱讀JS here後得知,JS中的數組實際上是「稀疏數組」,實質上是一個指針數組,並且直到需要。我知道在C中,你可以指定一個數組的類型,並分配所需的空間,如int C [20];。在JS中什麼是快速存儲XY座標整數的最高性能的方法

現在我有一個畫布繪畫應用程序,它記錄事件發生時發生的事件發生時的事件發生時的偏移X,偏移量Y和其他數據。如何將這些信息從創建對象的鏈接列表,到對象數組,甚至是多個數組記錄每個事件的整數值,這些選項中有很多。

經過一番研究,我發現有初始化和創建數組的3種方式:

var arrayT = new Array(24); 
var arrayW = []; 
arrayW.length = 24; 
var buffer = new ArrayBuffer(24); 

雖然我研究了一下到每個人,我並不完全相信這將是最佳的以預先分配空間的方式高效地分配整數,以便JS引擎不需要不斷檢查輸入數據類型並創建需要的空間。如果您認爲陣列不是最佳解決方案,那麼我可以做些什麼來利用JS的長處?

+1

您預計每秒會發生多少百萬次事件?我猜這裏沒有理由擔心表現。只需使用例如'var events = [];'然後每次發生事件時都可以執行'events.push({x:xOffset,y:yOffset});' – SpiderPig

+0

你不能預先分配空間,瀏覽器不知道你是什麼將存儲在數組內。你只需要24個未定義的元素。試着優化你的代碼邏輯,你不能優化這個整數的存儲。只需使用'var buffer = []'。 – skobaljic

+0

hi SpiderPig:約有4000個事件persecond。 – Pete

回答

1

是的,標準JavaScript「陣列」aren't really arrays at all

這是不可能的,除了在極少數極性能敏感的情況下,實際上無所謂,但如果你想整數真正預分配的數組,在任何依稀現代的瀏覽器可以使用Int32ArrayMDNspec):

var a = new Int32Array(24); 

(或者Int8ArrayInt16Array。)

相關問題