我的应用程序每秒收集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);
答案 0 :(得分:0)
如果您定位的平台支持typed arrays,那么这些可能会更有效。
答案 1 :(得分:-1)
查看您的代码:
> 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]]
链相比,对全局对象的查找通常非常快,但是见下面的警告)
顺便说一句,我认为名称 epoch 正在错误的上下文中使用。一个纪元是一个参考点,所以你可能有一个说明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循环一样快(通常)。但需要更多的打字来设置。