我一直在使用一些代碼從字符串中提取無符號的16位值。JavaScript - 在添加到String.prototype的函數的V8中性能很差?
我發現加入此功能的原型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
結果任何人都可以毫無顧忌的說明這一點,和/或提供使用原型而不影響性能的另一種方式?
http://groups.google.com/group/nodejs/browse_thread/thread/45d6dc32250c0ad3可能會說明一些問題。這有點令人沮喪。 –
@CrescentFresh,看到我的回答,它仍然慢很多,並不像線程在使用對象時聲稱的那樣「在1%以內」。或者我可能會做錯了嗎? – Esailija
@Esailija:我沒有看到你的回答與問題的關係。對測試用例的補充只是簡單地展示(正如谷歌小組討論所涵蓋的那樣),當調用該對象上的原型方法而不是調用原語中的相同方法時,保存對「String」對象的引用會產生更快的結果。 OP試圖解決的基本問題與將對象重複裝入對象時的隱式類型強制相關。 –