2011-04-30 24 views
8

Khi viết một ứng dụng để làm việc ngoại tuyến và trực tuyến là tốt nhất để viết nó một lần để làm việc ngoại tuyến và chế độ trực tuyến sẽ hoạt động giống như ngoại tuyến?Viết một ứng dụng để làm việc ngoại tuyến (ứng dụng web)

Ví dụ: cho phép xem chúng tôi có ví dụ điển hình về giỏ hàng. Giỏ hàng chứa các mặt hàng và khách hàng.

Khi giỏ hàng được tải, tôi có nên lưu tất cả các mục + khách hàng vào bộ nhớ cục bộ và sử dụng bộ đệm dữ liệu đó cho cả trực tuyến và ngoại tuyến và cập nhật bộ nhớ cache nếu cần? Một số phương pháp hay nhất khi phát triển một ứng dụng web lai ngoại tuyến/trực tuyến là gì?

Trả lời

7

Viết ứng dụng web để hoạt động ở chế độ trực tuyến/ngoại tuyến thực sự giống như viết bất kỳ ứng dụng web "máy chủ" do máy chủ điều khiển, ngoại trừ bạn có lớp truy cập dữ liệu (DAL) nằm giữa ứng dụng và dữ liệu sống trên máy chủ (chế độ trực tuyến) hoặc dữ liệu của trình duyệt (chế độ ngoại tuyến).

Tùy thuộc vào ứng dụng và nhu cầu của ứng dụng, bạn có thể chạy ở một trong 2 chế độ: a.) Chế độ bộ nhớ cache và thử tốt nhất hoặc b.) Tải mọi thứ và kiểm tra- chế độ cập nhật.

Mỗi một trong hai chế độ này có một số phần tốt và một số phần xấu, và bạn chắc chắn có thể có các phần khác nhau của ứng dụng của bạn nghiêng một cách này hay cách khác.

Cache-và-thử--tốt nhất của bạn chế độ

Đối với chế độ này, các cache Dal dữ liệu từ máy chủ vào lưu trữ dữ liệu của trình duyệt vì nó truy cập dữ liệu trong đó là quá trình bình thường của hoạt động. Khi ở chế độ ngoại tuyến, DAL cố gắng tốt nhất để đáp ứng yêu cầu của người dùng, nhưng nó chỉ có dữ liệu được lưu vào bộ nhớ để hoạt động và do đó một số thao tác có thể không hoàn thành (hoặc ít nhất là không phải ngay lập tức). Về mặt up-up, có thời gian khởi động tối thiểu chờ đợi cho dữ liệu để tải, nhưng ở phía bên xuống, mọi hành động yêu cầu một máy chủ hit (nếu được kết nối) và dữ liệu đó phải được lưu trữ. Ứng dụng cũng phải thất bại một cách duyên dáng đối với mọi thao tác mà nó không thể hoàn thành do dữ liệu không đầy đủ.

Load-mọi-và-kiểm tra-cho-cập nhật chế độ

Trong trường hợp này, tải Dal tất cả các dữ liệu ứng dụng cần vào trình duyệt khi ứng dụng khởi động. Nếu ứng dụng đã được tải, thì tất cả dữ liệu phải được cập nhật để đảm bảo bộ nhớ cache không cũ. Ở phía trên, người dùng không phải đợi quá lâu để làm mọi thứ, vì mọi thứ đều là một hoạt động cục bộ, nhưng ở phía dưới, nếu có nhiều dữ liệu, thời gian khởi động có thể là khá dài.

Trong cả hai trường hợp, bạn phải chiến đấu với các sự cố bộ nhớ cache cũ và các sự cố vẫn tồn tại các hoạt động ngoại tuyến đối với máy chủ. Điều này có nghĩa là khi khởi động và có thể cũng định kỳ trong khi ứng dụng đang chạy, bạn sẽ cần phải đồng bộ hóa lại với máy chủ để giữ cho dữ liệu được lưu trong bộ nhớ cache mới và chia sẻ mọi trạng thái chỉ cục bộ mà bạn có thể có với máy chủ rằng phần còn lại của thế giới nhìn thấy các bản cập nhật từ ví dụ đó của ứng dụng.

Hoạt động liên tục quay lại máy chủ xảy ra khi ứng dụng ở chế độ ngoại tuyến có thể đặc biệt phức tạp khi dữ liệu liên quan đến hoạt động thay đổi giữa các bản cập nhật của ứng dụng. Ví dụ: nếu số dư ngân hàng được lưu trong bộ nhớ cache đã lỗi thời và cho biết nhiều tiền hơn trạng thái "thực" được phản ánh bởi máy chủ, người dùng có thể rút tiền quá nhiều mà không biết. Đây là một ví dụ cực đoan, nhưng loại phát hiện va chạm hoạt động này cần phải được đặt ra để xử lý các bản cập nhật có thể chạy vào nhau.

Nói chung, nếu bạn có ứng dụng có thể vừa trực tuyến vừa ngoại tuyến, hãy viết ứng dụng để bản thân ứng dụng không cần quan tâm. Lớp dữ liệu cấp thấp hơn tóm tắt tất cả các vấn đề và ứng dụng của bạn chỉ cần biết cách xử lý không thể nhận được thông tin mà nó muốn (bất kỳ ứng dụng hay, ngoại tuyến nào, cũng nên làm).

Đối với giỏ hàng, bạn có thể (hoặc hy vọng?) Có nhiều sản phẩm hơn bất kỳ khách hàng cá nhân nào có khả năng đưa vào giỏ hàng của họ. Tải tất cả chúng vào trình duyệt của mọi người gần như chắc chắn là một sự lãng phí rất lớn của băng thông và sẽ gây ra sự chậm trễ cho người dùng của bạn rằng chi phí băng thông lớn và doanh số bị mất (do thời gian phản hồi chậm) sẽ nhanh chóng đánh mất mọi doanh nghiệp. Tải các sản phẩm vào dữ liệu trình duyệt khi cần thiết và nếu bạn muốn, bạn có thể tải các sản phẩm khác mà "người dùng khác cũng đã mua" được liên kết với các mặt hàng thực sự trong giỏ hàng.

Các vấn đề liên quan