Câu hỏi đơn giản: có một công đức nào khi sử dụng một vật thể nông cạn hơn một vật sâu hơn không? Khi tôi viết mã, tôi có xu hướng sử dụng một đối tượng sâu để dễ hiểu và phân loại. Nhưng tôi tự hỏi nếu tùy chỉnh này làm cho mã của tôi chậm hơn.Đối tượng sâu có chậm trong JavaScript không? Nếu có bao nhiêu
Tôi đã thực hiện kiểm tra nhưng tôi không biết liệu tôi có đang thực hiện chính xác hay không.
//building necessary objects
var a = {};
var b;
b = a;
for (var i = 0; i < 100; i++) {
b["a"] = {};
b = b["a"];
}
var c = {};
//objects used
//a.a.a. ..(101 "a"s).. .a === {}
//c === {}
//1st test: shallow
var d;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
d = c;
d = null;
}
var end = performance.now();
console.log('Shallow: ' + (end - start));
//2nd test: deeper
var e;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
e = a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a;
e = null;
}
var end = performance.now();
console.log('Deeper: ' + (end - start));
kết quả (mili giây):
shallow 3229 3304 3246 3253 3277
deep 3375 3343 3247 3193 3248
Bài kiểm tra lần cho đối tượng sâu không phải là chậm, nhưng đôi khi thậm chí nhanh hơn so với một nông. Mặc dù kết quả, tôi không đủ tự tin để kết luận rằng chúng có cùng tốc độ. Có sự khác biệt nào giữa hai trong số chúng không?
Chắc chắn bạn đang đùa? 1 tỷ hoạt động chỉ trong hơn 3 giây và bạn đang quibbling khoảng có lẽ ± 100 ops? Ngay cả đối với một trường hợp xấu nhất contrived? Đây là tối ưu hóa sớm writ lớn! Sự chênh lệch trong việc triển khai và hệ thống sẽ lớn hơn bất kỳ thay đổi nhỏ nào về hiệu suất giữa hai hệ thống. – RobG
Các loại kiểm tra tốc độ như vậy không bao giờ thực sự hữu ích. Bạn kiểm tra một số đoạn mã nhân tạo sẽ không bao giờ được sử dụng theo cách như vậy trong mã thực, có khả năng là trình tối ưu hóa công cụ js sẽ hoạt động hoàn toàn khác trên ví dụ này, sau đó trên mã thực. –
Truy cập lồng nhau sẽ chậm hơn nói chung, nhưng sự khác biệt là quá nhỏ để quan trọng thực sự như một truy cập tài sản là một hoạt động 'O (1)' nhanh. Lưu ý các yếu tố và quy trình khác trên máy tính của bạn có thể đóng góp vào những khác biệt nhỏ về thời gian đó. –