Tôi đã tự hỏi liệu sử dụng nguyên mẫu trong JavaScript nên được nhiều bộ nhớ hiệu quả hơn gắn mọi thành viên của một đối tượng trực tiếp đến nó vì những lý do sau đây:Thừa kế nguyên mẫu nên tiết kiệm bộ nhớ, phải không?
- Nguyên mẫu chỉ là một đối tượng duy nhất.
- Các trường hợp tổ chức chỉ tham chiếu đến các nguyên mẫu của họ.
Versus:
- Mỗi dụ giữ một bản sao của tất cả các thành viên và phương pháp được xác định bởi các nhà xây dựng.
tôi bắt đầu một chút thí nghiệm với điều này:
var TestObjectFat = function()
{
this.number = 42;
this.text = randomString(1000);
}
var TestObjectThin = function()
{
this.number = 42;
}
TestObjectThin.prototype.text = randomString(1000);
randomString(x)
chỉ sản xuất một, tốt, String ngẫu nhiên có độ dài x.
sau đó tôi khởi tạo các đối tượng với số lượng lớn như thế này:
var arr = new Array();
for (var i = 0; i < 1000; i++) {
arr.push(new TestObjectFat()); // or new TestObjectThin()
}
và kiểm tra việc sử dụng bộ nhớ của quá trình duyệt (Google Chrome). Tôi biết, đó không phải là rất chính xác ...
Tuy nhiên, trong cả hai trường hợp sử dụng bộ nhớ tăng lên đáng kể như mong đợi (khoảng 30 MB cho TestObjectFat
), nhưng các biến thể nguyên mẫu sử dụng ít không nhiều bộ nhớ (khoảng 26 MB cho TestObjectThin
).
Tôi cũng đã kiểm tra rằng các phiên bản TestObjectThin
có chứa cùng một chuỗi trong thuộc tính "văn bản" của chúng, do đó chúng thực sự đang sử dụng thuộc tính của mẫu thử nghiệm.
Bây giờ, tôi không phải như vậy chắc chắn phải nghĩ gì về việc này. Prototyping dường như không phải là bộ nhớ tiết kiệm lớn cả.
Tôi biết rằng mẫu là một ý tưởng tuyệt vời vì nhiều lý do khác, nhưng tôi đặc biệt quan tâm đến việc sử dụng bộ nhớ ở đây. Bất kỳ giải thích tại sao biến thể nguyên mẫu sử dụng gần như cùng một lượng bộ nhớ? Tui bỏ lỡ điều gì vậy?
Tôi có thể dùng thử với các chuỗi dài hơn trong thuộc tính đối tượng. Có lẽ điều đó sẽ cho thấy một sự khác biệt ... – selfawaresoup