簡體   English   中英

有沒有比JavaScript中的對象數組更有效的方法來存儲大量數據?

[英]Is there anything more efficient than an array of objects in javascript to store large amounts of data?

我的應用程序每秒收集10次加速度,因此我需要存儲數千行數據。 目前,我有一個對象,該對象是存儲所有對象的其他對象的列表-比這更有效的方法?

var arr = [];

function dataPoint(x, y, z, tstamp) {
    this.xAccel = x;
    this.yAccel = y;
    this.zAccel = z;
    this.epoch = tstamp;
}

var dp = new dataPoint( acceleration.x, acceleration.y, acceleration.z, acceleration.timestamp );

arr.push(dp);

如果您要定位的平台支持類型化數組,則這些類型可能會更有效。

查看您的代碼:

> var arr = [];  
> function dataPoint(x, y, z, tstamp) {
>     this.xAccel = x;
>     this.yAccel = y;
>     this.zAccel = z;
>     this.epoch = tstamp;
> }
> var dp = new dataPoint( acceleration.x, acceleration.y,
>          acceleration.z, acceleration.timestamp );
> arr.push(dp); 

我不明白您為什么要為構造函數煩惱,您可以簡單地做到(略):

  arr.push({x: acc.x, y: acc.y, z: acc.z, epoch: acc.timestamp});

盡管我可能將epoch更改為t 鑒於您具有這樣的簡單結構,為什么不這樣做:

  arr.push([acc.x, acc.y, acc.z, acc.timestamp]);

並按索引引用成員。 構造函數的優點是繼承的方法,但是,如果您僅具有一個繼承級別,則簡單的函數只是一種有效的方法,並且執行起來可能更快(與[[Prototype]]鏈相比,在全局對象上的查找通常非常快,但是請參閱下面的警告)

順便說一句,我認為時代名稱在錯誤的上下文中使用。 紀元是參考點,因此您可能會有一個例如2012-04-20T18:53:21.098Z的紀元,然后以毫秒或秒為單位具有該紀元的增量。 javascript時間參考的時代(即Date.prototype.getTime返回的值)是1970-01-01T00:00:00Z,時間參考是一個增量。

警告

關於什么是“最好的”,我想您的標准是“最快的”,但要注意的是代碼必須仍然相當清晰和可維護。 最好的選擇是避免明顯的速度問題,然后在各種瀏覽器中進行測試並根據結果進行優化。 一個瀏覽器中的優化可能與其他瀏覽器幾乎沒有差異,或者可能明顯慢一些。 例如,遞減循環在大多數瀏覽器中通常更快,但在Opera中則慢得多。 另外,在循環條件下評估表達式,例如:

  while ((el = node.firstChild))

曾經比:

  while (el) {
    el = node.firstChild

但是對於較新的瀏覽器來說,它似乎並不重要。 類似地,for循環與while和do循環一樣快(通常)。 但要進行更多輸入才能設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM