Javascript中数学对象的速度

met*_*ion 7 javascript

我正在开发一个javascript应用程序,它大量使用数学运算,每个鼠标移动几十个调用.我一直在研究其他人的代码作为起点,我经常找到原生javascript数学的解决方法,比如......

var pi = Math.PI
var distance = (x * x) + (y * y) / R * R
var pixels = ~~(x/y)
Run Code Online (Sandbox Code Playgroud)

使用Math对象会有显着的性能损失吗?如果是这样,有哪些常见的解决方法?

c69*_*c69 16

如果你出于某种原因在javascript中进行计算密集型操作,你必须记住那些东西(*并阅读David Mandelin的" 了解你的引擎:如何使你的JavaScript快速演示 - PDF,他在这里详细描述了*"):

  1. 内联你能做的一切.

  2. 函数调用非常昂贵

  3. 对象访问很昂贵

  4. 多态性可能会降低性能,您的变量和参数应始终只包含一种数据类型.

Math对象并不是特别慢,但是distance()无论如何你都找不到函数,并且通过Math.method()调用从闭包中访问它的方法是低效的.

所以sqrt,当然,有过之而无不及x*x,自定义random功能可能对你更好,郫县应该在循环缓存,minmax可能应该避免为好,没有关于三角函数和对数速度的想法.


PS:你可以做一些事情,比如((x >= 0 ? x : -x) + 0.5) >> 0,替换Math.ceil(Math.abs()),但记住 - 当我说"密集" - 我在谈论数字处理,数据处理,物理,图形和类似的东西.对于普通的JavaScript站点或RIA - 你不应该做我在这里建议的东西.此外,大多数速度黑客都有副作用