Tôi tự hỏi tại sao cùng một mã JavaScript chậm hơn đáng kể trong một add-on FireFox (sử dụng Add-on SDK) hơn là chạy trực tiếp trong một trang web được tải trong FireFox.Tại sao JavaScript chậm hơn trong chương trình bổ trợ FireFox so với một trang web được tải trong FireFox?
Ví dụ, mã này:
function isPrime(number) {
var i,
prime = true;
for(i = 2 ; i < number ; ++i) {
if(number % i === 0) {
prime = false;
}
}
return prime;
}
function sumFirstPrimeNumbers(x) {
var i,
sum = 0;
for(i = 1 ; i <= x ; ++i) {
if(isPrime(i)) {
sum += i;
}
}
return sum;
}
var sum = sumFirstPrimeNumbers(15000);
console.log(sum);
mất ít hơn 2 giây để chạy trong một trang web mở trong FireFox, nhưng mất khoảng 15 giây để chạy trong một FireFox add-on.
Tôi biết mã có thể tốt hơn, nhưng nó chỉ là một ví dụ để cho biết tốc độ của nó.
Tại sao ứng dụng này chậm trong tiện ích bổ sung FireFox?
Có cách nào để làm cho nó nhanh hơn (không thay đổi mã này kể từ khi nó được, như tôi đã nói ở trên, chỉ có một ví dụ)?
Cập nhật:
Có vẻ như có liên quan đến các Add-on SDK. Tôi đã làm một thử nghiệm khác: Tôi đã thực hiện cùng một mã trong một phần bổ sung không sử dụng SDK bổ sung và mã thực thi trong khoảng 3 giây.
Tại sao sự khác biệt lớn như vậy (3 giây so với 15 giây) giữa một tiện ích bổ sung bằng cách sử dụng SDK bổ trợ và tiện ích bổ sung không sử dụng nó?
Khi được mã được chạy? Vì trình duyệt bị tải nặng vì nó đã khởi động? –
Tôi có thể nói một điều ngu ngốc, và chắc chắn ai đó sẽ bác bỏ tôi, nhưng có thể trang web "lưu trữ" kết quả của 'isPrime' trong khi phần bổ trợ không? –
Mã này đã được tải khi trình duyệt khởi động. Nhưng tôi đã cố gắng chạy mã này trên một nút bấm và nó là chậm. Và tôi không biết nếu có bất kỳ bộ nhớ cache nào. – antoyo