Hiệu suất liên quan đến Mảng và Đối tượng trong JavaScript (đặc biệt là Google V8) sẽ rất thú vị để ghi lại. Tôi không tìm thấy bài viết toàn diện về chủ đề này ở bất kỳ đâu trên Internet.
Tôi hiểu rằng một số Đối tượng sử dụng các lớp làm cấu trúc dữ liệu cơ bản của chúng. Nếu có rất nhiều thuộc tính, đôi khi nó được coi như một bảng băm?
Tôi cũng hiểu rằng Mảng đôi khi được xử lý giống Mảng C ++ (tức là lập chỉ mục ngẫu nhiên nhanh, xóa chậm và thay đổi kích thước). Và, những lần khác, chúng được coi như Đối tượng hơn (lập chỉ mục nhanh, chèn / xóa nhanh, nhiều bộ nhớ hơn). Và, có thể đôi khi chúng được lưu trữ dưới dạng danh sách được liên kết (tức là lập chỉ mục ngẫu nhiên chậm, loại bỏ / chèn nhanh ở đầu / cuối)
Hiệu suất chính xác của các thao tác và truy xuất Mảng / Đối tượng trong JavaScript là gì? (đặc biệt cho Google V8)
Cụ thể hơn, tác động đến hiệu suất của nó là gì:
- Thêm thuộc tính vào đối tượng
- Xóa một thuộc tính khỏi một đối tượng
- Lập chỉ mục một thuộc tính trong một đối tượng
- Thêm một mục vào một mảng
- Xóa một mục khỏi Mảng
- Lập chỉ mục một mục trong Mảng
- Gọi Array.pop ()
- Gọi Array.push ()
- Gọi Array.shift ()
- Gọi Array.unshift ()
- Gọi Array.slice ()
Bất kỳ bài báo hoặc liên kết để biết thêm chi tiết cũng sẽ được đánh giá cao. :)
CHỈNH SỬA: Tôi thực sự tự hỏi làm thế nào các mảng và đối tượng JavaScript hoạt động dưới mui xe. Ngoài ra, động cơ V8 "biết" để "chuyển đổi" sang cấu trúc dữ liệu khác trong ngữ cảnh nào?
Ví dụ: giả sử tôi tạo một mảng với ...
var arr = [];
arr[10000000] = 20;
arr.push(21);
Điều gì thực sự đang xảy ra ở đây?
Hay ... cái này thì sao ... ???
var arr = [];
//Add lots of items
for(var i = 0; i < 1000000; i++)
arr[i] = Math.random();
//Now I use it like a queue...
for(var i = 0; i < arr.length; i++)
{
var item = arr[i].shift();
//Do something with item...
}
Đối với các mảng thông thường, hiệu suất sẽ rất khủng khiếp; trong khi đó, nếu một LinkedList được sử dụng ... không quá tệ.