专利名称:用于持久性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·克勒格尔 申请人:谷歌公司