z5h*_*z5h 25 javascript optimization
我一般不喜欢微基准测试.但这一个有一个非常有趣的结果.
http://ernestdelgado.com/archive/benchmark-on-the-floor/
它表明这Math.floor
是在Javascript中计算楼层的最慢方式.~~n
,n|n
,n&n
全部为快.
这看起来非常令人震惊,因为我希望在今天的现代浏览器中实现Javascript的人会是一些相当聪明的人.
对于其他方法无法做到的事情,地板是否重要?有没有理由使用它?
Mat*_*ley 32
主要原因Math.floor
是速度较慢(实际上它是 - 在某些测试中我做得更快)是它涉及函数调用.较旧的JavaScript实现无法内联函数调用.较新的引擎可以内联调用,或者至少使属性查找更快,但是如果您(或其他一些脚本)覆盖了Math.floor
函数,它们仍然需要保护条件.虽然开销很小,但速度差别不大.
更重要的是,正如在几条评论中提到的那样,其他方法并不等同.他们都通过按位操作来工作.按位运算符通过截断数字自动将其操作数转换为32位整数.如果数字适合32位,那很好,但JavaScript数字是64位浮点数,可能比2147483647大得多.
它们也为负数给出不同的结果,因为转换为整数截断并且Math.floor
总是向下舍入.例如Math.floor(-2.1) === -3
,但是(-2.1) | (-2.1) === -2
.
如果你知道你只处理小于2147483648的正数,你需要在旧浏览器中挤出你的代码的所有性能(确保它实际上是瓶颈.它可能不是.),我会用一种更简单的方法:x|0
.它不会对变量进行两次计算,即使x
是表达式也可以工作(只需确保将其放在括号中,这样就不会遇到优先级问题).
kem*_*002 26
它与现代浏览器无关.它与实施ECMA标准有关.即使有更快的方法,您也不能只改变某个函数的执行方式.它可能会破坏现有代码.
Math.Floor必须考虑处理不同类型的许多不同场景.如你所描述的那样,他们可以通过采取捷径更快地制定不同的情景吗 也许他们可以,但这可能打破了其他场景.仅仅因为表面上的东西看起来很小,并不意味着下面没有冰山.
归档时间: |
|
查看次数: |
12737 次 |
最近记录: |