CNode

实测 对数字字符串转成数字的效率比较

分享
Ccaptainblue2013发布于11 年前最后回复11 年前19 回复9298 浏览0 收藏

代码:

var a = '1' ;
for (var i = 0; i < 100000000; i++) {
	parseInt(a);  //方案一
	// a * 1;   //方案二
}
console.log(process.uptime());

结果,单位秒: 方案一: 1.559 , 1.492 , 1.523 方案二:3.841 , 3.899 , 3.877

查看回复

回复 (19)

D
DoubleSpout#1·11 年前

我习惯 a - 0

H
hoozi#2·11 年前

parseint是内置的方法 自豪地采用 CNodeJS ionic

L
luinlee#3·11 年前

用 parseInt 时要加上第二个参数,除非有特定用途。可以试试 parseInt(xxx, 10)。

H
haozxuan#4·11 年前

哇塞,长经验了。我一般情况下也是使用方案一,当然是只知道第一种方法而已。不过我记得方案二的做法应该会涉及到字符串对象和数字对象的转换,故比较耗时

D
dayuoba#5·11 年前

process.uptime()不适合做基准测试吧:)

S
sichenglian#6·11 年前

方案二是分了两个步骤:

  1. 先把a转换成Number类型
  2. 进行算术运算(*) 这肯定比较耗时了。
H
hezedu#7·11 年前

直接Number呢?

F
fengmk2#8·11 年前

这种测试有何意义?假设你的程序是普通 web 应用,单进程能每秒响应 100w 次?

C
captainblue2013#10·11 年前
引用 dayuobaprocess.uptime()不适合做基准测试吧:)

@dayuoba 那应该用哪个比较好?

C
coordcn#11·11 年前
引用 captainblue2013@dayuoba 那应该用哪个比较好?

@captainblue2013 process.uptime是进程运行的时间,这个时间包含进程开始初始化等等过程,显然是不合理的。 高精度的process.hrtime,精确到纳秒。

S
songqinghehe#12·11 年前

长知识了

L
luinlee#13·11 年前
引用 captainblue2013@luinlee 看了,第二个参数默认是10

@captainblue2013 不是的,比较一下 parseInt('0x10') 和 parseInt('0x10', 10)。然后再比较一下 parseInt(xxx, 10) 和 parseInt(xxx) 的性能。

D
DoubleSpout#14·11 年前
引用 alsotang@DoubleSpout 好歧义啊。

@alsotang 就是把字符串的数字转为数字呀,比如 '1.11'-0 就可以转成数字了,这个比parseInt只能转整数通用一些。。。

L
leapon#15·11 年前
D
dayuoba#16·11 年前
引用 captainblue2013@dayuoba 那应该用哪个比较好?

@captainblue2013 我自己一般用

console.time('number bench')
//benchmark here
console.timeEnd('number bench')
Z
zsxsoft#17·11 年前
引用 luinlee@captainblue2013 不是的,比较一下 parseInt('0x10') 和 parseInt('0x10', 10)。然后再比较一下 parseInt(xxx, 10) 和 pa...

@luinlee

var a = '1';
var b = '0x1';

var runTest = function(timeTag, testFunction) {
	console.time(timeTag);
	for (var i = 0; i < 100000000; i++) {
		testFunction(); //a);
	}
	console.timeEnd(timeTag);
}

//runTest("parseInt", parseInt);
runTest("parseInt(a)", function() {
	parseInt(a);
});
runTest("parseInt(a, 10)", function() {
	parseInt(a, 10);
});
runTest("parseInt(b)", function() {
	parseInt(b);
});
runTest("parseInt(b, 10)", function() {
	parseInt(b, 10);
});
runTest("* 1", function() {
	a * 1;
});
runTest("- 0", function() {
	a - 0;
});


Result:

parseInt(a): 1550ms
parseInt(a, 10): 1422ms
parseInt(b): 6517ms
parseInt(b, 10): 5716ms
* 1: 3914ms
- 0: 3903ms
A
alsotang#18·11 年前
引用 DoubleSpout我习惯 a 0

@DoubleSpout 好歧义啊。

B
booxood#19·11 年前

为什么我觉得这样 +'1' 是最常用的。。。

参与回复
登录后即可参与回复。登录