Tiêu thụ bộ nhớ Redux [đóng]


23

Khung Redux ủng hộ mô hình hàm trạng thái / hàm thuần túy bất biến, thúc đẩy việc tạo trạng thái mới từ trạng thái trước đó về mặt hành động hiện tại. Khả năng ứng dụng của mô hình này là không thể chấp nhận được.

Một mối quan tâm lớn của tôi là, vì các bộ giảm Redux háo hức trả lại các trạng thái mới từ các trạng thái trước đó cho mỗi hành động được gọi, việc rút bộ nhớ lớn (không bị nhầm lẫn với rò rỉ bộ nhớ) sẽ trở thành phổ biến trong nhiều ứng dụng trong thế giới thực . Khi xem xét rằng các ứng dụng Javascript thường chạy trong trình duyệt trong các thiết bị trung bình của người dùng cũng có thể đang chạy một số ứng dụng cụ thể khác của thiết bị và một số tab và cửa sổ trình duyệt khác, sự cần thiết phải bảo tồn bộ nhớ trở nên rõ ràng hơn bao giờ hết.

Có ai thực sự so sánh mức tiêu thụ bộ nhớ của ứng dụng Redux với kiến ​​trúc Flux truyền thống chưa? Nếu vậy, họ có thể chia sẻ những phát hiện của họ?


4
Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì nó đang yêu cầu thông tin cấu hình bộ nhớ tùy ý.

Đã bạn cấu hình nó?

Tại sao tôi nên hồ sơ nó? Để xác nhận điều hiển nhiên? Có phải ý nghĩa thông thường là sinh ra một đối tượng tương tự hết lần này đến lần khác phát sinh một chi phí nghiêm trọng về mặt sử dụng bộ nhớ? Câu trả lời của @ Dan cung cấp một cách để giảm thiểu chi phí đó và đó là câu trả lời tốt nhất cho đến nay.
000

Câu trả lời:


30

Đây là một mối quan tâm hợp lệ. Mặc dù tôi chưa đo mức sử dụng bộ nhớ của các ứng dụng Redux, tôi nghĩ rằng trước khi cam kết sử dụng Redux (hoặc bất kỳ khung nào khác cho vấn đề đó), bạn nên tạo các bài kiểm tra căng thẳng mô phỏng lượng dữ liệu, thay đổi tần số và cường độ tính toán của ứng dụng bạn sẽ xây dựng. Sử dụng các bài kiểm tra căng thẳng này trước khi đưa ra quyết định công nghệ về việc áp dụng bất biến có hoạt động trong trường hợp cụ thể của bạn hay không.

Lưu ý rằng đôi khi mọi người nhầm lẫn về Redux và cho rằng trên mỗi hành động, cây trạng thái phải được nhân bản sâu. Điều này là hoàn toàn không phải vậy. Chỉ những phần đã thay đổi cần thay đổi tài liệu tham khảo của họ. Ví dụ: nếu một hành động gây ra thay đổi cho một mục trong một mảng, thì thực tế, mục đó và mảng đó sẽ cần được sao chép, tuy nhiên , tất cả các phần tử khác trong mảng sẽ giữ nguyên danh tính của chúng. Bởi vì hầu hết các hành động được nhắm mục tiêu rất nhiều và ảnh hưởng đến một vài khóa trạng thái và vì Redux khuyến khích việc chuẩn hóa dữ liệu để cấu trúc dữ liệu không được lồng sâu, nên đây không phải là vấn đề đối với các ứng dụng web thông thường mà người ta có thể tưởng tượng.

Bạn cũng sẽ muốn khám phá bằng cách sử dụng các thư viện như Immutable.js thực hiện các danh sách và bản đồ bất biến một cách hiệu quả bằng cách sử dụng chia sẻ cấu trúc bên trong. Theo cách này, việc thay đổi một vài mục trong danh sách không liên quan đến việc sao chép quá nhiều vì bên trong phần lớn bộ nhớ đang được chia sẻ giữa các phiên bản khác nhau của cấu trúc dữ liệu.

Nhưng cuối cùng, cách duy nhất để nói là viết các bài kiểm tra căng thẳng mô phỏng chặt chẽ mục đích sử dụng của ứng dụng của bạn và đo lường hiệu quả cho chính bạn.


10
Đừng quá nhanh chóng để chuyển sang Immutable.js. Nó trở thành một con heo nhớ nghiêm trọng trong trường hợp của chúng tôi. Immutable.js đưa các đối tượng đơn giản (có lẽ) gọn gàng của bạn và biến chúng thành những con quái vật đói bộ nhớ. Hãy xem ví dụ này: jsfiddle.net/sn70x2p6 Sau khi tải, tab mất bộ nhớ 61.000KB. Sau khi tạo ra một triệu vật thể đơn giản, nó là 211.000KB. Khùng. Bây giờ bấm vào "làm cho bất biến" và xem những gì sẽ xảy ra. Nó nhảy đến mức sử dụng bộ nhớ hơn 1GB. Bạn có kinh nghiệm có thể khác nhau, nhưng không nhiều.
Olav Kokovkin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.