Tôi đã chơi với một số tối ưu hóa hiệu suất javascript và tìm thấy một cái gì đó thú vị. Đây là mã:Hiệu suất: sử dụng mảng trong không gian tên đối tượng so với mảng cục bộ
function gObject() {
this.obj = [];
this.LIMIT = 100000;
this.doLoopLocal = function() {
var o = [];
for (var i=0;i<this.LIMIT;i+=1) {
o.push(i);
}
return o;
};
this.doLoopObject = function() {
this.obj = [];
for (var i=0;i<this.LIMIT;i+=1) {
this.obj.push(i);
}
};
};
var g = new gObject();
console.time('Using Local array');
g.doLoopLocal();
console.timeEnd('Using Local array');
console.time('Using Object array');
g.doLoopObject();
console.timeEnd('Using Object array');
Khi tôi chạy nó, nhật ký nói với tôi rằng việc sử dụng các mảng địa phương là chậm hơn so với sử dụng mảng được định nghĩa trong namespace đối tượng. Sự khác biệt là đáng kể - 8 đến 10 lần! (FF 18.0.1)
Using Local array: 16ms
Using Object array: 2ms
Một ảnh chụp màn hình:
Tôi đã luôn luôn giả định rằng việc sử dụng đối tượng quy định tại địa phương trong phạm vi chức năng là nhanh hơn, nhưng thí nghiệm này cho thấy tôi sai. Tại sao điều này sẽ xảy ra?
CẬP NHẬT: Tôi đã thử tập lệnh trong bảng điều khiển Firefox cục bộ và các con số là thứ tôi mong đợi ở địa điểm đầu tiên: sử dụng mảng địa phương hoạt động tốt hơn bằng mảng đối tượng. Vì vậy, nguyên nhân thực sự là Firebug cho một số lý do nghiêng các con số và hiển thị kết quả không chính xác. Một cái gì đó để giữ trong tâm trí.
Tôi đã dán mã này vào bảng điều khiển của mình trong chrome và mảng cục bộ mất 2 mili giây và mảng Đối tượng mất 3 mili giây .. thú vị. Điều gì sẽ xảy ra nếu bạn hoán đổi thứ tự, chạy thứ hai địa phương? –
Tôi cũng đã chạy điều này trong Chrome và nhận: "Sử dụng mảng cục bộ: 1.675ms Sử dụng mảng Đối tượng: 3.585ms" lần đầu tiên. Sau khi lặp lại mã rất giống nhau ba lần tôi nhận được "Sử dụng mảng cục bộ: 2.316ms Sử dụng mảng Đối tượng: 1.673ms". Thậm chí thú vị hơn ... –
mảng cục bộ mất 1ms và mảng đối tượng mất 6ms trong Chrome cho tôi. –