2011-04-30 182 views
8

當編寫一個應用程序離線工作和在線是最好的一次寫入離線工作和在線模式將工作一樣下線?編寫應用程序離線工作(Web應用程序)

例如讓我們看看我們有一個典型的購物車示例。購物車包含項目和客戶。

當購物車被加載,我應該緩存中的所有項目+客戶在本地存儲,並根據需要使用這些數據緩存在線和離線和更新緩存?開發離線/在線混合Web應用程序時有哪些最佳做法?

回答

7

編寫web應用程序中的聯機/脫機模式下工作,真的非常像寫任何「正常」的服務器驅動的Web應用程序,與你有一個數據訪問層(DAL),不同的是你之間坐應用程序以及位於服務器(在線模式)或瀏覽器數據(離線模式)中的數據。根據應用程序及其需求,您可以運行以下兩種模式之一:a。)一種緩存並嘗試最佳模式或b。一種負載一切和檢查替換的方式,更新模式。

每個這兩種模式都有一些好的也有壞的部分,你絕對可以有一個瘦個子方式或其他應用程序的不同部分。

高速緩存和嘗試,您的最佳模式

對於這種模式,從服務器到瀏覽器的數據存儲,因爲它訪問數據時是正常的操作過程中,DAL緩存數據。一旦進入離線模式,DAL會嘗試最好地滿足用戶的請求,但它只有緩存的數據才能工作,因此某些操作可能無法完成(或至少不是馬上)。另一方面,等待數據加載的啓動時間極少,但在不利條件下,每個動作都需要服務器命中(如果連接)並且該數據必須被緩存。由於數據不完整,該應用程序還必須優雅地對任何無法完成的操作失敗。

負載一切和檢查換更新模式

在這種情況下,DAL加載所有應用程序需要在瀏覽器中,當應用程序啓動時的數據。如果應用程序已經被加載,那麼所有的數據都必須更新以確保緩存沒有失效。另一方面,用戶不必等待很長時間才能完成任務,因爲所有操作都是本地操作,但是如果存在大量數據,則啓動時間可能是相當長。

在你戰鬥陳舊的緩存問題,並堅持離線操作的服務器問題,無論是哪種情況。這意味着,在啓動時,也可能定期在應用程序運行時,您需要同步回服務器以保持緩存數據的新鮮度,並共享您可能與服務器之間的任何本地狀態世界其他地方可以看到該應用程序實例的更新。

當應用程序更新之間涉及該操作的數據發生變化時,將應用程序處於脫機模式時發生的操作返回給服務器可能會特別棘手。例如,如果高速緩存的銀行餘額過期並且表示比服務器反映的「真實」狀態多得多的錢,則用戶可能在不知道它的情況下透支該帳戶。這是一個極端的例子,但是這種操作性碰撞檢測需要適當地處理可能碰撞的更新。

一般來說,如果您的應用程序既可以在線也可以離線,請編寫應用程序,以便應用程序本身無需關心。較低級別的數據層將所有問題都抽象出來,而您的應用程序只需要知道如何處理無法獲取所需信息(哪些應用程序在線或離線應該這樣做)。

對於購物車,您可能(或者希望?)擁有比任何單個顧客可能放入購物車更多的產品。將它們全部加載到每個人的瀏覽器中幾乎肯定會帶來巨大的浪費,並且會給您的用戶帶來這樣的延遲,以至於大量的帶寬成本和銷售損失(由於響應時間緩慢)會迅速淹沒任何業務。根據需要將產品加載到瀏覽器數據中,如果需要,您可以加載其他用戶也購買的與購物車中實際商品相關聯的其他產品。