Javascript绝句性能

前几天在微博中看到一篇叫Javascript绝句欣赏 的奇文。 里面很多绝句实现了我经常用到的功能需求。对比我自己之前的实现方式,我简直觉得自己搓死了。

疑惑

虽然绝句很短很好,但是正因为它很绝,比较难以理解。所以我想给自己一个理由,为什么要去使用这些绝句。 很想当然地我想到性能可能会有所提高,因为实现代码量很少而且又减少了函数调用,某些绝句的性能应该会比较高的。

性能对比

取整同时转成数值型

绝句实现: |0 ^0 >>0 ~~

'10.567890'|0
'10.567890'^0
~~'10.567890'

结果: 10

-2.23456789|0
-2.23456789^0
~~-2.23456789

结果: -2

大于等于 0x80000000 会出现bug

-2147483648|0 

普通实现:

function integer(n) {
  return n >=0 ? Math.floor(n) : Math.ceil(n);
}
var count = 5000000;
var start = new Date();
var s = 0;
for (var i = 0; i < count; i++) {
  s = '10.567890'|0;
}
console.log('|0 => %d', new Date() - start);

var start = new Date();
var s = 0;
for (var i = 0; i < count; i++) {
  s = '10.567890'^0;
}
console.log('^0 => %d', new Date() - start);

var start = new Date();
var s = 0;
for (var i = 0; i < count; i++) {
  s = '10.567890'>>0;
}
console.log('>>0 => %d', new Date() - start);

var start = new Date();
var s = 0;
for (var i = 0; i < count; i++) {
  s = ~~'10.567890';
}
console.log('~~ => %d', new Date() - start);

var start = new Date();
var s = 0;
for (var i = 0; i < count; i++) {
  s = integer('10.567890');
}
console.log('integer => %d', new Date() - start);

var start = new Date();
var s = 0;
var n = '10.567890';
for (var i = 0; i < count; i++) {
  s = n >=0 ? Math.floor(n) : Math.ceil(n);
}
console.log('inline => %d', new Date() - start);
console.log('');

取数组中的最大最小值

Array.max = function( array ){ return Math.max.apply( Math, array ); }; Array.min = function( array ){ return Math.min.apply( Math, array ); };

Comments

Fork me on GitHub