Firefox 9.0.1 làm tôi ngạc nhiên khi hiển thị thuật toán đệm số Ω (log n) của tôi với phương thức vòng lặp Ω (n) khi n nhỏ. In every other browser I've seen, the loop is slower, ngay cả đối với các giá trị nhỏ của n. Tôi biết tất cả các trình duyệt đang làm việc để tối ưu hóa JS, nhưng vì tất cả các trình duyệt hiện đại khác đang hiển thị vòng lặp chậm hơn, có giải thích nào về hành vi trong Firefox 9 không?Firefox đã tối ưu hóa vòng lặp này như thế nào?
// Ω(log n)
function padNumberMath(number, length) {
var N = Math.pow(10, length);
return number < N ? ("" + (N + number)).slice(1) : "" + number
}
// Ω(n):
function padNumberLoop(number, length) {
var my_string = '' + number;
while (my_string.length < length) {
my_string = '0' + my_string;
}
return my_string;
}
Cập nhật: Tôi không nghĩ rằng đây có liên quan đến câu hỏi ban đầu, nhưng tôi chỉ phát hiện ra rằng IE 9 công tắc hành vi khi chuyển đổi từ 32 đến chế độ 64-bit. Ở chế độ 32 bit, phương thức Math sẽ thắng. Trong chế độ 64 bit, phương thức Loop sẽ thắng. Chỉ nghĩ rằng tôi nên chỉ ra điều đó.
Cập nhật 2: MAK bắt gặp tôi trong nhận xét của mình bên dưới. Phương thức toán học không phải là Ω (1), nó có thể giống như Ω (log n).
Phương thức nào là phương pháp Ω (1)? Tôi không biết thuật toán lũy thừa nào nhanh hơn O (log n). – MAK
Chìa khóa ở đây là nó chỉ xảy ra đối với các giá trị nhỏ của n. Tôi cho rằng có một số loại bỏ vòng lặp xảy ra khi n nhỏ, dẫn đến kết quả O (1). Nếu họ tiếp tục tối ưu hóa chuỗi nối trong một vòng lặp, điều này thậm chí có thể nhanh hơn. Chỉ nhìn vào mã sẽ cung cấp câu trả lời thực sự, mặc dù. – jknupp
Bạn có thể giả định, nhưng bạn có thể cung cấp bất kỳ bằng chứng nào cho * show * rằng có việc bỏ vòng lặp đang diễn ra không? –