Khi so sánh this benchmark với chrome 16 vs opera 11.6, chúng tôi thấy rằngTại sao Function.prototype.bind chậm?
- trong ràng buộc bản chrome là chậm hơn gần 5 lần sau đó một phiên bản mô phỏng của bind
- trong opera ràng buộc bản địa là gần 4 lần nhanh hơn sau đó một mô phỏng phiên bản của bind
đâu một phiên bản mô phỏng của ràng buộc trong trường hợp này là
var emulatebind = function (f, context) {
return function() {
f.apply(context, arguments);
};
};
Có lý do chính đáng tại sao có sự khác biệt như vậy hay đây chỉ là vấn đề v8 không tối ưu hóa đủ?
Lưu ý: emulatebind
chỉ thực hiện một tập hợp con nhưng điều đó không thực sự có liên quan. Nếu bạn có một mô phỏng đầy đủ tính năng và được tối ưu hóa, hãy liên kết performance difference in the benchmark vẫn tồn tại.
@RobW đã mô tả phiên bản mô phỏng ràng buộc mà tôi đang so sánh. – Raynos
Tôi cho rằng, điều này là do tối ưu hóa mã khác nhau. Có lẽ, trình bao bọc với liên kết gốc không cho phép một số tối ưu hóa nhất định. FF10 thể hiện hành vi tương tự. – kirilloid
Q. của bạn phải là _ "Tại sao giả lập của tôi .bind() nhanh hơn người bản xứ trong Chrome, FireFox và chậm hơn trong Opera và IE?" _. Và tại sao bạn nghĩ rằng phải khác? Tối ưu hóa mã khác nhau. Ràng buộc mô phỏng của bạn không cho phép thêm tham số, nhưng chỉ có ngữ cảnh, ví dụ. –