我一直在使用一些代码从字符串中提取无符号的16位值。
我发现将此函数添加到String
的原型中:
String.prototype.UInt16 = function(n) {
return this.charCodeAt(n) + 256 * this.charCodeAt(n + 1);
};
比仅使用String
作为参数的函数慢得多:
var UInt16 = function(s, n) {
return s.charCodeAt(n) + 256 * s.charCodeAt(n + 1);
};
在Firefox中,差异仅为两倍,但在Chrome 15中,它的百分之一倍!
查看http://jsperf.com/string-to-uint16
的搜索结果任何人都可以为此提供解释,和/或提供使用原型的替代方法,而不会影响性能吗?
答案 0 :(得分:1)
从基元访问原型(因为它不是对象)比从对象访问原型要慢得多。
http://jsperf.com/string-to-uint16/2
对我来说,Chrome的速度提高了10倍,而firefox的速度提高了2倍。
使用原型是否存在实际瓶颈?如果你每秒不需要数百万的操作,它仍然非常快。如果需要,只需使用一个函数。
答案 1 :(得分:0)
Alnitak ,我做了一个快速的jsperf test(我不小心发布了),它表明用户类型的原型并不慢。在考虑像V8这样的引擎是如何工作的时候,在将代码添加到内置对象时,Java编译的行为会有很大不同。