專利名稱:用于持久性Web應用設計的架構模式的制作方法
技術領域:
所公開的實施例總體上涉及客戶端-服務器計算機網絡系統領域,具體地涉及用于開發具有離線能力的web應用的系統和方法。
背景技術:
Web應用(例如,主要通過web瀏覽器訪問并且從遠程服務器接收數據的應用) 變得日益流行。Web應用用于各種各樣的用途,包括電子郵件、日歷、銀行業務、字處理和圖像編輯應用。然而,web應用的廣泛使用產生了許多問題。例如,在通過網絡發送請求和接收響應之間通常存在延遲,也被稱為網絡延時。該網絡延時降低了 web應用的響應性,因為 web應用在對執行用戶所指示的操作的請求作出響應之前,必須等待來自遠程服務器的數據。該額外的等待時間對用戶來說可能感到沮喪。另外,當網絡連接不可用時,web應用不能從遠程服務器接收數據,因此限制了 web應用的功能。類似地,由于缺乏網絡連接而不能使用應用對用戶來說可能感到沮喪。
發明內容
因此,在此所公開的方法和系統通過提供用于存儲數據項的本地數據結構以供 web應用使用來降低或消除了上述問題。使用所公開的方法和系統,降低了網絡延時和網絡連接缺乏對用戶體驗的負面影響。在一些實施例中,存儲在本地數據庫中的數據項由web 應用以離線模式使用。在這些實施例中,web應用使用本地存儲的數據項來提供通常由web 應用在存在網絡連接時提供的功能中的至少部分(例如,顯示電子郵件消息)。在一些實施例中,存儲在本地數據庫中的這些數據項由web應用以在線模式使用來提高web應用對執行對數據項的操作(例如,顯示操作)的用戶請求的響應性。例如,對于緩存在本地數據庫中的電子郵件消息,當用戶選擇緩存的消息中的一個來顯示時,可以立即顯示緩存的電子郵件消息,而不用等待來自遠程服務器的對請求的響應。根據本發明的第一方面,客戶端設備具有計算機處理器和計算機存儲器;被配置成在客戶端設備上執行的web瀏覽器;被配置成在web瀏覽器內運作的本地web應用;被配置成管理在本地web應用和與web應用相關聯的服務器系統之間的通信的web接口 ;在存儲器中維護的寫隊列;以及在存儲器中維護的包含多個數據項的持久性本地數據庫,每一個數據項與使每一個相應的數據項能夠在客戶端設備和服務器系統上被唯一識別的標識符相關聯。當客戶端設備上的web應用需要執行對數據項的操作時,web應用發出數據庫請求以確定該數據項是否在本地數據庫中。如果該數據項不在本地數據庫中,則web應用經由web接口向服務器系統發出數據請求。如果該數據項在本地數據庫中,并且操作涉及更新該數據項,則web應用執行對存儲在該數據庫中的該數據項的操作,并且將表征該操作的信息以及該數據項的標識符寫入寫隊列。當在客戶端設備和服務器系統之間存在網絡連接時,web接口將寫隊列排出(to drain)到服務器系統,其可以使用該信息來更新其數據庫中的已被客戶端操作修改的條目。這是直寫式(write-through)緩存的示例。本發明的實施例還實現LRU (最近最少使用)緩存替換策略,其中通過刪除最近最少使用的條目來為在本地數據庫中的新的條目釋放空間。在一些實施例中,該軟件緩存被類比到硬件緩存。通過將硬件緩存策略類比到軟件緩存策略,使用軟件緩存的web應用的性能可以使用與用于提高硬件緩存的性能的那些技術類似的技術來提高。這些緩存技術通常是眾所周知的并且被全面測試。例如,緩存存取的速度可以通過在處理器(CPU)和更大但是更慢的L2緩存之間插入高速Ll緩存來提高。 類似地,對于web應用訪問數據項的速度可以通過在web應用和持久性數據庫之間插入存儲器內(in-memory)數據庫來提高。其他實施例可以將web瀏覽器的文檔對象模型用作Ll 緩存。如在硬件中得到的各種緩存所建議的,將文檔對象模型用作Ll緩存的軟件可以是回寫式或直寫式的。如果web應用通過直接修改文檔對象模型來實現一些用戶動作,則文檔對象模型片段的回寫式緩存作為Ll緩存將是適當的。與硬件緩存的該類比所建議的實施例中的其他特征是對數據項的預取和負載轉發。
圖1是圖示依據一些實施例的客戶端-服務器分布式系統的基礎結構的框圖。圖2是圖示依據一些實施例的示例性客戶端系統的結構的框圖。圖3是圖示依據一些實施例的示例性服務器系統的結構的框圖。圖4是圖示依據一些實施例的在客戶端-服務器分布式系統的組件之間的相互關系的框圖。圖5A-5C是圖示依據一些實施例的在客戶端-服務器分布式系統中的多線程軟件應用的啟動過程的框圖。圖6A是圖示依據一些實施例的服務器系統中的與web應用相關聯的數據結構的框圖。圖6B是圖示依據一些實施例的客戶端系統中的與持久性web應用相關聯的數據結構的框圖。圖7A-7B描繪了圖示依據一些實施例的用于在客戶端系統上的持久性web應用和服務器系統之間傳送數據的過程中的客戶端和服務器角色的流程圖。圖8A-8D描繪了圖示依據一些實施例的用于使用校驗和交換來在數據庫之間同步數據的過程中的客戶端和服務器角色的流程圖。整個附圖中,相同參考數字是指相應的部分。
具體實施例方式圖1是圖示根據一些實施例的客戶端-服務器分布式系統的基礎結構的框圖。分布式系統包括多個客戶端設備102和多個服務器系統106。這些組件通過一個或多個通信網絡104(例如,因特網、其他廣域網、局域網等)鏈接在一起,使得各個組件可以相互通信。 在一些實施例中,服務器系統106中的每一個是單個服務器。在其他實施例中,服務器系統 106包括多個服務器,諸如web接口(前端服務器)108、一個或多個服務器應用110(其可以在一個或多個服務器上實現)和一個或多個中央數據庫120,所述一個或多個中央數據庫120通過局域網(LAN)相互連接并且通過共同接口(例如,一個或多個服務器系統,也被稱為前端服務器)與客戶端設備102交換信息。在具有多個服務器系統106的實施例中, 服務器系統106可以通過局域網(LAN)或其他通信網絡相互連接。客戶端設備102包括諸如web瀏覽器112的客戶端應用。用戶可以使用web瀏覽器112來從服務器系統106訪問一個或多個web應用114。Web瀏覽器112和在web瀏覽器112內的web應用114能夠訪問存儲在客戶端102上的本地數據庫116中的數據項。在一些實施例中,訪問web應用114包括從服務器系統106下載程序,并且將數據存儲在本地數據庫116中以供web應用114使用。客戶端設備102 (有時被稱為“客戶端設備”或“客戶端計算機”)可以是能夠從服務器系統106接收數據以及向服務器系統106發送請求(例如,web應用數據請求、搜索查詢、信息請求、登錄請求等)的任何計算機或相似設備。客戶端設備的示例包括但不限于臺式計算機、筆記本計算機、平板計算機、諸如移動電話和個人數字助理的移動設備以及機頂盒。在本申請中,詞語“web應用”實際上是指向用戶提供對從服務器系統106接收到的內容的訪問的交互式應用。來自客戶端設備102的請求使用通過通信接口 118使用http請求的HTTP協議或其他類似的網絡通信協議來轉送給相應的服務器系統106。服務器系統106包括至少web接口(前端服務器)108、服務器應用110和中央數據庫120。Web接口 108解析來自客戶端設備102的請求、取得服務器應用110所提供的對應的web應用,以及向發出請求的客戶端設備102返回web應用。取決于其在客戶端-服務器系統的拓撲結構中的相應位置,web接口在獨立(“前端服務器”)108上實現,以及服務器應用在獨立(“后端服務器”)110上實現。在本申請中,詞語“web接口”和“前端服務器”可替換使用。在一些其他實施例中,前端服務器108和后端服務器110被合并成一個軟件應用或一個服務器系統106。在一些實施例中,服務器系統106部署在多個計算機(在圖1中由N個應用服務器和N個中央數據庫表示)上,以提供不同類型的服務,諸如電子郵件服務、搜索引擎服務、地圖服務、社交網絡服務等。在一些其他實施例中,一種單獨類型的服務還可以分布在多個服務器之中。例如,考慮在其中服務器應用110-1是基于web的電子郵件服務(例如,Gmail 電子郵件應用)的系統。諸如以下的數據項可以被存儲在服務器應用110可訪問的一個或多個中央數據庫120中電子郵件消息、會話(例如,電子郵件消息列表)、線程列表(例如, 會話列表)和帳戶信息(例如,用戶簡檔、用戶偏好以及帳戶歷史)。服務器應用110可以被連接到一個或多個中央數據庫120。在一些實施例中,單個服務器應用110可以訪問單個中央數據庫120(諸如在存儲在該中央數據庫中的信息僅被該單個服務器應用需要的情況下),而在其他實施例中,多個服務器應用110能夠訪問單個中央數據庫120(諸如在較小量的信息被多個服務器應用110使用并且該信息被頻繁更新的情況下),在其他實施例中,多個服務器應用110可以被連接到多個中央數據庫120(諸如在較大量的數據被存儲并且被較大數量的服務器應用110需要的情況下)。現將注意力引向圖2,其是圖示依據本發明的一個實施例的計算機系統(例如,客戶端設備10 的框圖。客戶端設備102典型地包括一個或多個處理單元(CPU) 202、一個或多個網絡或其他通信接口 204、存儲器212以及用于使這些組件互連的一個或多個通信總線214。客戶端設備102可選地可以包括用戶接口 205,其包括顯示設備206和鍵盤/鼠標208 (或者,在一些實施例中,觸敏表面209)。存儲器212包括高速隨機存取存儲器,諸如DRAM,SRAM,DDR RAM或其他隨機存取固態存儲器設備;以及可以包括非易失性存儲器,諸如一個或多個磁盤存儲設備、光盤存儲設備、閃存設備或其他非易失性固態存儲設備。存儲器 212可以可選地包括位于遠離CPU 202的地方的一個或多個存儲設備。存儲器212或替選地存儲器212內的非易失性存儲器設備包括計算機可讀存儲介質。在一些實施例中,存儲器212或存儲器212的計算機可讀存儲介質存儲以下程序、模塊和數據結構或其子集 操作系統216,其包括用于處理各種基本系統服務和用于執行依賴硬件的任務的程序; 通信模塊218,其用于經由一個或多個通信接口 204(有線或無線)以及一個或多個通信網絡將客戶端設備102連接到其他計算機,所述通信網絡諸如因特網、其他廣域網、 局域網、城域網等;*Web瀏覽器112,其用于接收對web應用114的用戶請求、使用用戶接口模塊228 來在顯示設備206或其他用戶接口設備上呈現所請求的web應用114、以及將數據項存儲在本地數據庫116中;在一些實施例中,web應用114、本地數據庫116和用戶接口模塊在web 瀏覽器內執行。ο—個或多個web應用114可以包括web應用管理器219,其用于協調在web應用114內的操作;寫隊列220,其用于使來自web應用管理器219的操作排成隊列;動作調度器222,其用于寫入本地數據庫116;以及(可選地)校驗和計算器224,其用于計算針對數據項的校驗和;ο本地數據庫116存儲在web應用114從各個服務器系統106接收的數據項(例如,226-1、226-2);ο用戶接口模塊2 包括視圖模塊230,其用于呈現用戶界面;以及控制器模塊 232,其用于檢測用戶交互事件,并且將用戶交互事件傳遞給其他模塊;以及 響應處理器模塊234,其用于通過將數據項存儲在本地數據庫116中并且將信息通信給web應用114來對來自服務器系統的通信作出響應。盡管圖2示出了 “客戶端設備102”,參考圖2描述的客戶端設備與其意在作為在此描述的實施例的結構示意相比,更意在作為可以在客戶端設備102中存在的各種特征的功能描述。實際上,以及如本領域技術人員所認識到的,分離示出的項能夠被組合,以及一些項能夠被分離。例如,在一些實施例中,客戶端應用(例如,web瀏覽器112)可以與操作系統216集成在一起。在一些實施例中,客戶端應用(例如,web瀏覽器112)的各種功能可以由兩個或多個獨立應用執行。在一些實施例中,示出為web瀏覽器112的一部分的本地數據庫116可以是客戶端設備上的多個客戶端應用可訪問的本地數據庫。在上面識別的要素中的每一個可以被存儲在前面提到的存儲器設備中的一個或多個中,以及與用于執行上述功能的指令集相對應。在上面識別的模塊或程序(即,指令集)不必被實現為獨立的軟件程序、程序或模塊,因此在各種實施例中,這些模塊的各種子集可以被組合或另外重新安排。在一些實施例中,存儲器212可以存儲在上面識別的模塊和數據結構的子集。此外,存儲器212可以存儲在上面沒有描述的另外的模塊和數據結構。現將注意力引向圖3,其是圖示依據本發明的一個實施例的服務器系統106的框圖。服務器系統106典型地包括一個或多個處理單元(CPU) 302、一個或多個網絡或其他通信接口 304、存儲器312以及用于使這些組件互連的一個或多個通信總線314。存儲器312
8包括高速隨機存取存儲器,諸如DRAM、SRAM、DDR RAM或其他隨機存取固態存儲器設備;以及可以包括非易失性存儲器,諸如一個或多個磁盤存儲設備、光盤存儲設備、閃存設備或其他非易失性固態存儲設備。存儲器312可以可選地包括位于遠離CPU 302的地方的一個或多個存儲設備。存儲器312或替選地存儲器312內的非易失性存儲器設備包括計算機可讀存儲介質。在一些實施例中,存儲器312或存儲器312的計算機可讀存儲介質存儲以下程序、模塊和數據結構或其子集 操作系統316,其包括用于處理各種基本系統服務和用于執行依賴硬件的任務的程序; 通信模塊318,其用于經由一個或多個通信接口 304(有線或無線)以及一個或多個通信網絡將服務器系統106連接到其他計算機,所述通信網絡諸如因特網、其他廣域網、 局域網、城域網等;·響應處理器模塊320,其在服務器系統106和客戶端設備102之間傳遞通信,該響應處理器模塊可以結合或替代獨立的前端服務器(圖1中的10 使用;·服務器應用110,其準備對從客戶端設備102接收到的請求的響應,在一些實施例中,服務器應用110將web應用114發送給客戶端設備102 ; 中央數據庫120,其用于存儲與服務器應用110和/或web應用114相關聯的數據項(例如,2洸-1、2洸-2);·校驗和計算器(可選)3 ,其用于計算針對數據項的校驗和;以及·校驗和比較器(可選)330,其用于將從web應用接收到的校驗和與服務器系統 106所計算的校驗和進行比較。盡管圖3示出了單個服務器系統106,參考圖3描述的服務器與其意在作為在此描述的實施例的結構示意相比,更意在作為可以在服務器系統中存在的各種特征的功能描述。實際上,以及如本領域技術人員所認識到的,分離示出的項能夠被組合,以及一些項能夠被分離。例如,在圖3中分離示出的一些項能夠在單個服務器上實現,以及單個項能夠由一個或多個服務器實現。用來實現服務器系統106(圖1)的服務器的實際數量和類型以及在它們之間如何分配特征將隨實施方式的不同而不同,以及可以部分取決于系統在峰值使用時段期間以及在平均使用時段期間必須處理的數據業務量。在上面識別的要素中的每一個可以被存儲在前面提到的存儲器設備中的一個或多個中,以及與用于執行上述功能的指令集相對應。上面識別的模塊或程序(即,指令集) 不必被實現為獨立的軟件程序、程序或模塊,因此在各種實施例中,這些模塊的各種子集可以被組合或另外重新安排。在一些實施例中,存儲器312可以存儲在上面識別的模塊和數據結構的子集。此外,存儲器312可以存儲在上面沒有描述的另外的模塊和數據結構。現將注意力引向圖4,其圖示了依據一些實施例的在客戶端-服務器分布式系統的組件之間的相互關系。如圖4中所示,用戶接口模塊2 包括視圖模塊230,其用于呈現用戶界面(例如,在圖2中的顯示206上);以及控制器模塊232,其用于檢測用戶交互事件(例如,來自圖2中的鍵盤/鼠標208或觸敏表面209的鼠標點擊或鍵盤輸入),并且將用戶交互事件傳遞給web應用管理器219。在一些實施例中,控制器模塊232被實現為一組事件處理器402 (例如,點擊/觸摸事件處理器),其處理點擊、觸摸和其他用戶輸入。在一些實施例中,最初,所有事件處理器顯示活動性,并且向web應用管理器219(例如,在一些實施例中,JavMcript存儲器內模型)發送請求,所述web應用管理器219將模型事件發送回視圖模塊230。在視圖模塊230中,模型事件處理器406將事件傳遞出給用戶界面呈現器408 (例如,HTML呈現器)和文檔對象模型410或用于操縱文檔的其他應用編程器接口。 用戶界面呈現器408將已呈現的用戶界面元素發送給文檔對象模型410,其構建新的模型、 (例如,向用戶)顯示該模型并且將該新的模型傳遞出給控制器模塊232以等待事件處理器 402檢測到的另外事件。在一些實施例中,當web應用管理器219被配置成從事件處理器402檢測指示待對本地數據庫116中的數據項中的一個或多個執行的操作的事件,web應用管理器219將該操作發送給寫隊列220。在一些實施例中,將操作412-1、412-2、412-3、412-4、412-5、412-6 按照其到達寫隊列220的順序存儲在寫隊列220中(即,在這些實施例中,寫隊列是來自 web應用管理器219的請求的按時間順序的記錄)。Web應用管理器將回調列表維持在用戶接口模塊228中,一個回調用于寫隊列中的一個操作(例如“操作1”412-1)、指示回調是否已被調用的標志、以及用于以滿足操作(例如,“操作1”412-1)的失敗嘗試的計數器。 在一些實施例中,動作調度器222被配置成將操作(例如,“操作Γ’412-1)從寫隊列220發送給本地數據庫116,以及發送給通信模塊218。在一些實施例中,動作調度器222被配置成將操作發送給校驗和計算器。校驗和計算器計算存儲在本地數據庫116中的一個或多個數據項的校驗和。在一些實施例中,校驗和與數據項一起被存儲在本地數據庫116中。如果存在用于存儲在本地數據庫116中的數據項的先前校驗和,則所計算的校驗和替換已存儲的校驗和。在一些實施例中,校驗和使用整個數據項來計算。校驗和可以以本領域已知的任何標準機制(例如,MD5校驗和算法 (IETF RFC 1321)或SHA-1 (FIPS PUB180-1)算法)來計算。在下面參考圖8A-8D更詳細論述的,在一些實施例中,使用用于數據項的校驗和來確定該數據項是否已被更新。在一些實施例中,通信模塊218被配置成將從動作調度器222接收到的操作(例如,“操作1”412-1)傳輸給服務器系統中的響應處理器模塊320。在一些實施例中,響應處理器模塊320被配置成將操作傳遞出給服務器應用110。在一些實施例中,服務器應用110 被配置成響應于接收執行操作的請求,(例如,使用包括在請求中的與數據項相關聯的唯一標識符)從中央數據庫120檢索一個或多個數據項。在一些實施例中,服務器應用110被配置成將操作的結果(例如,數據項和/或數據項的校驗和)返回給響應處理器320,其被配置成將結果傳輸給客戶端設備102。在一些實施例中,當本地數據庫116與中央數據庫 120不同步(即,不一致)時,響應包括使本地數據庫116恢復成與中央數據庫116 —致所需的替換數據項或數據項的組分。在一些實施例中,當本地數據庫116與中央數據庫120 同步(即,一致)時,響應指示本地數據庫116中的數據項是最新的(例如,響應不包括任何數據項或數據項的組分)。在一些實施例中,客戶端設備102上的通信模塊218將來自服務器應用110的結果傳遞出到客戶端設備上的響應處理器模塊234。在一些實施例中,操作的結果被存儲在本地數據庫116中和/或被返回給web應用管理器219。在一些實施例中,操作是顯示操作, 以及數據項被顯示給用戶。例如,考慮用戶正在移動設備上查看電子郵件應用,并且選擇電子郵件的標題以查看電子郵件的情景。在該示例中,在移動設備上查看電子郵件消息的請求由web應用管
10理器219發送給寫隊列220。如果動作調度器222在本地數據庫116中找到該電子郵件,則該電子郵件被發送給web應用管理器219以向用戶顯示。如果動作調度器222在本地數據庫116中沒有找到該電子郵件,則對消息的請求被發送給帶有電子郵件數據庫120的服務器系統106,以及該電子郵件從中央數據庫120被返回到客戶端設備102。在該實施例中, 將電子郵件消息返回給響應處理器234,其將該電子郵件存儲在本地數據庫116中,并且將該電子郵件傳遞出給web應用管理器219以向用戶顯示。現將注意力引向圖5A-5C,其圖示了依據一些實施例的在客戶端-服務器分布式系統中的多線程軟件應用的啟動過程。為了降低在客戶端102處的啟動成本,如在圖5A-5C中分別示出的,多線程軟件應用將過程分成多個階段。在初始化階段510,該軟件應用首先在主線程502上起動主應用。 在一些實施例中,該軟件應用是在諸如移動電話的便攜式設備上的基于web的電子郵件服務。主線程上的主應用負責處理與服務的用戶接口的用戶交互。在一些實施例中,主應用是單線程的。在一些其他實施例中,主應用是多線程的。如圖5A中所示,在初始化之后,在主線程502和本地數據庫118之間存在同步連接506。本地數據庫118緩存與電子郵件服務相關聯的預定義量的數據。在下面結合圖6B 提供了對本地數據庫的更詳細的描述。通過同步連接506,在主線程502處的主應用能夠以同步方式執行對本地數據庫118的操作,諸如從本地數據庫118檢索數據記錄以及在本地數據庫118中更新數據記錄。在主線程502和在遠程服務器系統106處的服務器應用322之間還存在異步連接 514。作為基于web的軟件應用的一部分,由在客戶端102處的主應用呈現的所有電子郵件消息最終來自服務器應用322,其在服務器端管理中央數據庫120中的電子郵件消息。在下面結合圖6A和7A-7B提供了對服務器應用322和中央數據庫120的更詳細的描述。如將在下面說明的,如果數據不存在于本地數據庫118中,則主應用使用異步連接514來從中央數據庫120檢索該數據。在一些實施例中,在主線程502處的主應用的初始化包括在客戶端102處顯示用戶界面、從本地數據庫118檢索預定義量的數據、以及用所檢索到的數據來填充用戶界面。 例如,在基于web的電子郵件服務的初始化期間,主線程502上的主應用使用同步連接506 來從本地數據庫118檢索與用戶的電子郵件帳戶的收件箱文件夾相關聯的電子郵件消息, 因為其假設電子郵件服務的普通用戶對首先查看寄送到該用戶的收件箱文件夾中的未讀消息最感興趣。在通過同步連接506從本地數據庫118檢索消息之后,主應用使用檢索到的消息來填充與電子郵件服務相關聯的用戶界面以允許客戶端102的用戶與至少在收件箱文件夾中的消息進行交互。盡管如在圖5A中所示的主應用的初始化可能沒有使整個電子郵件服務的啟動結束,能夠盡可能快速地訪問收件箱文件夾中的未讀消息可以顯著改善普通用戶的對電子郵件服務的體驗。除填充收件箱文件夾外,電子郵件服務的啟動過程可以包括其他任務,諸如從本地數據庫118取得與其他文件夾相關聯的電子郵件消息,以及使本地數據庫118與中央數據庫120同步。結果,完成整個啟動過程可能涉及在客戶端102中的不同組件之間以及在客戶端102和服務器106之間的大量數據傳輸。如果主線程502還負責處理這些任務,則其可能不能以及時方式帶出用戶界面,并且準備好接收用戶指令。
因此,在一些實施例中,為用戶提供電子郵件服務已準備就緒的印象的初始化階段510后跟第二階段520,即,初始化輔助線程504上的助理進程。通過推遲輔助線程504 的開始,避免或至少顯著降低了由使主線程502負責整個啟動過程所產生的延時。如圖5B中所示,在主線程502處的主應用結束在主線程502和本地數據庫116之間的事務,例如填充電子郵件服務的收件箱文件夾之后,主線程502產生輔助線程504。注意到,在輔助線程504處的助理進程被生成來替代在主線程502處的主應用來與本地數據庫118通信,并且完成開始基于web的電子郵件服務應用的剩余任務。在輔助線程504和本地數據庫116之間也存在同步連接512。通過該連接512,助理進程可以執行主應用能夠通過連接506執行的對本地數據庫118的相同操作。在一些實施例中,助理進程被配置成完成主應用所留下的初始化基于web的應用的剩余任務。在一些其它實施例中,主應用完成與初始化基于web的應用相關聯的所有任務。因此,助理進程主要負責取代由主線程502 所扮演的與本地數據庫118交互的角色。如圖5C中所示,在主線程502和輔助線程504之間存在異步連接508。通過建立同步連接512,主應用不再需要如其在初始化階段510期間所做的那樣,直接通過同步連接 506來執行對本地數據庫116的操作。相反,整個應用現在轉變成穩定操作的階段530。在穩定操作期間,主應用通過異步連接508與在輔助線程504處的助理進程通信。結果,在一些實施例中,終止或破壞在主線程502和本地數據庫116之間的同步連接506(如圖5C中的虛線所指示的)。在一些其他實施例中,同步連接506仍然存在,但是被失活。現將注意力引向圖6A,其圖示了依據一些實施例的在服務器系統中的與web應用相關聯的數據結構。在一些實施例中,中央數據庫120包括服務器目錄602。服務器目錄 602是將唯一標識符(例如,“唯一 ID,,604-1)與數據項(例如,“數據項1"226-1)的狀態 (例如,“狀態”606-1)和對數據項的引用(例如“引用1”608-1)相關聯的查找表。在一些實施例中,唯一標識符(例如,“唯一 ID”604_N)包括數據項類型609和數據項標識符610。在一些實施例中,數據項類型609指示唯一標識符所引用的數據項的類型。例如,當數據項是會話(例如,消息列表)時,數據項類型609包括“會話”或對應的字母數字標記,以及當數據項是線程列表(例如,會話列表)時,數據項類型609包括“線程列表”或對應的字母數字標記。替選地,當數據項是線程列表(例如,會話列表)時,數據項類型609包括線程列表的名稱。例如,當線程列表是電子郵件收件箱時,數據項類型包括字母數字標記“收件箱(inbox)”,以及當線程列表包括與標簽“工作(work) ”相關聯的多個會話時,數據項類型包括字母數字標記“工作”。在一些實施例中,數據項類型標識符可以是數據項類型標識符的組合。在一些實施例中,數據項標識符是唯一識別在特定類型(例如,在數據項類型609 是“會話”的情況下或在數據項類型609是“消息”的情況下)的數據項子集內的數據項的標識符。例如,在一些實施例中,數據項標識符是會話ID(例如,620)或消息ID。在數據項是會話(例如,消息列表)的實施例中,數據項標識符是消息列表中的第一消息的消息標識符。在一些實施例中,數據項(例如,2沈_1)的狀態(例如,606-1)指示數據項被更新 (例如,用新的數據項替換)、修改或訪問(例如,查看、復制、發送)等的最后時間。當對數據項執行操作時,狀態被更新。
在一些實施例中,對數據項的引用是對關系表611的引用,其包括從數據項到數據項的每一個組分的引用。在一些實施例中,數據項具有多個組分。例如,服務器目錄602 中的“引用1”608-1涉及關系表611中的關于“數據項1 "226-1的兩個條目“線程1”612_1 和“線程2” 612-2。(由于這兩個會話/線程每一個與引用608-1所識別的線程列表相關聯,所以出現這種情況)。在一些實施例中,數據項具有單個組分。例如,“引用2”608-2涉及關系表611中的關于“數據項2”226-2的單個條目“線程2”612_2。在一些實施例中, 多個不同的數據項包括共享組分。例如,“數據項1”2沈_1和“數據項2”2沈-2每一個與關系表611中的“線程2”612-2有關。換句話說,單個會話(例如,消息列表)可以被包括在多個線程列表中。例如,在web應用是基于web的電子郵件應用,以及電子郵件消息被安排成會話(例如,排序的電子郵件消息列表)的實施例中,會話中的一個或多個可以包括多個標簽,其中每一個標簽與線程列表相關聯(例如,包括“收件箱”標簽和“工作”標簽的會話將與“收件箱”線程列表和“工作”線程列表兩者相關聯)。在一些實施例中,組分是消息。如上所述,數據項可以包括單個組分或多個組分。 例如,“引用3” 608-3(其是對會話的引用)涉及關系表611中的關于“數據項3”226-3的三個條目“消息1” 614-1、“消息2,,614-2和“消息3 ” 614-3,而“引用N” 608-N涉及關系表中的關于“數據項N” 226-N的單個條目(例如,“消息Q” 614-Q)。在一些實施例中,當關系表中的關系是關于線程(例如,“線程1”612-1)時,該關系涉及線程表616,其包括多個線程(例如,“線程1”612-1、“線程2”612-2、“線程P”612-P)。 在線程表616中,每一個線程與會話標識符620和關于該線程的會話信息622相關聯。會話標識符620是服務器系統使用來識別與會話相關聯的消息的標識符。在一些實施例中, 會話信息622包括包含在會話中的消息的主題、概述會話和/或消息列表中的最近消息的簡短“摘錄”。在一些實施例中,當關系表中的關系是關于消息(例如,“消息1”614-1)時,關系涉及消息表618,其包括多個消息(例如,“消息1”614-1、“消息2”614-2、“消息3”614-3、 “消息Q”614-Q)。在消息表618中,每一個消息與關于該消息的消息信息擬4相關聯。在一些實施例中,消息信息擬4包括消息的文本,包括任何附件。現將注意力引向圖6B,其圖示了依據一些實施例的在客戶端設備中的與web應用相關聯的數據。在一些實施例中,本地數據庫116包括客戶端目錄652。客戶端目錄652是將唯一標識符(例如,“唯一 ID”604-1)與數據項(例如,“數據項1”226-1)的狀態(例如,“狀態” 656-1)和對數據項的引用(例如“引用1" 660-1)相關聯的查找表。在一些實施例中,在使用校驗和(例如,658-1、658-2、658-3、658-Μ)來保持緩存一致性的情況下,用于每一個數據項的校驗和(例如,2沈-1,校驗和(例如,658-1))被存儲在本地數據庫116 中,并且與該數據項相關聯。在圖6B中所圖示的實施例中,校驗和(例如,658-1)被存儲在客戶端目錄652中。然而,應當理解的是,校驗和能夠被存儲在本地數據庫116的另一個部分中。在一些實施例中,唯一標識符(例如,“唯一 ID”604_N)包括數據項類型609和數據項標識符610,如在上面參考圖6A更詳細論述的。在一些實施例中,服務器上的唯一標識符(例如,圖6A中的“唯一 ID”604-1)與客戶端上的唯一標識符(例如,圖6B中的“唯一 ID"604-1)相同,并且指示兩個唯一標識符都與同一數據項相關聯。
在一些實施例中,數據項(例如,2沈_1)的狀態(例如,656-1)指示數據項被更新 (例如,用新的數據項替換)、修改或訪問(例如,查看、復制、發送)等的最后時間。當對數據項執行操作時,狀態被更新。在一些實施例中,數據項在服務器上的狀態(例如,圖6A中的606-2)和同一數據項在客戶端上的狀態(例如,圖6B中的656-2)是相同的(例如,當本地數據庫和中央數據庫是同步的時)。在一些實施例中,數據項在服務器上的狀態(例如,圖6A中的606-3)和同一數據項在客戶端上的狀態(例如,圖6B中的656-3)是不同的 (例如,當本地數據庫和中央數據庫沒有被同步時)。在一些實施例中,對數據項的引用是對關系表666的引用,其包括在數據項和數據項的每一個組分之間的關系。在一些實施例中,數據項具有多個組分。例如,客戶端目錄652中的“引用1 ” 660-1涉及關系表666中的關于“數據項1,,226-1的兩個條目“線程1” 668-1和“線程2”668-2。(由于這兩個會話/線程每一個與引用608-1所識別的線程列表相關聯,所以出現這種情況)。在一些實施例中,數據項具有單個組分(例如,“引用 2”660-2涉及關系表666中的關于“數據項2”226-2的單個條目“線程2”668-2。)。在一些實施例中,多個不同的數據項包括共享組分。例如,數據項1和數據項2每一個包含與 “線程2”668-2的關系。換句話說,單個會話(例如,消息列表)可以被包括在多個線程列表中。例如,在web應用是移動電子郵件應用,以及電子郵件消息被安排成會話的實施例中,會話中的一個或多個可以包括多個標簽,其中每一個標簽與線程列表相關聯(例如,包括“收件箱”標簽和“工作”標簽的會話將與“收件箱”線程列表和“工作”線程列表兩者相關聯)。在一些實施例中,組分是消息。如上所述,數據項可以包括單個組分或多個組分。 例如,“引用3” 660-3(其是對會話的引用)涉及關系表666中的關于“數據項3” 226-3的兩個條目“消息1" 670-1和“消息2”670-2,而“引用M”660-M涉及關系表中的關于“數據項Μ” 226-M的單個條目(例如,“消息S” 670-S)。在一些實施例中,當引用表中的引用是關于線程(例如,“線程1”668-1)時,該引用涉及線程表672,其包括多個線程(例如,“線程1”668-1、“線程2”668-2、“線程R”668-R)。 在線程表672中,每一個線程與會話標識符676和關于該線程的會話信息678相關聯。會話標識符676是客戶端設備使用來識別與會話相關聯的消息的標識符(例如,消息列表)。 在一些實施例中,會話信息678包括包含在會話中的消息的主題、概述會話和/或消息列表中的最近消息的簡短“摘錄”。在一些實施例中,當引用表中的引用是關于消息(例如,“消息1"670-1)時,該引用涉及消息表674,其包括多個消息(例如,“消息1”670-1、“消息2”670-2、“消息S”670-S)。 在消息表674中,每一個消息與關于該消息的消息信息680相關聯。在一些實施例中,消息信息680包括消息的文本,包括任何附件。在一些實施例中,如圖6A和6B所圖示的,圖6A中的中央數據庫120和圖6B中的本地數據庫116具有相似的數據結構。然而,存儲在這些數據結構中的數據不總是相同的。 在一些實施例中,圖6A中的中央數據庫120和圖6B中的本地數據庫116使不同的數據項、 消息和線程存儲在其相應的數據結構中。在一些實施例中,在圖6B中的本地數據庫116中和圖6A中的中央數據庫120中的數據項、消息和線程已被同步(例如,使一致)并且是相同的。如在下面參考圖8A-8D更詳細描述的,依據一些實施例,公開了用于檢測何時圖6B中的本地數據庫116和圖6A中的中央數據庫120不是同步的以及用于使數據庫同步的方法。例如,在圖6A中,中央數據庫具有N個數據項、P個線程和Q個消息(其中N、P和 Q均表示大于0的整數),而在圖6B中,本地數據庫116具有M個數據項、R個線程和S個消息(其中M、R和S均表示大于0的整數)。在一些實施例中,N = M、P = R、Q = S,以及圖6A中的中央數據庫120中的數據結構存儲與圖6B中的本地數據庫116中的數據結構相同的信息。然而,在一些實施例中,圖6A中的中央數據庫120包含未包含在圖6B中的本地數據庫116中的另外數據,和/或圖6B中的本地數據庫116包含未包含在圖6A中的中央數據庫120中的另外數據(例如,中央數據庫與基于web的電子郵件服務器相關聯,其在客戶端設備未與電子郵件服務器連接時接收一個或多個新的電子郵件消息,因此中央數據庫包含未包含在本地數據庫中的一個或多個新的電子郵件信息)。另外,應當注意的是,在一些實施例中,校驗和658-1被存儲在圖6B中的本地數據庫116中,而其未被存儲在圖6A中的中央數據庫120中。更確切地,如在下面參考圖8A-8D 更詳細描述的,校驗和由服務器系統實時(例如,在“根據需要”的基礎上)計算,因此未被存儲在圖6A中的中央數據庫120中。盡管在此為了說明的目的描述了示例性數據結構,應當理解的是,可以使用替選數據結構來替代他們以存儲上述數據項和關于數據項的相關聯的信息。在一些實施例中, 使用包含多個數據庫的多個服務器來將數據項存儲在服務器系統上,以及可以使用特別適合于這樣的分布式系統的不同數據結構。在一個這樣的替選實施例中,使用諸如在美國專利公布no. 2005/0222985A1 (其特此通過引用被整體并入)中描述的那些的數據結構來存儲被描述為存儲在中央數據庫120中的數據項、會話和相關信息。例如,在基于web的電子郵件應用中,電子郵件、會話和其他相關信息可以被存儲在特別適合于在多個服務器和數據庫之間分布來提高訪問速度和容錯能力的數據結構中。現將注意力引向圖7A-7B,其圖示了依據一些實施例的在用于在客戶端上的持久性web應用和服務器系統之間傳送數據的過程中的客戶端和服務器角色。客戶端(圖2中的102)具有包括本地web應用(例如,圖2中的114)的客戶端應用(例如,圖2中的web 瀏覽器112)。在一些實施例中,本地web應用(例如,圖2中的114)具有在線和離線模式兩者。例如,當web應用是基于web的電子郵件程序時,該程序可以將部分常用電子郵件消息(例如,圖2中的數據項226-1)存儲在本地數據庫(例如,圖2中的116)中。當web應用需要訪問(702)諸如電子消息(例如,電子郵件)、會話(例如,電子消息列表)或線程列表(例如,會話列表)的數據項時,過程開始。在一個示例中,web應用從用戶接收顯示數據項、發送數據項、編輯數據項或執行對數據項的一些其他操作的請求。 客戶端檢查以查看該數據項是否在本地數據庫中。如果在本地數據庫中找到(704)該數據項,則從本地數據庫檢索(706)該數據項,以及web應用接收(708)該數據項。在一些實施例中,web應用是具有離線能力的基于web的電子郵件應用(例如, GMail)(例如,是持久性基于web的應用)。例如,當客戶端能夠訪問網絡連接時,web應用表現得就像正常的基于web的電子郵件接口,在其中用戶登錄網頁,并且檢查電子郵件消息以及執行其他操作。然而,在一些實施例中,基于web的電子郵件程序具有離線能力,因為其能夠訪問本地數據庫,所述本地數據庫被用來存儲最可能由web應用訪問的部分電子郵件消息和其他本地應用數據。然后,當客戶端不能訪問網絡連接,并且用戶試圖通過web 瀏覽器訪問基于web的電子郵件程序時,web應用仍然允許用戶訪問存儲在本地數據庫中的電子郵件,以及執行對存儲在本地數據庫中的電子郵件的操作。在一些實施例中(例如,在網絡延時很大的情況下),所期望的是,將一些數據項存儲在本地數據庫中,以降低在從用戶接收輸入和執行輸入所指示的對一個或多個數據項的操作(例如,顯示)之間的延遲。因此,本地數據庫可以擔任用于數據項的緩存,使得在從服務器系統接收回復之前,可以對本地數據庫中的數據項執行來自web應用的指令。該結構類似于與微處理器相關聯的硬件緩存,其用于通過緩存數據來供處理器使用,因此降低微處理器在對數據的請求和接收所請求的數據之間的通信延時的影響,來加快硬件系統中的處理操作。在一些實施例中,web瀏覽器的文檔對象模型被用作Ll緩存。如在硬件中得到的各種緩存所建議的,將文檔對象模型用作Ll緩存的軟件可以是回寫式或直寫式的。在一些實施例中,當web應用通過直接修改文檔對象模型來實現一些用戶動作時,文檔對象模型片段的回寫式緩存作為Ll緩存是適當的。依據一些實施例,其與硬件緩存的類比所建議的實施例中的其他特征是對數據項的預取和負載轉發(即,其中來自服務器的響應在被寫入本地數據庫116之前被直接轉發給web瀏覽器112以在顯示206上顯示)。在一些實施例中,寫隊列220被存儲在非易失性存儲器中,使得即使web應用崩潰或運行web應用的web瀏覽器崩潰,直到那一刻web應用寫入寫隊列的任何操作均被保存。在一些實施例中,所請求的數據項可能不在本地數據庫中,因為其從未被客戶端請求過,或其可能不在本地數據庫中,因為由于緩存替換策略,其已從本地數據庫被移除。 在一些實施例中,當系統檢測到本地數據庫(例如,緩存)是充滿的時,根據緩存替換策略, 本地數據庫(例如,緩存)中的數據項中的至少部分被標記以供刪除,所述緩存替換策略可以是多個選項中的一個。在一些實施例中,緩存替換策略是最近最少使用(LRU)策略,其中最近最少使用的數據項首先被從本地數據庫刪除。在一些實施例中,緩存替換策略是最不常用策略,其中最少訪問的數據項通常首先被從本地數據庫刪除。在一些實施例中,緩存替換策略由一些其他因素來確定,所述其他因素包括哪些數據項是最舊的或具有最大文件大小。在一些實施例中,緩存替換策略是隨機的,其中數據項被從緩存隨機刪除(即,不考慮與數據項相關聯的任何標準)。在一些實施例中,緩存替換策略基于確定哪些數據項最可能不被web應用所需要(例如,知道帶有某些特征的電子郵件不可能被讀取多于一次)的因素的組合。在一個實施例中,在服務器處為每一個數據項計算替換優先級,并且將其存儲在本地數據庫中, 以及本地數據庫中的數據項根據替換優先級按照降序被標記以供刪除。另外,應當理解的是,可以使用在硬件緩存中使用的任何緩存替換策略來確定本地數據庫中的哪些數據被標記以供刪除。在一些實施例中,客戶端周期性從本地數據庫移除被標記以供刪除的所有數據項。現有技術中關于這些替換策略的應用的教導與本發明的不同實施例相關。如果在本地數據庫中沒有找到(710)該數據項,以及客戶端沒有檢測到(712)網絡連接,則將錯誤返回(714)給web應用。在一些實施例中,還將錯誤返回(例如,顯示) 給web應用的用戶。如果檢測到(716)網絡連接,則使用通信接口(例如,web接口)將包括唯一標識
16符(例如,圖6B中的604-1)的請求發送給服務器系統。服務器系統接收(718)該請求, 以及在一些實施例中,通過將所接收到的唯一標識符例如與服務器目錄(例如,圖6A中的 602)中的唯一標識符(例如,圖6A中的604-1)進行匹配,使用唯一標識符(例如,圖6B中的604-1)來查找中央數據庫(例如,圖6A中的120)中的數據項。服務器系統從中央數據庫檢索(719)該數據項(以及在一些實施例中,與該數據項相關聯的另外信息),并且將該數據項(和任何相關聯的信息)發送回客戶端。在一些實施例中,請求由用戶指定,諸如在檢測到對數據項的壓縮表示的選擇之后,顯示數據項的未壓縮的表示(有時被稱為擴展的表示)的請求。在一個示例中,顯示電子郵件收件箱,該電子郵件收件箱包含用于多個電子郵件消息或電子郵件消息組(例如, 一個或多個相關的電子郵件消息可以被一起分組在一個標題下作為單個會話)的標題信息(例如,發件人和主題)。在該示例中,當用戶選擇一個電子郵件消息或會話的標題時, web應用顯示整個電子郵件消息(當標題是用于單個消息的標題時)或會話中的電子郵件消息的至少部分的列表(當標題是用于電子郵件消息的會話的標題時)。在一些實施例中,請求由web應用自動生成。在一些實施例中,自動生成的請求是對預載最可能被用戶訪問的數據項的請求。在一個示例中,顯示包含以下的收件箱用于多個電子郵件消息或電子郵件消息組(例如,一個或多個相關的電子郵件消息可以被一起分組在一個標題下作為單個會話)的標題信息(例如,發件人和主題)。在該示例中,web應用自動生成對與收件箱的當前視圖中的標題中的每一個相關聯的數據項的請求。應當理解的是,收件箱的當前視圖可以是以下的任何一個收件箱中的所有標題(例如,收件箱中的所有消息/會話被請求)、包括在收件箱的當前頁上的所有標題(例如,用戶能夠在屏幕上滾動到的所有消息/會話被請求)、以及當前在顯示上顯示的所有標題(例如,僅僅與用戶在不滾動的情況下當前可查看的標題相關聯的消息/會話被請求)。客戶端接收(708)該數據項,并且執行(720)對該數據項的操作。在一些實施例中,操作不對數據項進行更新(例如,向用戶顯示電子郵件)。在一些實施例中,操作對數據項進行更新(例如,操作是修改操作,諸如將電子郵件消息添加到電子郵件消息的會話或從電子郵件消息的會話刪除電子郵件消息)。如果操作不(722)對數據項進行更新,則web 應用過程結束(723)。如果操作對數據項進行更新(7M),則web應用將執行操作的請求放置(726)在寫隊列(例如,圖4中的220)中。在一些實施例中,寫隊列中的操作包括與操作相關聯的任何數據項的唯一標識符(例如,如果操作是將消息添加到相應會話,則操作包括該相應會話的唯一標識符)。在一些實施例中,服務器系統使用該唯一標識符來識別存儲在中央數據庫中的待對其執行操作的數據項(例如,服務器系統識別存儲在中央數據庫中的相應會話,并且將消息添加到該相應會話)。在一些實施例中,在將操作放置在寫隊列中之后,web應用檢查(7 )網絡連接狀態。如果客戶端沒有(732)連接到網絡,則客戶端設備等待超時(734)時間,并且重新檢查 (728)網絡連接狀態。在一些實施例中,基于操作是否已被添加到寫隊列,web應用周期性地檢查網絡連接狀態(例如,每5分鐘)。當web應用檢測到客戶端設備連接到網絡(736)時,將在客戶端存儲器中維護的寫隊列排出到所連接的服務器。在一些實施例中,重要的是,在非易失性存儲器中維護寫隊列,使得如果web瀏覽器崩饋,則已作出但尚未發送給服務器系統(例如,由于沒有網絡連
17接)的用戶動作被保存。在一些實施例中,寫隊列按照操作被添加到寫隊列的順序被排出 (例如,最舊的操作首先被發送給服務器系統,后跟第二舊的操作等)。在一些實施例中,重要的是,寫隊列中的動作按照添加到隊列的順序來執行,以確保當存在修改同一數據項的多個操作時,操作按照正確的順序被執行。(例如,第一操作將標簽“工作”應用于相應的消息/會話,以及第二操作用指示消息/會話已被用戶讀取的標志標記與“工作”標簽相關聯的所有消息/會話)。在一些實施例中,服務器系統從web應用接收(740)請求,并且(例如,通過執行請求中所指示的對由與請求相關聯的唯一標識符所指示的一個或多個數據項的操作)對請求作出響應(742)。在一些實施例中,將操作所修改的任何數據項存儲(744)在服務器系統上的中央數據庫中。在一些實施例中,對請求的響應包括將包括任何經修改的數據項的響應發送給客戶端上的web應用。客戶端接收(746)響應,并且將任何經修改的數據項存儲(748)在本地數據庫中。在一些實施例中,當操作從寫隊列排出,而不是(或在之前) 從服務器接收對執行操作的請求的任何響應時,客戶端在本地數據庫中進行對數據項的修改。現將注意力引向圖8A-8D,其圖示了依據一些實施例的在用于使用校驗和交換來在數據庫之間同步數據的過程中的客戶端和服務器角色。在一些實施例中,客戶端包括本地數據庫,其需要與服務器系統或不同于客戶端設備的其他不同的計算設備上的中央數據庫同步(例如,使一致)。在一個示例中,web應用是基于web的電子郵件應用,其存儲電子郵件消息、相關電子郵件消息列表(例如,會話)以及相關會話列表(例如,線程列表)。 在該示例中,基于web的電子郵件應用向用戶提供對電子郵件帳戶中的消息/會話的訪問, 并且期望的是,保持web應用(例如,用于訪問基于web的電子郵件的應用)與服務器應用 (例如,管理與電子郵件帳戶相關聯的所有電子郵件/會話的電子郵件服務器)同步。當web應用需要訪問(802)諸如電子消息(例如,電子郵件)、會話(例如,電子消息列表)或線程列表(例如,會話列表)的數據項時,過程開始。在一個示例中,web應用從用戶接收顯示數據項、發送數據項、編輯數據項或執行對數據項的一些其他操作的請求。 客戶端檢查以查看該數據項是否在本地數據庫中。如果在本地數據庫中找到(804)該數據項,則從本地數據庫檢索(806)該數據項,以及web應用接收(808)該數據項。如在下面更詳細論述的,在一些實施例中,從本地數據庫檢索到的數據項包括先前已被存儲在本地數據庫中的第一校驗和。在一些實施例中,web應用是具有離線能力的基于web的電子郵件應用(例如, GMail).例如,當客戶端能夠訪問網絡連接時,web應用表現得就像正常的基于web的電子郵件接口,在其中用戶登錄網頁,并且檢查電子郵件消息以及執行其他操作。然而,在一些實施例中,基于web的電子郵件應用具有通過向應用提供對本地數據庫的訪問來啟用的離線能力,所述本地數據庫存儲最可能由web應用訪問的部分電子郵件消息。然后,當客戶端不能訪問網絡連接,并且用戶試圖通過web瀏覽器訪問基于web的電子郵件程序時,web應用(例如,基于web的電子郵件應用)仍然允許用戶訪問存儲在本地數據庫中的電子郵件, 以及執行對存儲在本地數據庫中的電子郵件的操作。如在上面參考圖7A-7B更詳細論述的,在一些實施例中,客戶端以離線模式操作, 包括訪問存儲在本地數據庫中的數據項、檢測對數據項執行的操作、將表征操作的信息以及數據項的標識符寫入寫隊列、計算已更新的數據項的校驗和以及將已計算的校驗和存儲在本地數據庫中。在一些實施例中,當在web應用和服務器系統之間檢測到網絡連接時,客戶端將寫隊列排出到服務器系統(例如,基于web的電子郵件服務器或服務器系統),其中發送給服務器系統的每一個請求包括操作、操作所修改的一個或多個數據項的唯一標識符以及用于一個或多個數據項中的每一個的校驗和。本地數據庫被存儲在非易失性存儲器中,使得即使web應用崩潰,web應用直到該時刻寫入寫隊列的任何操作被保存。數據項可能不在本地數據庫中,因為其從未被客戶端請求過,或其可能不在本地數據庫中,因為通過緩存替換策略的實施,其已從本地數據庫被移除。如在上面參考圖 7A-7B更詳細描述的,在一些實施例中,當系統檢測到本地數據庫(例如,緩存)是充滿的時,根據緩存替換策略,本地數據庫(例如,緩存)中的數據項中的至少部分被標記以供刪除。如果在本地數據庫中沒有找到(810)該數據項,以及客戶端沒有檢測到(812)網絡連接,則將錯誤返回(814)給web應用。在一些實施例中,還將錯誤返回(例如,顯示) 給web應用的用戶。如果檢測到(816)網絡連接,則使用通信接口(例如,web接口 )將包括唯一標識符(例如,圖6B中的604-1)的請求發送給服務器系統。服務器系統接收(818)該請求, 以及在一些實施例中,通過將所接收到的唯一標識符例如與服務器目錄(例如,圖6A中的 602)中的唯一標識符(例如,圖6A中的604-1)進行匹配,使用唯一標識符(例如,圖6B中的604-1)來查找中央數據庫(例如,圖6A中的120)中的數據項。服務器系統從中央數據庫檢索(820)該數據項(以及在一些實施例中,與該數據項相關聯的另外信息),并且將該數據項(和任何相關聯的信息)發送回客戶端。在一些實施例中,服務器系統計算(820)針對該數據項的第一校驗和,并且將數據項和與該數據項相關聯的第一校驗和發送給客戶端。客戶端將該數據項和第一校驗和接收(808)在本地數據庫中,并且執行(826)對該數據項的操作(例如,顯示該數據項)。在一些實施例中,執行對數據項的操作包括修改數據項,以及客戶端計算用于經修改的數據項的校驗和,并且用客戶端計算的校驗和替換存儲在本地數據庫中的第一校驗和。在一些實施例中,在稍后時間點,web應用需要(828)第二次訪問該數據項。客戶端檢查以確定該數據項是否在本地數據庫中。即使該數據項先前向服務器系統請求過并且被存儲在本地數據庫中,該數據項可能不再被存儲在本地數據庫中。例如,如果通過緩存替換策略的實施,該數據項已被從本地數據庫移除,則客戶端不會在本地數據庫中找到該數據項。如果在本地數據庫中沒有(830)找到該數據項,則客戶端檢查以查看是否存在網絡連接。如在上面更詳細描述的,如果存在(816)網絡連接,則客戶端將對數據項的請求發送給服務器系統,并且接收響應。例如,在web應用是基于web的電子郵件應用的情況下,web 應用第一次需要電子郵件會話(例如,以顯示該會話)時,其必須向基于web的電子郵件服務器請求該會話。在該示例中,基于web的電子郵件服務器計算針對該會話的校驗和,并且將與該會話相關聯的唯一標識符和該校驗和發送給客戶端,所述唯一標識符和校驗和被存儲在本地數據庫中。然后,web應用第二次需要該會話時,其可以僅僅將與該會話相關聯的唯一標識符和校驗和發送給服務器。
如果在本地數據庫中找到(832)該數據項,則客戶端從本地數據庫檢索該數據項,包括第一校驗和(或客戶端計算的校驗和)和與該數據項相關聯的唯一標識符。客戶端向服務器系統發送(836)請求。在一些實施例中,該請求包括第一校驗和(或客戶端計算的校驗和)。在一些實施例中,客戶端設備周期性地將第一校驗和和唯一標識符發送給服務器系統,在其中將第一校驗和與服務器上的用于該數據項的校驗和進行比較。例如,基于web的電子郵件應用通過將會話的校驗和發送給基于web的電子郵件服務器,可以周期性地確認特定會話是最新的。在該示例中,服務器計算(如被存儲在服務器系統中的)會話的校驗和,以及如果校驗和不匹配,則將(如被存儲在服務器系統中的)會話發送給基于 web的電子郵件應用。在一些實施例中,數據項具有多個離散組分(例如,數據項是會話,以及離散組分是消息),以及請求包括(838)組分的標識符(例如,當數據項是為消息列表的會話時,請求包括消息標識符)。在一些實施例中,組分的標識符包括與客戶端上的數據項相關聯的所有組分(例如,如存儲在客戶端上的,用于會話中的所有消息的消息標識符)。在一些實施例中,客戶端發送給服務器系統的請求(例如,836)由web應用自動生成。在一些實施例中,自動生成的請求是對預載最可能被用戶訪問的數據項的請求。在一個示例中,顯示收件箱,該收件箱包含用于與屬性“收件箱”相關聯的多個電子郵件消息或電子郵件消息組(例如,一個或多個相關的電子郵件消息可以被一起分組在一個標題下作為單個會話)的標題信息(例如,發件人和主題)。在該示例中,web應用自動生成對與收件箱的當前視圖中的標題的每一個相關聯的數據項的請求。應當理解的是,收件箱的當前視圖可以是以下的任何一個收件箱中的所有標題(例如,收件箱中的所有消息/會話被請求)、包括在收件箱的當前頁上的所有標題(例如,用戶能夠在屏幕上滾動到的所有消息/ 會話被請求)、以及當前在顯示上顯示的所有標題(例如,僅僅與用戶在不滾動的情況下當前可查看的標題相關聯的消息/會話被請求)。在一些實施例中,數據項可以作為壓縮表示(例如,以壓縮形式)或作為未壓縮表示(例如,以未壓縮形式)來顯示。以壓縮形式顯示的數據項包括比以未壓縮形式顯示的數據項少的信息。在一些實施例中,以壓縮形式顯示的數據項僅包括關于數據項的標題信息(例如,主題、發件人和日期/時間)(例如,關于會話中的第一消息或線程列表中的第一會話的標題信息)。在一些實施例中,以壓縮形式顯示的數據項包括顯示用于數據項的多個組分的標題信息。例如,當數據項是線程列表(例如,收件箱)時,以壓縮形式顯示線程列表包括顯示用于線程列表的組分(例如,會話)中的一個或多個的標題。例如,當數據項是會話(例如,會話)時,以壓縮形式顯示會話包括顯示用于會話的組分(例如,消息)中的一個或多個的標題。在一些實施例中,web應用最初僅具有關于數據項的顯示壓縮形式的該數據項的足夠信息(例如,最初從服務器下載所有最近會話的標題)。當web應用請求訪問特定數據項(例如,包括一個或多個會話的諸如電子郵件收件箱的線程列表)時,顯示壓縮形式的數據項(例如,顯示收件箱中的所有會話的標題)。另外,當web應用請求訪問特定數據項 (例如,web電子郵件收件箱)時,下載完整數據項,使得web應用能夠顯示未壓縮形式的該數據項(例如,會話中的每一個中的所有消息的標題或內容)。對于另一個示例,web應用可以最初以壓縮形式顯示會話(例如,僅顯示會話中的電子郵件消息中的一個或多個的標題),以及可以在從用戶接收顯示未壓縮形式的會話的請求(例如,查看會話中的消息中的一個的完整文本的請求)時,以未壓縮形式顯示會話(例如,顯示會話中的一個或多個另外電子郵件消息的完整文本)。在一些實施例中,在請求被發送給服務器系統之后,客戶端執行(840)對存儲在本地數據庫中的數據項的操作(例如,顯示該數據項)。在一些實施例中,該操作在等待來自服務器系統的響應時被執行。在一些實施例中,服務器系統從web應用接收(84 對該數據項的第二請求,其中第二請求包括該數據項的標識符和第一校驗和。在一些實施例中,該數據項具有多個離散組分(例如,該數據項是會話,以及離散組分是消息),以及請求包括(843)組分的標識符 (當數據項是為消息列表的會話時,請求包括消息標識符)。作為響應,服務器系統從中央數據庫檢索該數據項(844)。在一些實施例中,服務器系統具有針對該數據項執行的操作 (例如,被存儲在寫隊列中并且與請求一起被發送的操作)。服務器系統執行(846)修改數據項的任何操作(例如,如在上面參考圖7A-7B更詳細論述的,執行來自寫隊列的任何操作),然后計算(848)該數據項的第二校驗和。在一些實施例中,服務器系統將第一校驗和(或客戶端計算的校驗和)與第二校驗和進行比較。如果校驗和匹配(850),則服務器系統確定該數據項未被更新過,并且將指示該數據項未被更新過的回復發送(85 給客戶端設備。在一些實施例中,指示該數據項未被更新過的回復是空回復(例如,除其沒有包含待添加到本地數據庫中的數據項或替換本地數據庫中的數據項的任何數據之外,其本質上類似于指示數據項已被更新的回復)。客戶端從服務器接收(854)響應,以及由于沒有(856)替換數據,所以過程結束(857)。如果校驗和不匹配(858),則服務器系統確定該數據項已被更新,并且將指示該數據項已被更新的回復發送(860)給客戶端。應當理解的是,存在用于更新本地數據庫中的數據項的多個策略依據一些實施例,1)與該數據項相關聯的所有數據均被替換,或2)僅該數據項的已被改變或為新的組分被替換/添加到該數據項。在一些實施例中,回復包括已更新的數據項(86 和第二校驗和(例如,整個已更新的數據項被發送給客戶端)。客戶端從服務器接收(854)響應,以及由于存在(864)替換數據(例如,替換會話),所以從服務器系統接收的數據項和第二校驗和被存儲(866)在本地數據庫中,并且替換舊的數據項(例如,先前存儲的會話)和第一校驗和(或客戶端計算的校驗和)。在網絡延時很大(例如,通信花費很長時間)以及網絡連接具有很高帶寬(例如,能夠容易地傳送大量數據)的情況下,該實施例尤其有益。在一些實施例中,在從服務器系統接收已更新的數據項(或數據項組分)之后,在 web應用中重新顯示(867)該數據項。例如,用戶可以提交查看電子郵件收件箱中的會話 (例如,電子郵件消息列表)的請求。在該示例中,web應用最初顯示存儲在本地數據庫中的會話的副本。結合顯示本地存儲的會話,web應用同時(或幾乎同時)向服務器系統發送包括本地存儲的會話的校驗和的請求。在該示例中,如果服務器系統發送該會話的替換會話(更新數據項)或另外的電子郵件消息(新/已更新的組分),則web應用重新顯示已更新的會話(或會話中的新的電子郵件)。在一些實施例中,自動更新(例如,自動重新顯示)數據項。在一些實施例中,顯示指示當前顯示的數據項不是最新(例如,存在可用的已更新的數據項)的消息。例如,消息可以是諸如以下的消息“已接收到該會話的新的消
21息,你想要顯示它們嗎? ”在一些實施例中,當用戶請求顯示已更新的數據項時(例如,通過選擇“重載”按鈕或通過選擇“顯示新的消息”按鈕),顯示已更新的數據項(例如,重新顯示數據項)。在一些實施例中,在來自客戶端的請求包括組分標識符(例如,消息標識符)的情況下,回復包括(868) —個或多個新的組分。在一些實施例中,數據項的新的組分是帶有不匹配舊的數據項的組分的任何標識符的組分標識符的組分(例如,新的電子郵件已被添加到會話)。在一些實施例中,新的組分是具有與帶有同一組分標識符的舊組分不同的校驗和的已更新的組分(例如,會話中的電子郵件已被修改)。新的組分是與數據項相關聯、但是與包括在請求中的任何組分標識符不相關聯的組分。例如,在數據項是會話以及組分是會話中的電子郵件消息的情況下,客戶端向服務器發送包括會話和為該會話的組分的電子郵件消息列表(例如,第一電子郵件、第二電子郵件和第三電子郵件)的標識符的請求。在該示例中,服務器從中央數據庫檢索該會話, 并且記下包括在該會話中的消息標識符(例如,第一電子郵件、第二電子郵件以及第三電子郵件、第四電子郵件和第五電子郵件),并且僅在回復中將新的電子郵件消息(例如,第四電子郵件和第五電子郵件)發送給客戶端設備。客戶端從服務器接收(854)響應,以及由于存在(864)替換數據,所以將數據項的新的組分存儲(866)在本地數據庫中,并且將其與本地數據庫中的該數據項相關聯。另外,第二校驗和替換本地數據庫中的第一校驗和(或客戶端計算的校驗和)。在網絡延時很大(例如,通信花費很長時間)以及網絡連接具有較低帶寬(例如,存在對能夠被傳送的數據的數量的一些限制,因此有益的是,當僅僅少數組分對于使存儲在本地數據庫中的數據項與存儲在中央數據庫中的數據項同步是必需的時, 發送數據項的僅僅少數組分)的情況下,該實施例尤其有益。在一些實施例中,在來自客戶端的請求不包括組分標識符的情況下,回復包括 (870)對數據項中的組分標識符的請求。在該實施例中,客戶端接收(87 對與數據項相關聯的組分標識符(例如,與會話相關聯的消息標識符或與線程列表相關聯的線程標識符) 的請求。客戶端從本地數據庫檢索(874)與數據項相關聯的組分標識符,并且將該組分標識符(以及數據項的相關聯的唯一標識符)發送(876)給服務器系統。服務器系統接收該請求,并且從中央數據庫檢索(878)唯一標識符所指示的數據項。服務器系統將與中央數據庫中的數據項相關聯的組分標識符與客戶端設備發送給服務器系統的組分標識符進行比較(880)。通過比較兩個組分標識符集,服務器系統確定(882)中央數據庫中的數據項的哪些組分,如果有的話,是新的。在一個示例中,數據項是具有三個消息(例如,組分)的會話,其中會話的客戶端版本僅具有前兩個消息,而會話的服務器系統版本具有所有三個消息。在該示例中,客戶端向服務器系統發送會話中的第一消息和第二消息的消息標識符。在該示例中,服務器系統從中央數據庫檢索該會話、識別第一消息、第二消息和第三消息。在該示例中,服務器系統將來自客戶端的消息標識符與從中央數據庫檢索到的消息進行比較,并且確定第三消息是新的消息(例如,新的組分)。在一些實施例中,在確定數據項中存在一個或多個新的組分之后,服務器系統將該一個或多個新的組分與第二校驗和一起發送(884)給客戶端。客戶端接收(886)該一個或多個新的組分和第二校驗和,并且將該一個或多個新的組分和第二校驗和存儲(888)在本地數據庫中。應當注意的是,雖然該實施例來回包括更多行程,總的來說,所述行程包括在客戶端和服務器之間傳送的更小量的數據。因此,在網絡延時很少(例如,通信花費較短時間)以及網絡連接具有較低帶寬(例如,存在對能夠被傳送的數據的數量的限制,因此有益的是,僅僅發送數據項的發送所必需的那些組分)的情況下,該實施例尤其有益。在一些實施例中,使用用于更新數據項的方法(例如,更新整個數據項、發送組分或發送對組分列表的請求,然后發送該組分)的組合,客戶端設備確定在客戶端設備和服務器系統之間的連接的帶寬和/或連接的延時,并且基于帶寬可用性或由于網絡延時的滯后時間的考慮來確定待使用的最佳方法。在一些實施例中,服務器系統確定在客戶端設備和服務器系統之間的連接的帶寬和/或連接的延時,并且基于帶寬可用性或由于網絡延時的滯后時間的考慮來確定待使用的最佳方法。在此描述的方法中的每一個可以由存儲在計算機可讀存儲介質中并且由一個或多個服務器系統106或客戶端設備102中的一個或多個處理器執行的指令支配。在圖7A-7B 和8A-8D中所示的操作中的每一個可以對應于存儲在計算機存儲器或計算機可讀存儲介質中的指令。為了說明的目的,已參考特定實施例描述了前面的描述。然而,在上面的說明性論述并不意在窮舉或將本發明限制在所公開的精確形式。根據在上面的教導,許多修改和變化是可能的。選擇并且描述了實施例,以最佳說明本發明的原理和其實際應用,從而使本領域技術人員能夠與適于預期的特定用途的各種修改一起最佳利用本發明和各種實施例。
權利要求
1.一種用于運作具有離線能力的web應用的計算機系統,包括 客戶端設備,具有計算機處理器和計算機存儲器;web瀏覽器,被配置成在所述客戶端設備上執行; 本地web應用,被配置成在所述web瀏覽器內運作;web接口,被配置成管理在所述本地web應用和與所述web應用相關聯的服務器系統之間的通信;在所述存儲器中維護的寫隊列;在所述存儲器中維護的包含多個數據項的持久性本地數據庫,每一個數據項與使每一個相應的數據項能夠在所述客戶端設備和所述服務器系統上被唯一識別的標識符相關聯;其中當所述web應用需要執行對數據項的操作時,所述web應用發出數據庫請求以確定所述數據項是否在所述本地數據庫中;如果所述數據項不在所述本地數據庫中,則所述web應用經由所述web接口向所述服務器系統發出所述數據請求;如果所述數據項在所述本地數據庫中,并且所述操作涉及更新所述數據項,則所述web 應用執行對存儲在所述數據庫中的所述數據項的所述操作,并且將表征所述操作的信息以及所述數據項的所述標識符寫入所述寫隊列;當在所述客戶端設備和所述服務器系統之間存在網絡連接時,所述web接口將所述寫隊列排出到所述服務器系統。
2.根據權利要求1所述的計算機系統,其中所述本地數據庫被存儲在非易失性存儲器中。
3.根據權利要求1或2所述的計算機系統,其中所述web應用是具有離線能力的基于 web的電子郵件應用。
4.根據權利要求1、2或3所述的計算機系統,其中所述數據項是所述電子郵件應用中的線程列表或會話。
5.根據權利要求1、2、3或4所述的計算機系統,其中當所述計算機系統檢測到所述緩存是充滿的時,根據緩存替換策略,所述緩存中的所述數據項中的至少部分被標記以供刪除。
6.根據權利要求1、2、3、4或5所述的計算機系統,其中排出所述寫隊列包括將所述寫隊列中的所述操作按照他們存儲在所述寫隊列中的順序發送給所述服務器系統。
7.一種用于在具有計算機處理器和計算機存儲器的客戶端設備處運作具有離線能力的web應用的計算機實現的方法,包括在所述客戶端設備上執行web瀏覽器;執行本地web應用,所述本地web應用被配置成在所述web瀏覽器內運作; 用web接口管理在所述本地web應用和與所述web應用相關聯的服務器系統之間的通在所述存儲器中維護寫隊列;在所述存儲器中維護包含多個數據項的持久性本地數據庫,每一個數據項與使每一個相應的數據項能夠在所述客戶端設備和所述服務器系統上被唯一識別的標識符相關聯; 其中當所述web應用需要執行對數據項的操作時,所述web應用發出數據庫請求以確定所述數據項是否在所述本地數據庫中;如果所述數據項不在所述本地數據庫中,則所述web應用經由所述web接口向所述服務器系統發出所述數據請求;如果所述數據項在所述本地數據庫中,并且所述操作涉及更新所述數據項,則所述web 應用執行對存儲在所述數據庫中的所述數據項的所述操作,并且將表征所述操作的信息以及所述數據項的所述標識符寫入所述寫隊列;當在所述客戶端設備和所述服務器系統之間存在網絡連接時,所述web接口將所述寫隊列排出到所述服務器系統。
8.根據權利要求7所述的計算機實現的方法,其中所述本地數據庫被存儲在非易失性存儲器中。
9.根據權利要求7或8所述的計算機實現的方法,其中所述web應用是具有離線能力的基于web的電子郵件應用。
10.根據權利要求7、8或9所述的計算機實現的方法,其中所述數據項是所述電子郵件應用中的線程列表或會話。
11.根據權利要求7、8、9或10所述的計算機實現的方法,其中當所述計算機系統檢測到所述緩存是充滿的時,根據緩存替換策略,所述緩存中的所述數據項的至少部分被標記以供刪除。
12.根據權利要求7、8、9、10或11所述的計算機實現的方法,其中排出所述寫隊列包括將所述寫隊列中的所述操作按照他們存儲在所述寫隊列中的順序發送給所述服務器系統。
13.一種存儲供客戶端設備的一個或多個處理器執行的一個或多個程序的計算機可讀存儲介質,所述一個或多個程序包括用于以下的指令在所述客戶端設備上執行web瀏覽器; 執行在所述web瀏覽器內的本地web應用;使用web接口來管理在所述本地web應用和與所述web應用相關聯的服務器系統之間的通信;在所述存儲器中維護寫隊列;在所述存儲器中維護包含多個數據項的持久性本地數據庫,每一個數據項與使每一個相應的數據項能夠在所述客戶端設備和所述服務器系統上被唯一識別的標識符相關聯; 其中當所述web應用需要執行對數據項的操作時,所述web應用發出數據庫請求以確定所述數據項是否在所述本地數據庫中;如果所述數據項不在所述本地數據庫中,則所述web應用經由所述web接口向所述服務器系統發出所述數據請求;如果所述數據項在所述本地數據庫中,并且所述操作涉及更新所述數據項,則所述web 應用執行對存儲在所述數據庫中的所述數據項的所述操作,并且將表征所述操作的信息以及所述數據項的所述標識符寫入所述寫隊列;當在所述客戶端設備和所述服務器系統之間存在網絡連接時,所述web接口將所述寫隊列排出到所述服務器系統。
14.根據權利要求13所述的計算機可讀存儲介質,其中所述本地數據庫被存儲在非易失性存儲器中。
15.根據權利要求13或14所述的計算機可讀存儲介質,其中所述web應用是具有離線能力的基于web的電子郵件應用。
16.根據權利要求13、14或15所述的計算機可讀存儲介質,其中所述數據項是所述電子郵件應用中的線程列表或會話。
17.根據權利要求13、14、15或16所述的計算機可讀存儲介質,其中當所述計算機系統檢測到所述緩存是充滿的時,根據緩存替換策略,所述緩存中的所述數據項的至少部分被標記以供刪除。
18.根據權利要求13、14、15、16或17所述的計算機可讀存儲介質,其中排出所述寫隊列包括將所述寫隊列中的所述操作按照他們存儲在所述寫隊列中的順序發送給所述服務器系統。
全文摘要
一種運作具有離線能力的web應用的計算機系統,包括web瀏覽器、本地web應用、在本地存儲器中維護的寫隊列以及持久性本地數據庫。當web應用需要執行對數據項的操作時,web應用發出數據庫請求以確定該數據項是否在本地數據庫中。如果該數據項不在本地數據庫中,則web應用向服務器系統發出數據請求。如果該數據項在本地數據庫中,則web應用執行對存儲在該數據庫中的該數據項的操作,并且將該操作以及該數據項的標識符寫入寫隊列。當在客戶端設備和服務器系統之間存在網絡連接時,web接口將寫隊列排出到服務器系統。
文檔編號G06F17/30GK102449628SQ201080023704
公開日2012年5月9日 申請日期2010年4月1日 優先權日2009年4月3日
發明者亞歷山大·V·肯貝格, 亞歷山大·尼科拉烏, 帕維爾·V·科比亞科夫, 羅伯特·J·克勒格爾 申請人:谷歌公司