Tôi có một ứng dụng sử dụng API đồng bộ hóa để lấy dữ liệu và yêu cầu lưu trữ tất cả dữ liệu cục bộ. Tập dữ liệu chính nó là rất lớn, và tôi miễn cưỡng lưu trữ nó trong bộ nhớ, vì nó có thể chứa hàng ngàn bản ghi. Vì tôi không nghĩ rằng cấu trúc dữ liệu thực sự có liên quan, hãy giả sử tôi đang xây dựng một ứng dụng email cần truy cập ngoại tuyến và tôi muốn cơ chế lưu trữ của mình là IndexedDB (không đồng bộ).Cách tích hợp Redux với tập dữ liệu rất lớn và IndexedDB
Tôi biết rằng giải pháp đơn giản là không có cấu trúc dữ liệu như một phần của đối tượng tiểu bang của tôi và chỉ điền vào trạng thái với dữ liệu bắt buộc (ví dụ: - lưu trữ nội dung email về trạng thái khi hành động EMAIL_OPEN được kích hoạt). Điều này khá đơn giản, đặc biệt với redux-thunk.
Tuy nhiên, điều này sẽ có nghĩa là tôi cần phải thỏa hiệp 2 điều:
- Các dữ liệu người dùng là một phần không còn của "trạng thái ứng dụng", mặc dù trong thực tế nó được. Vì hành vi đồng bộ là phức tạp và việc xóa nó khỏi máy trạng thái ứng dụng sẽ làm tổn thương sự sang trọng của các khái niệm redux (cách tôi hiểu chúng)
- Tôi thực sự thích cấu trúc redux và muốn tất cả logic của tôi đi qua nó , không chỉ trạng thái xem.
Có cách nào hay nhất về cách sử dụng Redux với thuộc tính trạng thái không có trong bộ nhớ không? Điều tôi thấy khó khăn nhất là dùng redux dựa trên các API đồng bộ, và vì vậy tôi không thể thay thế đối tượng trạng thái của mình bằng đối tượng trạng thái không đồng bộ (trừ khi tôi loại bỏ hoàn toàn redux và thay thế nó bằng trình cài đặt và kết nối không đồng bộ của riêng tôi).
Tôi không thể tìm thấy câu trả lời bằng Google, nhưng nếu đã có tài nguyên tốt về chủ đề tôi cũng muốn được chỉ ra.
UPDATE: Câu hỏi đã được trả lời nhưng muốn để cho một explantation tốt hơn vào cách tôi thực hiện nó, trong trường hợp ai đó chạy vào nó:
Ý tưởng chính là để duy trì danh sách thay đổi của cả client và server sử dụng đơn giản Redux bộ giảm tốc và sử dụng trình kết nối để nghe các danh sách thay đổi này để cập nhật IDB và cũng để cập nhật máy chủ với các thay đổi của khách hàng:
- Khi khách hàng thực hiện thay đổi, hãy sử dụng bộ giảm tốc để cập nhật danh sách thay đổi của khách hàng.
- Khi máy chủ gửi cập nhật, hãy sử dụng bộ giảm tốc để cập nhật danh sách thay đổi máy chủ.
- Trình kết nối nghe lưu trữ và cập nhật thay đổi trạng thái IDB. Cũng duy trì danh sách nội bộ của các mục đã được sửa đổi.
- Khi cập nhật máy chủ, hãy sử dụng danh sách các mục đã sửa đổi để kéo delta từ IDB và gửi tới máy chủ.
- Khi truy cập vào các dữ liệu, sử dụng hoạt động bình thường để kéo từ IDB (ví dụ sử dụng Redux-thunk)
Thông báo trước với phương pháp này là kể từ khi nhà nước thực được lưu trữ trong IDB, vì vậy chúng tôi mất một số giá trị của việc có một đối tượng trạng thái (và cũng khó khăn hơn để tua lại/tua nhanh)
Tôi không có câu trả lời rõ ràng cho bạn vì ít được biết đến và ghi lưu trữ các tập dữ liệu lớn trong trạng thái redux. Tôi sẽ chỉ khuyên bạn chỉ cần TRY và xem nếu redux & phản ứng có thể xử lý tải trong bộ nhớ. Bạn có thể viết một kịch bản thử nghiệm khá đơn giản và xem nó có hoạt động hay không. Bạn cũng có thể muốn sử dụng thư viện như 'ImmutableJS' để tối ưu hóa việc lưu trữ và thay đổi bộ nhớ dữ liệu một cách hiệu quả. Hy vọng điều này sẽ giúp ích theo một cách nào đó. Hãy cho tôi biết nó như thế nào. Tôi thực sự tò mò về hiệu suất. – JensDebergh
Vì tôi muốn hỗ trợ thiết bị di động, vân tay bộ nhớ của tôi không thể quá lớn. Trên nhiều thiết bị, việc cấp phát bộ nhớ cho JS khá nhỏ, để lưu trữ một lượng lớn dữ liệu chỉ là một ý tưởng thực sự tồi tệ. – AriehGlazer