查看您的代码:
> 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 和 do 循环一样快(通常)。但需要更多的输入来设置。