Tôi đang viết hàm so sánh chuỗi thời gian không đổi (đối với node.js) và muốn tắt trình biên dịch tối ưu hóa của V8 cho hàm đơn lẻ này; việc sử dụng cờ dòng lệnh nằm ngoài câu hỏi.Cách tắt trình biên dịch tối ưu hóa của V8
Tôi biết rằng việc sử dụng khối with{}
(hoặc try/catch) sẽ tắt trình biên dịch tối ưu hóa bây giờ, nhưng tôi e ngại tính năng này sẽ được sửa trong các phiên bản sau.
Có cách nào không thay đổi (và được ghi lại) vô hiệu hoá trình biên dịch tối ưu hóa của V8 không?
chức năng Ví dụ:
function constantTimeStringCompare(a, b) {
// By adding a `with` block here, we disable v8's optimizing compiler.
// Using Object.create(null) ensures we don't have any object prototype properties getting in our way.our way.
with (Object.create(null)){
var valid = true,
length = Math.max(a.length, b.length);
while (length--) {
valid &= a.charCodeAt(length) === b.charCodeAt(length);
}
// returns true if valid == 1, false if valid == 0
return !!valid;
}
}
Và một perf test chỉ để cho vui.
So sánh hằng giờ với vòng lặp 'while' trong đó ... ಠ_ಠ (có thể đó không phải là cách tiếp cận thực?) – Pointy
... cũng như thế nào" hợp lệ "bao giờ là bất kỳ thứ gì khác ngoài boolean? Có lẽ tôi đang chú ý quá nhiều đến mã :) – Pointy
Phần 'hằng số 'có liên quan đến độ dài của chuỗi đầu vào. Có lẽ tôi chỉ nên trả về false nếu độ dài không khớp. Tôi không thấy vấn đề với vòng lặp 'while'. –