2016-01-04 17 views
23

Có một bài báo Optimization killers trong wiki của thư viện Bluebird. Trong bài này có một cụm từ:Hợp đồng cho phép/phân bổ nghĩa là gì?

Hiện nay không optimizable:
...
Chức năng có chứa một hợp chất để phân
Chức năng có chứa một hợp chất phân const

gì phép gán phức hợp và gán const hợp lý nghĩa là gì? Trong ECMAScript 5.1 có khái niệm là compound assignment nhưng trong ECMAScript 2015, có vẻ như không có khái niệm về bất kỳ sự phân công hợp chất nào chỉ có các bài tập thường xuyên.

Tôi nghi ngờ rằng hợp chất cho phép và phân bổ const, nó chỉ là phân công hợp chất sau khi khai báo. Ví dụ:

let n = 1; 
n += 4; 

Tôi có đúng không?

+0

Từ định nghĩa của hợp chất: "một thứ bao gồm hai hoặc nhiều phần tử riêng biệt, một hỗn hợp". Từ đó, tôi sẽ nghĩ rằng 'let n = 1 + someval' là một phép gán phức và' let n = 1' thì không? Không thể nói với sự tự tin tuyệt đối mặc dù ... – AdamJeffers

Trả lời

15

Có, điều đó có vẻ đúng như ý nghĩa của nó. Tôi đã có đoạn mã sau (thêm dòng không liên quan bị loại bỏ):

function updatePlayer(player) { 
    let direction = player.getDirection(); 
    if (player.isPressingLeft()) { 
     direction += angleChange; 
    } 
    if (player.isPressingRight()) { 
     direction -= angleChange; 
    } 
    player.setDirection(direction); 
} 

updatePlayer tạo ra một cảnh báo, Không tối ưu hóa: không được hỗ trợ let hợp chất phân, trong Chrome Profiles tab, vì vậy tôi cố gắng = ... + thay vì += và nhận cải thiện hiệu suất đáng kể, nhất quán.

jsPerf shows that let compound assignments are indeed extremely slow in Chrome 49.0.2623, so với + ... = hoặc var! Tôi đoán điều này sẽ được sửa trong một phiên bản tương lai, vì cả Firefox lẫn IE11 lẫn Edge đều không bị ảnh hưởng, và vì Google dường như đã biết về vấn đề này.

+11

Điều này có vẻ đúng, nhưng sau đó là một "hợp chất' const' giao ", vì' const' khai báo không thể được giao lại? –

+0

Muộn cho bữa tiệc, nhưng cũng có thể có nghĩa là 'let x = 1, y = x; 'thay vì' let x = 1; để y = x; '. Chỉ cần đoán thôi. – Josh

+4

Tại sao heck thực hiện điều này * vẫn * giết tối ưu hóa? Tôi thấy điều này trong '--trace_opt --trace_deopt' mọi lúc. Các câu lệnh gán phức tạp như "+ =" là cách quá đơn giản và quá thuận tiện. – TylerY86

Các vấn đề liên quan