Disclaimer: Tôi là tác giả của trang wiki
Đó là một vấn đề nếu chức năng chứa được gọi rất nhiều (là nóng). Các hàm bị rò rỉ arguments
không được trình biên dịch tối ưu hóa (trục khuỷu) hỗ trợ.
Thông thường khi chức năng nóng, nó sẽ được tối ưu hóa. Tuy nhiên, nếu chức năng chứa các tính năng không được hỗ trợ như rò rỉ arguments
, là một chức năng nóng không giúp đỡ và nó sẽ tiếp tục chạy mã chung chung chậm.
Hiệu suất của hàm được tối ưu hóa so với hàm chưa được tối ưu hóa là rất lớn. Ví dụ, xem xét một hàm có thêm 3 đôi với nhau: http://jsperf.com/213213213 21x khác biệt.
Điều gì xảy ra nếu nó được thêm 6 đôi với nhau? 29x difference Nói chung mã càng có nhiều chức năng, thì hình phạt càng nghiêm trọng đối với chức năng đó để chạy ở chế độ không được tối ưu hóa.
Đối với nội dung node.js như thế này nói chung thực sự là một vấn đề lớn do thực tế là bất kỳ thời gian CPU nào hoàn toàn chặn máy chủ. Chỉ cần by optimizing the url parser được bao gồm trong lõi nút (mô-đun của tôi nhanh hơn 30 lần trong tiêu chuẩn của nút), cải thiện yêu cầu mỗi giây của mysql-express từ 70K rps lên 100K rps trong điểm chuẩn queries a database.
Tin tốt là node core is aware of this
Điểm mà họ đang cố gắng thực hiện là các đối số rất quan trọng để tối ưu hóa V8. Với cách bạn có thể thay đổi [đối số trong hàm] (http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language) theo các cách tương tự pass-by-reference, điều này có nghĩa là V8 phải kiểm tra lại các chữ ký đã tồn tại một lần nữa.Vì V8 này sẽ không bao giờ có thể đoán được các kiểu dữ liệu để tối ưu hóa các cuộc gọi chức năng. – user568109
@ user568109 một số sử dụng 'đối số' được hỗ trợ bởi trình biên dịch tối ưu hóa - những đối tượng không yêu cầu đối tượng' đối số 'đã được vật chất hóa, chẳng hạn như đối số [i] hoặc arguments.length (trong đó i là chỉ số hợp lệ) – Esailija
Có, đã đề cập sử dụng an toàn ở cuối phần 3 của [tài liệu] (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#3-managing-arguments). – user568109