Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于计算数组索引和重复引用特定数组值的效率的问题 试图最小化JavaScript函数处理的时间,请考虑这个设置。函数中有一个循环,它对一组相似的对象进行操作。数组的索引是[4+循环计数器],并且在每个循环迭代中都有对数组[4+i][各种属性名称]的多个引用,例如a[4+i].x,a[4+i].y,a[4+i].z_Javascript - Fatal编程技术网

关于计算数组索引和重复引用特定数组值的效率的问题 试图最小化JavaScript函数处理的时间,请考虑这个设置。函数中有一个循环,它对一组相似的对象进行操作。数组的索引是[4+循环计数器],并且在每个循环迭代中都有对数组[4+i][各种属性名称]的多个引用,例如a[4+i].x,a[4+i].y,a[4+i].z

关于计算数组索引和重复引用特定数组值的效率的问题 试图最小化JavaScript函数处理的时间,请考虑这个设置。函数中有一个循环,它对一组相似的对象进行操作。数组的索引是[4+循环计数器],并且在每个循环迭代中都有对数组[4+i][各种属性名称]的多个引用,例如a[4+i].x,a[4+i].y,a[4+i].z,javascript,Javascript,是否可以在每次循环迭代中多次计算4+i,或者通过在循环顶部声明一个变量来保持4+i的值并将该变量用作索引,或者将一个变量声明为对a[4+i]对象的引用来提高效率?浏览器声明一个新变量或添加4+i十次是否需要更多的工作?浏览器是否每次都会查找a[n],这样,如果需要在每次循环迭代中多次使用a[n]中的对象,最好设置x=a[n]并只引用x.property\u名称十次 谢谢你考虑我的新手问题 浏览器是否每次都会查找a[n],这样,如果需要在每次循环迭代中多次使用a[n]中的对象,最好设置x=a[n]

是否可以在每次循环迭代中多次计算
4+i
,或者通过在循环顶部声明一个变量来保持
4+i
的值并将该变量用作索引,或者将一个变量声明为对
a[4+i]
对象的引用来提高效率?浏览器声明一个新变量或添加
4+i
十次是否需要更多的工作?浏览器是否每次都会查找
a[n]
,这样,如果需要在每次循环迭代中多次使用
a[n]
中的对象,最好设置
x=a[n]
并只引用
x.property\u名称十次

谢谢你考虑我的新手问题

浏览器是否每次都会查找
a[n]
,这样,如果需要在每次循环迭代中多次使用
a[n]
中的对象,最好设置
x=a[n]
并只引用
x.property\u名称十次

对。尽管JavaScript引擎可能能够优化掉重复的
a[4+i]
工作,但它也可能无法优化,这取决于您的代码在做什么。相反,创建一个局部变量来存储引用是非常非常少的工作

主观上,读者可能更清楚,而且更易于维护,只需执行一次
x=a[4+i]
,然后使用
x

也就是说,在你的具体情况下,知道这个问题答案的最好方法就是这样做,看看是否有改进

浏览器是否每次都会查找
a[n]
,这样,如果需要在每次循环迭代中多次使用
a[n]
中的对象,最好设置
x=a[n]
并只引用
x.property\u名称十次

对。尽管JavaScript引擎可能能够优化掉重复的
a[4+i]
工作,但它也可能无法优化,这取决于您的代码在做什么。相反,创建一个局部变量来存储引用是非常非常少的工作

主观上,读者可能更清楚,而且更易于维护,只需执行一次
x=a[4+i]
,然后使用
x


也就是说,在您的具体情况下,了解此问题答案的最佳方法是这样做,看看是否有改进。

此片段运行了半分钟多一点

函数m(f){
常量t=[Date.now()];
常数s=[];
对于(设r=0;ra+b);
}
常数倍=1000;
常数bignumber=100000;
const bigarray=新数组(bignumber);

对于(让i=0;i这个代码段运行了半分钟多一点

函数m(f){
常量t=[Date.now()];
常数s=[];
对于(设r=0;ra+b);
}
常数倍=1000;
常数bignumber=100000;
const bigarray=新数组(bignumber);

对于(让i=0;我必须将递增索引或更好的索引作为元素的对象引用。1)对其进行基准测试。这将确定哪种变体在您的情况下更有效。2)这无关紧要。无论哪种方式,对于现实世界的场景来说都足够快。首先要写可读的代码。差别可能很小,但无论如何都要设置
x=a[n]
,因为它更容易阅读。然后根据需要对其进行基准测试。只需将递增的索引或更好的索引作为元素的对象引用。1)对其进行基准测试。这将确切地告诉您哪种变体在您的情况下更有效。2) 没关系。无论哪种方式,对于现实世界的场景来说都足够快。首先要写可读的代码。差别可能很小,但无论如何都要设置
x=a[n]
,因为它更容易阅读。如果你想的话,就对它进行基准测试。谢谢。无论哪种方式,我都看不出在使用上有什么不同,但我对“帮助”浏览器高效工作的最佳编码方式感兴趣;这很有帮助,谢谢。无论哪种方式,我都看不出在使用上有什么不同,但我对“帮助”浏览器高效工作的最佳编码方式感兴趣;这很有帮助。谢谢你花时间做这个例子。有趣的是,
idx
item
慢。直到昨天,我还没有想到浏览器或处理器会做什么来获取保存在数组特定索引中的数据。因此,创建一个局部变量将数组的值存储在一个特定的索引中要比重复引用它作为
a[i]
来做的工作要少,因为每次都需要做一点工作。你的结果看起来很直观;然而,我在Firefox中无法与之匹敌,但我的机器是10年以上的双核2GB内存。如果我使用
bignumer=100000
运行它,每台运行大约需要13500毫秒,结果毫无意义,比如
item
是最慢的,但都差不多。如果我使用
bignumber=25000
运行它,那么
idx
在1925ms左右始终是最慢的,而
item
在1675ms左右是最快的,而
idx+4
item+4
在1735ms左右是相等的。数值波动,但相对大致相同。我的旧机器上一定发生了其他事情才能产生这些结果。不管怎样,您提供的代码通常是合理的编码实践。也许,这是一个必须了解浏览器/JS解释器如何工作的问题,以最好地了解如何编写代码来“帮助”它optim