Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-在V8中添加到String.prototype的函数性能不佳?_Javascript_Performance_Google Chrome_V8 - Fatal编程技术网

Javascript-在V8中添加到String.prototype的函数性能不佳?

Javascript-在V8中添加到String.prototype的函数性能不佳?,javascript,performance,google-chrome,v8,Javascript,Performance,Google Chrome,V8,我一直在使用一些代码从字符串中提取无符号的16位值 我发现将此函数添加到String的原型中: String.prototype.UInt16 = function(n) { return this.charCodeAt(n) + 256 * this.charCodeAt(n + 1); }; 比只使用一个以字符串作为参数的函数要慢得多: var UInt16 = function(s, n) { return s.charCodeAt(n) + 256 * s.charCo

我一直在使用一些代码从字符串中提取无符号的16位值

我发现将此函数添加到
String
的原型中:

String.prototype.UInt16 = function(n) {
    return this.charCodeAt(n) + 256 * this.charCodeAt(n + 1);
};
比只使用一个以
字符串作为参数的函数要慢得多:

var UInt16 = function(s, n) {
    return s.charCodeAt(n) + 256 * s.charCodeAt(n + 1);
};
在Firefox中,两者的差别只有两倍,但在Chrome15中,它的速度要慢一百倍

请参见第页的结果


有谁能对此做出解释,和/或提供一种在不影响性能的情况下使用原型的替代方法吗

从原语访问原型(因为它不是对象)比从对象访问原型慢得多

对我来说,chrome浏览器快10倍,firefox快2倍


使用原型是否存在实际瓶颈?如果你不需要每秒数百万次的运算,速度仍然非常快。如果需要的话,只需使用一个函数。

Alnitak,我制作了一个快速的jsperf(我无意中发布了它),它表明用户类型的原型并不慢。在考虑像V8这样的引擎的工作原理时,有一点是有道理的,即在向内置对象添加代码时,Java编译的行为会有很大的不同。

可能会有所帮助。这有点令人沮丧。@CrescentFresh,看看我的答案,它仍然慢得多,而且在使用对象时,它并不像线程中所说的“在1%之内”。。。或者也许我做错了?@Esailija:我看不出你对这个问题的回答有什么关系。您添加到测试用例中的内容简单地表明(正如google小组讨论所述),在对
String
对象调用原型方法时,保存对该对象的引用会比在原语上调用相同的方法产生更快的结果。OP试图解决的基本问题与重复将原语装箱到对象时的隐式类型强制有关。@CrescentFresh,只是说,即使OP执行了线程建议的操作(即在执行工作之前转换为对象),它仍然会像线程中声明的那样缓慢。也就是说:转换为object并不能真正修复它,如我的链接所示。这就是它的关系。@Esailija:我明白了。你在回答中所做的观察更多的是对线程的响应,而不是对OP的响应。线程有点令人沮丧,因为它没有回答“使用原型而不影响性能的替代方法?”。