Tôi đã sử dụng một số mã để trích xuất các giá trị 16 bit chưa ký từ một chuỗi.Javascript - hiệu suất kém trong V8 của các hàm được thêm vào String.prototype?
tôi phát hiện ra rằng việc thêm chức năng này để nguyên mẫu cho String
:
String.prototype.UInt16 = function(n) {
return this.charCodeAt(n) + 256 * this.charCodeAt(n + 1);
};
là chậm hơn nhiều so với chỉ có một chức năng mà phải mất một String
như một tham số:
var UInt16 = function(s, n) {
return s.charCodeAt(n) + 256 * s.charCodeAt(n + 1);
};
Trong Firefox là sự khác biệt chỉ là một yếu tố của hai, nhưng trong Chrome 15 nó là một trăm lần chậm hơn!
Xem kết quả tại http://jsperf.com/string-to-uint16
bất cứ ai có thể hiến dâng cho một lời giải thích cho điều này, và/hoặc cung cấp một cách thay thế của việc sử dụng nguyên mẫu mà không có hit hiệu suất?
http://groups.google.com/group/nodejs/browse_thread/thread/45d6dc32250c0ad3 có thể làm sáng tỏ. Đó là một chút thành công. –
@CrescentFresh, xem câu trả lời của tôi, nó vẫn còn chậm hơn rất nhiều và không phải "trong vòng 1%" như tuyên bố trong chủ đề khi sử dụng các đối tượng ... Hoặc có lẽ tôi làm điều đó sai? – Esailija
@Esailija: Tôi không thấy mối quan hệ của câu trả lời của bạn cho câu hỏi. Các bổ sung của bạn vào các trường hợp thử nghiệm chỉ hiển thị (như nhóm thảo luận của google) lưu một tham chiếu đến đối tượng 'String' cho kết quả nhanh hơn khi gọi các phương thức prototyped trên đối tượng đó so với gọi phương thức tương tự trên nguyên thủy. Vấn đề cơ bản mà OP đang cố gắng giải quyết phải làm với sự ép buộc kiểu ngầm khi đấm một nguyên thủy đến một đối tượng nhiều lần. –