Javascript 将Math.max与类型化子数组一起使用

Javascript 将Math.max与类型化子数组一起使用,javascript,performance,typed-arrays,Javascript,Performance,Typed Arrays,我有一个填充了值的类型化数组 我试图找出最快的方法来计算任何给定边界中这些值的最大值和最小值 例如,我有3200个值,我想知道索引342和934之间范围的最大值,边界范围可以改变,从1000个值到数万个值 我认为这样做会奏效: const a=新的Uint8Array([10,60,5,90,110,3,45,1,24,54,29]); max(…a.子数组(5,7));//返回45。 但就我记忆所及,spread操作符是超慢的 实际上,我认为Math.max函数也接受数组,但使用 Math.

我有一个填充了值的类型化数组

我试图找出最快的方法来计算任何给定边界中这些值的最大值和最小值

例如,我有3200个值,我想知道索引342和934之间范围的最大值,边界范围可以改变,从1000个值到数万个值

我认为这样做会奏效:

const a=新的Uint8Array([10,60,5,90,110,3,45,1,24,54,29]);
max(…a.子数组(5,7));//返回45。
但就我记忆所及,spread操作符是超慢的

实际上,我认为
Math.max
函数也接受数组,但使用

Math.max(a.子数组(5,7));
返回
NaN

有人知道最有效的方法是什么来获得任何给定范围的最大值吗?我特别希望在大视图上获得高性能。

接受任意数量的参数,因此您可以使用
Math.max.apply
(请参阅)向其传递数组:

const a=新的Uint8Array([10,60,5,90,110,3,45,1,24,54,29]);
var max=Math.max.apply(null,a.子数组(5,7));
控制台日志(最大值)接受任意数量的参数,因此可以使用
Math.max.apply
(请参阅)向其传递数组:

const a=新的Uint8Array([10,60,5,90,110,3,45,1,24,54,29]);
var max=Math.max.apply(null,a.子数组(5,7));

控制台日志(最大值)这是您可以使用的替代方案

const a = new Uint8Array([10, 60, 5, 90, 110, 3, 45, 1, 24, 54, 29]);
Math.max.apply({}, a.subarray(5, 7));
我尝试在上运行基准测试,结果如下:

code block 1 (1404013)

code block 2 (1695631)

这就是应用程序的工作原理,这是您可以使用的替代方案

const a = new Uint8Array([10, 60, 5, 90, 110, 3, 45, 1, 24, 54, 29]);
Math.max.apply({}, a.subarray(5, 7));
我尝试在上运行基准测试,结果如下:

code block 1 (1404013)

code block 2 (1695631)

这就是apply的工作原理,根据

这是最快的方式吗?@JohannesKlaußI对这一点和价差进行了基准测试,结果更好。我个人想不出有什么可能faster@JohannesKlauß撒谎,我找到了一种似乎更快的方法哦,好吧,我想看看更大的排列,这是最快的方法吗?@JohannesKlauß我对这一点和排列进行了基准测试,结果更好。我个人想不出有什么可能faster@JohannesKlauß撒谎,我找到了一种似乎更快的方法哦,很好,我要检查一下更大的阵列