CN102449602A - 用于降低软件应用的启动成本的***和方法 - Google Patents
用于降低软件应用的启动成本的***和方法 Download PDFInfo
- Publication number
- CN102449602A CN102449602A CN201080023731.8A CN201080023731A CN102449602A CN 102449602 A CN102449602 A CN 102449602A CN 201080023731 A CN201080023731 A CN 201080023731A CN 102449602 A CN102449602 A CN 102449602A
- Authority
- CN
- China
- Prior art keywords
- data
- application
- request
- main
- synchronously
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/161—Computing infrastructure, e.g. computer clusters, blade chassis or hardware partitioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
Abstract
一种计算设备具有一个或多个处理器和存储由该一个或多个处理器执行的程序的存储器。计算设备初始化第一线程上的主应用。主应用具有与目标应用的第一同步连接。在主应用通过第一同步连接执行在目标应用处的一个或多个操作之后,计算设备初始化第二线程上的助理进程。助理进程具有与目标应用的第二同步连接和与主应用的异步连接。在通过异步连接从主应用接收请求之后,助理进程通过第二同步连接执行在目标应用处的一个或多个操作。
Description
技术领域
所公开的实施例总体上涉及客户端-服务器计算机网络***领域,具体地涉及用于降低软件应用的启动成本的***和方法。
背景技术
计算机上的软件应用的启动典型地需要计算机将该应用加载到存储器中、从本地和/或远程源检索数据、以及将该数据存储在存储器中的指定位置处。在该应用被完全初始化并且准备好处理用户指令之前,用户通常不能使用该应用。很多时候,该初始化过程可能花费很长一段时间,在该时间期间用户除了等待不能做任何事情。在计算机是诸如移动电话的便携式设备的情况下,这种情况可能对用户体验具有显著影响,所述便携式设备由于限制的网络带宽、存储器空间和处理器吞吐量中的一个或多个而具有有限资源。
发明内容
在一些实施例中,计算设备具有一个或多个处理器和存储由该一个或多个处理器执行的程序的存储器。计算设备初始化第一线程上的主应用。主应用具有与目标应用的第一同步连接。在主应用通过第一同步连接执行在目标应用处的一个或多个操作之后,计算设备初始化第二线程上的助理进程。助理进程具有与目标应用的第二同步连接和与主应用的异步连接。在通过异步连接从主应用接收请求之后,助理进程通过第二同步连接执行在目标应用处的一个或多个操作。
在一些实施例中,计算机***包括一个或多个处理器;存储器;以及一个或多个程序。一个或多个程序被存储在存储器中,并且被配置成由一个或多个处理器执行。一个或多个程序包括:用于初始化第一线程上的主应用的指令,其中主应用具有与目标应用的第一同步连接;用于在主应用通过第一同步连接执行在目标应用处的一个或多个操作之后,初始化第二线程上的助理进程的指令,其中助理进程具有与目标应用的第二同步连接和与主应用的异步连接;以及用于在助理进程处通过异步连接从主应用接收请求的指令;以及用于响应于请求,通过第二同步连接执行在目标应用处的一个或多个操作的指令。
在一些实施例中,计算机可读存储介质包括嵌入在其中的一个或多个计算机程序。一个或多个计算机程序包括指令,所述指令当由计算机***执行时促使该计算机***:初始化第一线程上的主应用,其中主应用具有与目标应用的第一同步连接;在主应用通过第一同步连接执行在目标应用处的一个或多个操作之后,初始化第二线程上的助理进程,其中助理进程具有与目标应用的第二同步连接和与主应用的异步连接;以及在助理进程处通过异步连接从主应用接收请求;以及响应于请求,通过第二同步连接执行在目标应用处的一个或多个操作。
附图说明
图1是图示依据一些实施例的客户端-服务器分布式***的基础结构的框图。
图2是图示依据一些实施例的示例性客户端***的结构的框图。
图3是图示依据一些实施例的示例***器***的结构的框图。
图4是图示依据一些实施例的在客户端-服务器分布式***的组件之间的相互关系的框图。
图5A-5C是图示依据一些实施例的在客户端-服务器分布式***中的多线程软件应用的启动过程的框图。
图5D是图示依据一些实施例的在启动和用于在客户端***上的基于web的软件应用和服务器***之间传送数据的随后操作中,在客户端和服务器之间的交互的流程图。
图5E是图示依据一些实施例的与多线程软件应用相关联的多个线程的启动过程的流程图。
图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,其是图示依据本发明的一个实施例的计算机***(例如,客户端设备102)的框图。客户端设备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浏览器内执行。
o一个或多个web应用114可以包括:web应用管理器219,其用于协调在web应用114内的操作;写队列220,其用于使来自web应用管理器219的操作排成队列;动作调度器222,其用于写入本地数据库116;以及(可选地)校验和计算器224,其用于计算针对数据项的校验和;
o本地数据库116存储在web应用114从各个服务器***106接收的数据项(例如,226-1、226-2);
o用户接口模块228包括:视图模块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包括高速随机存取存储器,诸如DRAM、SRAM、DDR RAM或其他随机存取固态存储器设备;以及可以包括非易失性存储器,诸如一个或多个磁盘存储设备、光盘存储设备、闪存设备或其他非易失性固态存储设备。存储器312可以可选地包括位于远离CPU 302的地方的一个或多个存储设备。存储器312或替选地存储器312内的非易失性存储器设备包括计算机可读存储介质。在一些实施例中,存储器312或存储器312的计算机可读存储介质存储以下程序、模块和数据结构或其子集:
·操作***316,其包括用于处理各种基本***服务和用于执行依赖硬件的任务的程序;
·通信模块318,其用于经由一个或多个通信接口304(有线或无线)以及一个或多个通信网络将服务器***106连接到其他计算机,所述通信网络诸如因特网、其他广域网、局域网、城域网等;
·响应处理器模块320,其在服务器***106和客户端设备102之间传递通信,该响应处理器模块可以结合或替代独立的前端服务器(图1中的108)使用;
·服务器应用110,其准备对从客户端设备102接收到的请求的响应,在一些实施例中,服务器应用110将web应用114发送给客户端设备102;
·中央数据库120,其用于存储与服务器应用110和/或web应用114相关联的数据项(例如,226-1、226-2);
·校验和计算器(可选)328,其用于计算针对数据项的校验和;以及
·校验和比较器(可选)330,其用于将从web应用接收到的校验和与服务器***106所计算的校验和进行比较。
尽管图3示出了单个服务器***106,参考图3描述的服务器与其意在作为在此描述的实施例的结构示意相比,更意在作为可以在服务器***中存在的各种特征的功能描述。实际上,以及如本领域技术人员所认识到的,分离示出的项能够被组合,以及一些项能够被分离。例如,在图3中分离示出的一些项能够在单个服务器上实现,以及单个项能够由一个或多个服务器实现。用来实现服务器***106(图1)的服务器的实际数量和类型以及在它们之间如何分配特征将随实施方式的不同而不同,以及可以部分取决于***在峰值使用时段期间以及在平均使用时段期间必须处理的数据业务量。
在上面识别的要素中的每一个可以被存储在前面提到的存储器设备中的一个或多个中,以及与用于执行上述功能的指令集相对应。上面识别的模块或程序(即,指令集)不必被实现为独立的软件程序、程序或模块,因此在各种实施例中,这些模块的各种子集可以被组合或另外重新安排。在一些实施例中,存储器312可以存储在上面识别的模块和数据结构的子集。此外,存储器312可以存储在上面没有描述的另外的模块和数据结构。
现将注意力引向图4,其图示了依据一些实施例的在客户端-服务器分布式***的组件之间的相互关系。如图4中所示,用户接口模块228包括:视图模块230,其用于呈现用户界面(例如,在图2中的显示206上);以及控制器模块232,其用于检测用户交互事件(例如,来自图2中的键盘/鼠标208或触敏表面209的鼠标点击或键盘输入),并且将用户交互事件传递给web应用管理器219。在一些实施例中,控制器模块232被实现为一组事件处理器402(例如,点击/触摸事件处理器),其处理点击、触摸和其他用户输入。在一些实施例中,最初,所有事件处理器显示活动性,并且向web应用管理器219(例如,在一些实施例中,JavaScript存储器内模型)发送请求,所述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被配置成将操作(例如,“操作1”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应用管理器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和本地数据库116之间存在同步连接506。本地数据库116缓存与电子邮件服务相关联的预定义量的数据。在下面结合图6B提供了对本地数据库的更详细的描述。通过同步连接506,在主线程502处的主应用能够以同步方式执行对本地数据库116的操作,诸如从本地数据库116检索数据记录以及在本地数据库116中更新数据记录。
在主线程502和在远程服务器***106处的服务器应用322之间还存在异步连接514。作为基于web的软件应用的一部分,由在客户端102处的主应用呈现的所有电子邮件消息最终来自服务器应用322,其在服务器端管理中央数据库120中的电子邮件消息。在下面结合图6A和7A-7B提供了对服务器应用322和中央数据库120的更详细的描述。如将在下面说明的,如果数据不存在于本地数据库116中,则主应用使用异步连接514来从中央数据库120检索该数据。
在一些实施例中,在主线程502处的主应用的初始化包括在客户端102处显示用户界面、从本地数据库116检索预定义量的数据、以及用所检索到的数据来填充用户界面。例如,在基于web的电子邮件服务的初始化期间,主线程502上的主应用使用同步连接506来从本地数据库116检索与用户的电子邮件帐户的收件箱文件夹相关联的电子邮件消息,因为其假设电子邮件服务的普通用户对首先查看寄送到该用户的收件箱文件夹中的未读消息最感兴趣。在通过同步连接506从本地数据库116检索消息之后,主应用使用检索到的消息来填充与电子邮件服务相关联的用户界面以允许客户端102的用户与至少在收件箱文件夹中的消息进行交互。尽管如在图5A中所示的主应用的初始化可能没有在整个电子邮件服务的启动时结束,能够尽可能快速地访问收件箱文件夹中的未读消息可以显著改善普通用户的对电子邮件服务的体验。
除填充收件箱文件夹外,电子邮件服务的启动过程可以执行其他任务,诸如从本地数据库116取得与其他文件夹相关联的电子邮件消息,以及使本地数据库116与中央数据库120同步。结果,完成整个启动过程可能涉及在客户端102中的不同组件之间以及在客户端102和服务器106之间的大量数据传输。如果主线程502负责同步处理这些任务中的部分,则其可能不能以及时方式带出用户界面,并且准备好接收用户指令。另外,在初始化之后,web应用可能需要执行正在进行的任务,诸如访问数据库116中的较大数据项、呈现较大图形文件、管理跨网络或同步协议的下载、执行文件读或写、或执行客户端设备上的其他计算密集型任务,所述其他计算密集型任务如果由主线程502同步执行,则可能可感觉到地减慢web应用的操作,因此损害用户体验。在一些实施例中,能够由主线程502直接执行的这些操作中的至少部分被委托给运行于能够与主线程异步交互的辅助线程上的一个或多个助理进程,从而降低主线程502上的负载。没有这些辅助线程,由于需要等待同步操作来完成并且返回结果,主线程502将堵塞web应用的进行。
因此,在一些实施例中,为用户提供电子邮件服务已准备就绪的印象的初始化阶段510后跟第二阶段520,在其中在辅助线程504上初始化助理进程。如上所述,助理进程的目的是执行那些同步任务,所述同步任务如果由主线程执行,则将堵塞web应用的进行。通过推迟辅助线程504的开始,避免或至少显著降低了由使主线程502负责整个启动过程所产生的延时。另外,通过推迟辅助线程504直到在主线程502执行了与使web应用开始相关联的一个或多个同步操作之后才开始,创建/初始化辅助线程的成本能够被推迟直到在用户能够开始使用该应用之后才花费。创建/初始化辅助线程的成本包括取得、解析以及初始化web应用代码所需要的时间,取决于移动设备和应用,其可能花费高达或多于一秒。通过避免在启动时的该延迟,用户能够几乎立即开始使用该应用。
如图5B中所示,在主线程502处的主应用结束在主线程502和本地数据库116之间的事务,例如填充电子邮件服务的收件箱文件夹之后,主线程502产生辅助线程504。注意到,在辅助线程504处的助理进程被生成来替代在主线程502处的主应用来与本地数据库116通信,并且完成开始基于web的电子邮件服务应用的剩余任务。在辅助线程504和本地数据库116之间也存在同步连接512。通过该连接512,助理进程可以执行主应用能够通过连接506执行的对本地数据库116的相同操作。在一些实施例中,助理进程被配置成完成主应用所留下的初始化基于web的应用的剩余任务。在一些其它实施例中,主应用完成与初始化基于web的应用相关联的所有任务。因此,助理进程主要负责取代由主线程502所扮演的与本地数据库116交互的角色。
如图5C中所示,在主线程502和辅助线程504之间存在异步连接508。通过建立同步连接512,主应用不再需要如其在初始化阶段510期间所做的那样,直接通过同步连接506来执行对本地数据库116的操作。相反,整个应用现在转变成稳定操作的阶段530。在稳定操作期间,主应用通过异步连接508与在辅助线程504处的助理进程通信。在下面结合图5D提供了该通信的更详细描述。结果,在一些实施例中,终止或破坏在主线程502和本地数据库116之间的同步连接506(如图5C中的虚线所指示的)。在一些其他实施例中,同步连接506仍然存在,但是被失活。
现将注意力引向图5D,其图示了依据一些实施例的在启动和用于在客户端***上的基于web的软件应用和服务器***之间传送数据的随后操作中,在客户端和服务器之间的交互。
最初,在主线程502上起动(540)主应用。在一些实施例中,主应用在客户端设备上显示(542)用户界面、从本地数据库检索(544)数据以及用所检索到的数据来填充(546)用户界面。例如,基于web的电子邮件服务在这时通过显示用户通过用户界面选择的电子邮件消息以及接收通过用户界面的用户输入的文本,准备好对与客户端设备的用户交互作出响应。
在执行前述操作之后,主应用进入空闲状态,并且等待(548)下一用户指令。但是为了使主应用从与本地数据库的随后交互解脱,所述随后交互可能堵塞用户与客户端设备的交互,在辅助线程504上起动(550)助理进程。在一些实施例中,如图5D中的虚线所指示的,助理进程在时间上可以被更早起动,只要其起动不会严重堵塞主应用对用户指令作出响应。接着,助理进程建立(552)与主应用的异步连接,并且建立(554)与本地数据库的同步连接。在一些实施例中,在该点,准备好处理数据库请求的助理进程/辅助线程504向主线程502返回“准备就绪”消息,在这之后,当主线程这样做是安全的时,主线程将对本地数据库操作的责任传递给助理进程/辅助线程504。在一些实施例中,这是主线程在其正在处理的同步数据库操作之间的时候。
现假设主应用随后接收(558)从本地数据库检索数据的用户指令。此刻,助理进程已被起动,并且在主应用和本地数据库之间的同步连接(图5C,506)可能已被终止。因此,主应用通过在主线程和辅助线程之间的异步连接向助理进程发送(560)数据访问请求。当接收(562)数据访问请求时,助理进程试图通过在辅助线程和本地数据库之间的同步连接从本地数据库检索(564)数据,如果有的话,并且通过与主线程的异步连接将响应返回(568)给主应用。
注意到,在一些实施例中,本地数据库可能没有主应用所请求的数据。例如,如果用户指令是刷新基于web的电子邮件服务,则本地数据库可能还没有收件箱中的最近消息。因此,当从助理进程接收(570)响应时,主应用首先确定该响应是否包括所请求的数据。如果为真(572,是),则主应用然后使用所检索到的数据来更新(590)用户界面。如果为假(572,否),则主应用然后通过异步连接514向远程服务器应用322发送(574)数据请求。
当接收(576)数据请求时,远程服务器应用从中央数据库120检索所请求的数据,并且将所请求的数据返回(578)给客户端设备。在客户端侧,在接收(580)所请求的数据之后,主应用执行两个操作:(i)通过异步连接向助理进程发送(582)数据更新请求以及(ii)更新(590)用户界面。注意到,这两个操作可以按照任何顺序或并行执行。当接收(586)包括服务器应用所返回的数据的数据更新请求时,助理进程对本地数据库进行更新(588)。
现将注意力引向图5E,其图示了依据一些实施例的与多线程软件应用相关联的多个线程的启动过程。启动过程由计算设备来执行,所述计算设备具有一个或多个处理器和存储由该一个或多个处理器执行的程序的存储器。示例性计算设备包括:台式计算机;膝上型计算机;以及便携式通信设备,诸如还包含诸如PDA和/或音乐播放器功能的其他功能的移动电话。
在一些实施例中,计算设备首先初始化(532)第一线程上的主应用。主应用具有与目标应用的第一同步连接。示例性目标应用包括在计算设备处的数据库应用、在计算设备处的用于呈现图像的应用、用于访问、传送或下载文件的应用、以及用于执行数值计算的应用等。为了说明,随后描述针对基于web的电子邮件服务,以及目标应用是运行于客户端设备上的本地数据库。但是本领域技术人员将能够将相同方法论应用于可以或可以不是基于web的其他类型的软件应用,只要过程能够推迟应用的启动成本,从而改善用户体验。
在一些实施例中,在初始化之后,主应用在计算设备诸如移动电话的显示面板处显示(532-1)用户界面。用户界面可以包括电子邮件服务的收件箱文件夹的图标,其包含寄送给移动电话的用户的电子邮件消息。为了支持与用户界面的用户交互,计算设备从数据库应用检索(532-2)诸如那些电子邮件消息的数据,并且用电子邮件消息填充(532-3)用户界面。当对主应用的初始化结束时,用户应当能够提交电子邮件服务所支持的各种指令,诸如查看进入的消息、撰写新的消息以及删除现有消息等。
在主应用通过第一同步连接执行在本地数据库处的一个或多个操作之后,计算设备初始化(534)第二线程上的助理进程。在一些实施例中,助理进程具有与目标应用的第二同步连接和与主应用的异步连接(例如,参见图5B)。在一些实施例中,在助理进程被初始化并且在主应用和目标应用之间的通信单元完成之后,在主应用和本地数据库之间的第一同步连接被终止(534-1)。例如,在用所检索到的消息填充用户界面之后,主应用可以不再维护与本地数据库的直接连接。替代地,主应用在助理进程被初始化之后,等待从助理进程接收准备就绪通知。该准备就绪通知指示助理进程准备好通过异步连接从主应用接受数据访问请求,然后通过同步连接在本地数据库上执行所述请求。结果,主应用从管理本地数据库中解脱,并且使其自身致力于协同电子邮件服务处理用户指令。
在初始化助理进程并且主应用完成模块化任务(例如,填充用户界面)之后,主应用准备好处理用户指令。当接收诸如删除本地数据库中的电子邮件消息的用户指令时,主应用向助理进程发送请求。在通过异步连接从主应用接收(536)请求之后,助理进程通过第二同步连接在目标应用处执行(538)一个或多个操作。在一些实施例中,助理进程通过异步连接从主应用接收(536-1)访问本地数据库的数据请求。
响应于接收数据请求,助理进程同步地在数据库应用处执行(538-1)该数据请求,并且从数据库应用接收(538-2)对该数据请求的响应。助理进程异步地将对该数据请求的响应返回(538-3)给主应用。如果响应包括所请求的数据,则主应用可以使用该数据来更新用户界面。如果响应没有包括所请求的数据,则主应用异步地向远程服务器***提交对所请求的数据的新的请求,然后从远程服务器***接收所请求的数据。在从远程服务器***接收所请求的数据之后,主应用异步地将所请求的数据转送给助理进程。助理进程作为响应,同步地用所请求的数据更新数据库应用。
如在此关于本地数据库操作的特定实例所描述的,推迟对助理进程/辅助线程的初始化在存在以下条件中的一个或多个的许多情况下是有用的:1)负责执行应用的主线程能够直接执行待由助理进程/辅助线程执行的同步操作;2)创建/初始化助理进程是昂贵的;以及3)创建助理进程所需的工作通常是应用的初始化过程的一部分。在这样的情况下,通过以下改善了与应用一起的用户体验:允许主线程执行在初始化时通常分配给助理进程的任务、与那些初始操作并行创建助理进程/辅助线程(从而提供与应用的令人满意的用户交互),然后当其这样做是安全的时候将控制交给助理线程。在单个或多个辅助线程需要被创建来执行同步任务以支持主应用线程的情况下,可以利用这个策略。
现将注意力引向图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。在数据项是会话(例如,消息列表)的实施例中,数据项标识符是消息列表中的第一消息的消息标识符。
在一些实施例中,数据项(例如,226-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”226-1和“数据项2”226-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中,每一个消息与关于该消息的消息信息624相关联。在一些实施例中,消息信息624包括消息的文本,包括任何附件。
现将注意力引向图6B,其图示了依据一些实施例的在客户端设备中的与web应用相关联的数据。在一些实施例中,本地数据库116包括客户端目录652。客户端目录652是将唯一标识符(例如,“唯一ID”604-1)与数据项(例如,“数据项1”226-1)的状态(例如,“状态”656-1)和对数据项的引用(例如“引用1”660-1)相关联的查找表。在一些实施例中,在使用校验和(例如,658-1、658-2、658-3、658-M)来保持缓存一致性的情况下,用于每一个数据项的校验和(例如,226-1,校验和(例如,658-1))被存储在本地数据库116中,并且与该数据项相关联。在图6B中所图示的实施例中,校验和(例如,658-1)被存储在客户端目录652中。然而,应当理解的是,校验和能够被存储在本地数据库116的另一个部分中。
在一些实施例中,唯一标识符(例如,“唯一ID”604-N)包括数据项类型609和数据项标识符610,如在上面参考图6A更详细论述的。在一些实施例中,服务器上的唯一标识符(例如,图6A中的“唯一ID”604-1)与客户端上的唯一标识符(例如,图6B中的“唯一ID”604-1)相同,并且指示两个唯一标识符都与同一数据项相关联。
在一些实施例中,数据项(例如,226-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涉及关系表中的关于“数据项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浏览器的文档对象模型被用作L1缓存。如在硬件中得到的各种缓存所建议的,将文档对象模型用作L1缓存的软件可以是回写式或直写式的。在一些实施例中,当web应用通过直接修改文档对象模型来实现一些用户动作时,文档对象模型片段的回写式缓存作为L1缓存是适当的。依据一些实施例,其与硬件缓存的类比所建议的实施例中的其他特征是对数据项的预取和负载转发(即,其中来自服务器的响应在被写入本地数据库116之前被直接转发给web浏览器112以在显示206上显示)。
在一些实施例中,写队列220被存储在非易失性存储器中,使得即使web应用崩溃或运行web应用的web浏览器崩溃,直到那一刻web应用写入写队列的任何操作均被保存。
在一些实施例中,所请求的数据项可能不在本地数据库中,因为其从未被客户端请求过,或其可能不在本地数据库中,因为由于缓存替换策略,其已从本地数据库被移除。在一些实施例中,当***检测到本地数据库(例如,缓存)是充满的时,根据缓存替换策略,本地数据库(例如,缓存)中的数据项中的至少部分被标记以供删除,所述缓存替换策略可以是多个选项中的一个。
在一些实施例中,缓存替换策略是最近最少使用(LRU)策略,其中最近最少使用的数据项首先被从本地数据库删除。在一些实施例中,缓存替换策略是最不常用策略,其中最少访问的数据项通常首先被从本地数据库删除。在一些实施例中,缓存替换策略由一些其他因素来确定,所述其他因素包括哪些数据项是最旧的或具有最大文件大小。在一些实施例中,缓存替换策略是随机的,其中数据项被从缓存随机删除(即,不考虑与数据项相关联的任何标准)。在一些实施例中,缓存替换策略基于确定哪些数据项最可能不被web应用所需要(例如,知道带有某些特征的电子邮件不可能被读取多于一次)的因素的组合。在一个实施例中,在服务器处为每一个数据项计算替换优先级,并且将其存储在本地数据库中,以及本地数据库中的数据项根据替换优先级按照降序被标记以供删除。另外,应当理解的是,可以使用在硬件缓存中使用的任何缓存替换策略来确定本地数据库中的哪些数据被标记以供删除。在一些实施例中,客户端周期性从本地数据库移除被标记以供删除的所有数据项。现有技术中关于这些替换策略的应用的教导与本发明的不同实施例相关。
如果在本地数据库中没有找到(710)该数据项,以及客户端没有检测到(712)网络连接,则将错误返回(714)给web应用。在一些实施例中,还将错误返回(例如,显示)给web应用的用户。
如果检测到(716)网络连接,则使用通信接口(例如,web接口)将包括唯一标识符(例如,图6B中的604-1)的请求发送给服务器***。服务器***接收(718)该请求,以及在一些实施例中,通过将所接收到的唯一标识符例如与服务器目录(例如,图6A中的602)中的唯一标识符(例如,图6A中的604-1)进行匹配,使用唯一标识符(例如,图6B中的604-1)来查找中央数据库(例如,图6A中的120)中的数据项。服务器***从中央数据库检索(719)该数据项(以及在一些实施例中,与该数据项相关联的另外信息),并且将该数据项(和任何相关联的信息)发送回客户端。
在一些实施例中,请求由用户指定,诸如在检测到对数据项的压缩表示的选择之后,显示数据项的未压缩的表示(有时被称为扩展的表示)的请求。在一个示例中,显示电子邮件收件箱,该电子邮件收件箱包含用于多个电子邮件消息或电子邮件消息组(例如,一个或多个相关的电子邮件消息可以被一起分组在一个标题下作为单个会话)的标题信息(例如,发件人和主题)。在该示例中,当用户选择一个电子邮件消息或会话的标题时,web应用显示整个电子邮件消息(当标题是用于单个消息的标题时)或会话中的电子邮件消息的至少部分的列表(当标题是用于电子邮件消息的会话的标题时)。
在一些实施例中,请求由web应用自动生成。在一些实施例中,自动生成的请求是对预载最可能被用户访问的数据项的请求。在一个示例中,显示包含以下的收件箱:用于多个电子邮件消息或电子邮件消息组(例如,一个或多个相关的电子邮件消息可以被一起分组在一个标题下作为单个会话)的标题信息(例如,发件人和主题)。在该示例中,web应用自动生成对与收件箱的当前视图中的标题中的每一个相关联的数据项的请求。应当理解的是,收件箱的当前视图可以是以下的任何一个:收件箱中的所有标题(例如,收件箱中的所有消息/会话被请求)、包括在收件箱的当前页上的所有标题(例如,用户能够在屏幕上滚动到的所有消息/会话被请求)、以及当前在显示上显示的所有标题(例如,仅仅与用户在不滚动的情况下当前可查看的标题相关联的消息/会话被请求)。
客户端接收(708)该数据项,并且执行(720)对该数据项的操作。在一些实施例中,操作不对数据项进行更新(例如,向用户显示电子邮件)。在一些实施例中,操作对数据项进行更新(例如,操作是修改操作,诸如将电子邮件消息添加到电子邮件消息的会话或从电子邮件消息的会话删除电子邮件消息)。如果操作不(722)对数据项进行更新,则web应用过程结束(723)。如果操作对数据项进行更新(724),则web应用将执行操作的请求放置(726)在写队列(例如,图4中的220)中。在一些实施例中,写队列中的操作包括与操作相关联的任何数据项的唯一标识符(例如,如果操作是将消息添加到相应会话,则操作包括该相应会话的唯一标识符)。在一些实施例中,服务器***使用该唯一标识符来识别存储在中央数据库中的待对其执行操作的数据项(例如,服务器***识别存储在中央数据库中的相应会话,并且将消息添加到该相应会话)。
在一些实施例中,在将操作放置在写队列中之后,web应用检查(728)网络连接状态。如果客户端没有(732)连接到网络,则客户端设备等待超时(734)时间,并且重新检查(728)网络连接状态。在一些实施例中,基于操作是否已被添加到写队列,web应用周期性地检查网络连接状态(例如,每5分钟)。
当web应用检测到客户端设备连接到网络(736)时,将在客户端存储器中维护的写队列排出((to drain)到所连接的服务器。在一些实施例中,重要的是,在非易失性存储器中维护写队列,使得如果web浏览器崩溃,则已作出但尚未发送给服务器***(例如,由于没有网络连接)的用户动作被保存。在一些实施例中,写队列按照操作被添加到写队列的顺序被排出(例如,最旧的操作首先被发送给服务器***,后跟第二旧的操作等)。在一些实施例中,重要的是,写队列中的动作按照添加到队列的顺序来执行,以确保当存在修改同一数据项的多个操作时,操作按照正确的顺序被执行。(例如,第一操作将标签“工作”应用于相应的消息/会话,以及第二操作用指示消息/会话已被用户读取的标志标记与“工作”标签相关联的所有消息/会话)。
在一些实施例中,服务器***从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应用接收(842)对该数据项的第二请求,其中第二请求包括该数据项的标识符和第一校验和。在一些实施例中,该数据项具有多个离散组分(例如,该数据项是会话,以及离散组分是消息),以及请求包括(843)组分的标识符(当数据项是为消息列表的会话时,请求包括消息标识符)。作为响应,服务器***从中央数据库检索该数据项(844)。在一些实施例中,服务器***具有针对该数据项执行的操作(例如,被存储在写队列中并且与请求一起被发送的操作)。服务器***执行(846)修改数据项的任何操作(例如,如在上面参考图7A-7B更详细论述的,执行来自写队列的任何操作),然后计算(848)该数据项的第二校验和。
在一些实施例中,服务器***将第一校验和(或客户端计算的校验和)与第二校验和进行比较。如果校验和匹配(850),则服务器***确定该数据项未被更新过,并且将指示该数据项未被更新过的回复发送(852)给客户端设备。在一些实施例中,指示该数据项未被更新过的回复是空回复(例如,除其没有包含待添加到本地数据库中的数据项或替换本地数据库中的数据项的任何数据之外,其本质上类似于指示数据项已被更新的回复)。客户端从服务器接收(854)响应,以及由于没有(856)替换数据,所以过程结束(857)。
如果校验和不匹配(858),则服务器***确定该数据项已被更新,并且将指示该数据项已被更新的回复发送(860)给客户端。应当理解的是,存在用于更新本地数据库中的数据项的多个策略:依据一些实施例,1)与该数据项相关联的所有数据均被替换,或2)仅该数据项的已被改变或为新的组分被替换/添加到该数据项。
在一些实施例中,回复包括已更新的数据项(862)和第二校验和(例如,整个已更新的数据项被发送给客户端)。客户端从服务器接收(854)响应,以及由于存在(864)替换数据(例如,替换会话),所以从服务器***接收的数据项和第二校验和被存储(866)在本地数据库中,并且替换旧的数据项(例如,先前存储的会话)和第一校验和(或客户端计算的校验和)。在网络延时很大(例如,通信花费很长时间)以及网络连接具有很高带宽(例如,能够容易地传送大量数据)的情况下,该实施例尤其有益。
在一些实施例中,在从服务器***接收已更新的数据项(或数据项组分)之后,在web应用中重新显示(867)该数据项。例如,用户可以提交查看电子邮件收件箱中的会话(例如,电子邮件消息列表)的请求。在该示例中,web应用最初显示存储在本地数据库中的会话的副本。结合显示本地存储的会话,web应用同时(或几乎同时)向服务器***发送包括本地存储的会话的校验和的请求。在该示例中,如果服务器***发送该会话的替换会话(更新数据项)或另外的电子邮件消息(新/已更新的组分),则web应用重新显示已更新的会话(或会话中的新的电子邮件)。在一些实施例中,自动更新(例如,自动重新显示)数据项。在一些实施例中,显示指示当前显示的数据项不是最新(例如,存在可用的已更新的数据项)的消息。例如,消息可以是诸如以下的消息:“已接收到该会话的新的消息,你想要显示它们吗?”在一些实施例中,当用户请求显示已更新的数据项时(例如,通过选择“重载”按钮或通过选择“显示新的消息”按钮),显示已更新的数据项(例如,重新显示数据项)。
在一些实施例中,在来自客户端的请求包括组分标识符(例如,消息标识符)的情况下,回复包括(868)一个或多个新的组分。在一些实施例中,数据项的新的组分是带有不匹配旧的数据项的组分的任何标识符的组分标识符的组分(例如,新的电子邮件已被添加到会话)。在一些实施例中,新的组分是具有与带有同一组分标识符的旧组分不同的校验和的已更新的组分(例如,会话中的电子邮件已被修改)。新的组分是与数据项相关联、但是与包括在请求中的任何组分标识符不相关联的组分。
例如,在数据项是会话以及组分是会话中的电子邮件消息的情况下,客户端向服务器发送包括会话和为该会话的组分的电子邮件消息列表(例如,第一电子邮件、第二电子邮件和第三电子邮件)的标识符的请求。在该示例中,服务器从中央数据库检索该会话,并且记下包括在该会话中的消息标识符(例如,第一电子邮件、第二电子邮件以及第三电子邮件、第四电子邮件和第五电子邮件),并且仅在回复中将新的电子邮件消息(例如,第四电子邮件和第五电子邮件)发送给客户端设备。客户端从服务器接收(854)响应,以及由于存在(864)替换数据,所以将数据项的新的组分存储(866)在本地数据库中,并且将其与本地数据库中的该数据项相关联。另外,第二校验和替换本地数据库中的第一校验和(或客户端计算的校验和)。在网络延时很大(例如,通信花费很长时间)以及网络连接具有较低带宽(例如,存在对能够被传送的数据的数量的一些限制,因此有益的是,当仅仅少数组分对于使存储在本地数据库中的数据项与存储在中央数据库中的数据项同步是必需的时,发送数据项的仅仅少数组分)的情况下,该实施例尤其有益。
在一些实施例中,在来自客户端的请求不包括组分标识符的情况下,回复包括(870)对数据项中的组分标识符的请求。在该实施例中,客户端接收(872)对与数据项相关联的组分标识符(例如,与会话相关联的消息标识符或与线程列表相关联的线程标识符)的请求。客户端从本地数据库检索(874)与数据项相关联的组分标识符,并且将该组分标识符(以及数据项的相关联的唯一标识符)发送(876)给服务器***。服务器***接收该请求,并且从中央数据库检索(878)唯一标识符所指示的数据项。
服务器***将与中央数据库中的数据项相关联的组分标识符与客户端设备发送给服务器***的组分标识符进行比较(880)。通过比较两个组分标识符集,服务器***确定(882)中央数据库中的数据项的哪些组分,如果有的话,是新的。在一个示例中,数据项是具有三个消息(例如,组分)的会话,其中会话的客户端版本仅具有前两个消息,而会话的服务器***版本具有所有三个消息。在该示例中,客户端向服务器***发送会话中的第一消息和第二消息的消息标识符。在该示例中,服务器***从中央数据库检索该会话、识别第一消息、第二消息和第三消息。在该示例中,服务器***将来自客户端的消息标识符与从中央数据库检索到的消息进行比较,并且确定第三消息是新的消息(例如,新的组分)。
在一些实施例中,在确定数据项中存在一个或多个新的组分之后,服务器***将该一个或多个新的组分与第二校验和一起发送(884)给客户端。客户端接收(886)该一个或多个新的组分和第二校验和,并且将该一个或多个新的组分和第二校验和存储(888)在本地数据库中。应当注意的是,虽然该实施例来回包括更多行程,总的来说,所述行程包括在客户端和服务器之间传送的更小量的数据。因此,在网络延时很少(例如,通信花费较短时间)以及网络连接具有较低带宽(例如,存在对能够被传送的数据的数量的限制,因此有益的是,仅仅发送数据项的发送所必需的那些组分)的情况下,该实施例尤其有益。
在一些实施例中,使用用于更新数据项的方法(例如,更新整个数据项、发送组分或发送对组分列表的请求,然后发送该组分)的组合,客户端设备确定在客户端设备和服务器***之间的连接的带宽和/或连接的延时,并且基于带宽可用性或由于网络延时的滞后时间的考虑来确定待使用的最佳方法。在一些实施例中,服务器***确定在客户端设备和服务器***之间的连接的带宽和/或连接的延时,并且基于带宽可用性或由于网络延时的滞后时间的考虑来确定待使用的最佳方法。
在此描述的方法中的每一个可以由存储在计算机可读存储介质中并且由一个或多个服务器***106或客户端设备102中的一个或多个处理器执行的指令支配。在图7A-7B和8A-8D中所示的操作中的每一个可以对应于存储在计算机存储器或计算机可读存储介质中的指令。
为了说明的目的,已参考特定实施例描述了前面的描述。然而,在上面的说明性论述并不意在穷举或将本发明限制在所公开的精确形式。根据在上面的教导,许多修改和变化是可能的。选择并且描述了实施例,以最佳说明本发明的原理和其实际应用,从而使本领域技术人员能够与适于预期的特定用途的各种修改一起最佳利用本发明和各种实施例。
Claims (28)
1.一种计算机实现的方法,包括:
在具有一个或多个处理器和存储由所述一个或多个处理器执行的程序的存储器的计算设备处:
初始化第一线程上的主应用,其中所述主应用具有与目标应用的第一同步连接;
在所述主应用通过所述第一同步连接执行在所述目标应用处的一个或多个操作之后,初始化第二线程上的助理进程,其中所述助理进程具有与所述目标应用的第二同步连接和与所述主应用的异步连接;以及
在所述助理进程处通过所述异步连接从所述主应用接收请求;以及
响应于所述请求,通过所述第二同步连接执行在所述目标应用处的一个或多个操作。
2.根据权利要求1所述的计算机实现的方法,其中所述目标应用是在所述计算设备处的数据库应用。
3.根据权利要求1或2所述的计算机实现的方法,其中通过所述第一同步连接在所述目标应用处的所述一个或多个操作进一步包括:
所述主应用在所述计算设备处显示用户界面;
所述主应用从所述数据库应用检索数据;以及
所述主应用用所检索到的数据来填充所述用户界面。
4.根据权利要求1、2或3所述的计算机实现的方法,其中通过所述第二同步连接在所述目标应用处的所述一个或多个操作进一步包括:
所述助理进程从所述主应用接收数据请求;
响应于接收所述数据请求,
所述助理进程在所述数据库应用处同步执行所述数据请求;以及
所述助理进程从所述数据库应用同步接收对所述数据请求的响应;以及
所述助理进程将对所述数据请求的所述响应异步返回给所述主应用。
5.根据权利要求4所述的计算机实现的方法,进一步包括:
如果所述响应包括所请求的数据,则所述主应用用所请求的数据来更新所述用户界面。
6.根据权利要求4或5所述的计算机实现的方法,进一步包括:
如果所述响应没有包括所请求的数据,则
所述主应用将对所请求的数据的请求异步提交给远程服务器***;以及
所述主应用从所述远程服务器***异步接收所请求的数据;
在从所述远程服务器***接收所请求的数据之后,
所述主应用将所请求的数据异步转送给所述助理进程;以及
所述助理进程用所请求的数据来同步更新所述数据库应用。
7.根据权利要求1、2、3或4所述的计算机实现的方法,其中所述目标应用是用于在所述计算设备处呈现图像的应用。
8.根据权利要求1、2、3或4所述的计算机实现的方法,其中所述目标应用是用于访问、传送或下载文件的应用。
9.根据权利要求1、2、3或4所述的计算机实现的方法,其中所述目标应用是用于执行数值计算的应用。
10.根据权利要求1、2、3或4所述的计算机实现的方法,进一步包括:所述主应用在所述助理进程被初始化之后从所述助理进程接收准备就绪通知。
11.根据权利要求1、2、3或4所述的计算机实现的方法,其中所述第一同步连接在所述助理进程被初始化并且在所述主应用和所述目标应用之间的通信单元完成之后被终止。
12.根据权利要求1、2、3或4所述的计算机实现的方法,其中所述计算设备是移动、便携式设备。
13.根据权利要求1、2、3、4、5或6所述的计算机实现的方法,其中所述主应用是单线程的。
14.一种计算机***,包括:
一个或多个处理器;
存储器;以及
一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述一个或多个程序包括:
用于初始化第一线程上的主应用的指令,其中所述主应用具有与目标应用的第一同步连接;
用于在所述主应用通过所述第一同步连接执行在所述目标应用处的一个或多个操作之后,初始化第二线程上的助理进程的指令,其中所述助理进程具有与所述目标应用的第二同步连接和与所述主应用的异步连接;以及
用于在所述助理进程处通过所述异步连接从所述主应用接收请求的指令;以及
用于响应于所述请求,通过所述第二同步连接执行在所述目标应用处的一个或多个操作的指令。
15.根据权利要求14所述的计算机***,其中所述目标应用是在所述计算设备处的数据库应用。
16.根据权利要求14或15所述的计算机***,其中用于通过所述第一同步连接执行在所述目标应用处的一个或多个操作的所述指令进一步包括:
用于在所述计算设备处显示用户界面的指令;
用于从所述数据库应用检索数据的指令;以及
用于用所检索到的数据来填充所述用户界面的指令。
17.根据权利要求14、15或16所述的计算机***,其中用于通过所述第二同步连接执行在所述目标应用处的一个或多个操作的所述指令进一步包括:
用于从所述主应用接收数据请求的指令;
用于响应于接收所述数据请求,在所述数据库应用处同步执行所述数据请求的指令;以及
用于从所述数据库应用同步接收对所述数据请求的响应的指令;以及
用于将对所述数据请求的所述响应异步返回给所述主应用的指令。
18.根据权利要求17所述的计算机***,进一步包括:
用于如果所述响应包括所请求的数据,则用所请求的数据来更新所述用户界面的指令。
19.根据权利要求17或18所述的计算机***,进一步包括:
如果所述响应没有包括所请求的数据,则
用于将对所请求的数据的请求异步提交给远程服务器***的指令;以及
用于从所述远程服务器***异步接收所请求的数据的指令;
在从所述远程服务器***接收所请求的数据之后,
用于将所请求的数据异步转送给所述助理进程的指令;以及
用于用所请求的数据来同步更新所述数据库应用的指令。
20.根据权利要求14、15、16或17所述的计算机***,进一步包括:所述主应用在所述助理进程被初始化之后从所述助理进程接收准备就绪通知。
21.根据权利要求14、15、16或17所述的计算机***,其中所述第一同步连接在所述助理进程被初始化并且在所述主应用和所述目标应用之间的通信单元完成之后被终止。
22.根据权利要求14、15、16或17所述的计算机***,其中所述计算设备是移动、便携式设备。
23.一种计算机可读存储介质和嵌入在其中的一个或多个计算机程序,所述一个或多个计算机程序包括指令,所述指令当由计算机***执行时促使所述计算机***:
初始化第一线程上的主应用,其中所述主应用具有与目标应用的第一同步连接;
在所述主应用通过所述第一同步连接执行在所述目标应用处的一个或多个操作之后,初始化第二线程上的助理进程,其中所述助理进程具有与所述目标应用的第二同步连接和与所述主应用的异步连接;以及
在所述助理进程处通过所述异步连接从所述主应用接收请求;以及
响应于所述请求,通过所述第二同步连接执行在所述目标应用处的一个或多个操作。
24.根据权利要求23所述的计算机可读存储介质,其中所述目标应用是在所述计算设备处的数据库应用。
25.根据权利要求23或24所述的计算机可读存储介质,其中通过所述第一同步连接在所述目标应用处的所述一个或多个操作进一步包括:
在所述计算设备处显示用户界面;
从所述数据库应用检索数据;以及
用所检索到的数据来填充所述用户界面。
26.根据权利要求23、24或25所述的计算机可读存储介质,其中通过所述第二同步连接在所述目标应用处的所述一个或多个操作进一步包括:
从所述主应用接收数据请求;
响应于接收所述数据请求,在所述数据库应用处同步执行所述数据请求;以及
从所述数据库应用同步接收对所述数据请求的响应;以及
将对所述数据请求的所述响应异步返回给所述主应用。
27.根据权利要求26所述的计算机可读存储介质,进一步包括:
用于如果所述响应包括所请求的数据,则用所请求的数据来更新所述用户界面的指令。
28.根据权利要求26或27所述的计算机可读存储介质,进一步包括:
如果所述响应没有包括所请求的数据,则
用于将对所请求的数据的请求异步提交给远程服务器***的指令;以及
用于从所述远程服务器***异步接收所请求的数据的指令;
在从所述远程服务器***接收所请求的数据之后,
用于将所请求的数据异步转送给所述助理进程的指令;以及
用于用所请求的数据来同步更新所述数据库应用的指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/418,444 US8260876B2 (en) | 2009-04-03 | 2009-04-03 | System and method for reducing startup cost of a software application |
US12/418,444 | 2009-04-03 | ||
PCT/US2010/029564 WO2010114963A1 (en) | 2009-04-03 | 2010-04-01 | System and method for reducing startup cost of a software application |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102449602A true CN102449602A (zh) | 2012-05-09 |
Family
ID=42237778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080023731.8A Pending CN102449602A (zh) | 2009-04-03 | 2010-04-01 | 用于降低软件应用的启动成本的***和方法 |
Country Status (8)
Country | Link |
---|---|
US (2) | US8260876B2 (zh) |
EP (1) | EP2414938A1 (zh) |
JP (1) | JP5680620B2 (zh) |
KR (1) | KR101678245B1 (zh) |
CN (1) | CN102449602A (zh) |
AU (1) | AU2010232613B2 (zh) |
CA (1) | CA2757535A1 (zh) |
WO (1) | WO2010114963A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164267A (zh) * | 2013-03-29 | 2013-06-19 | 汉柏科技有限公司 | 无锁消息队列实现方法 |
CN103412740A (zh) * | 2012-06-01 | 2013-11-27 | 微软公司 | 多顶层用户界面显示 |
CN112559070A (zh) * | 2020-12-09 | 2021-03-26 | 北京展心展力信息科技有限公司 | 应用程序启动时的初始化方法、装置、电子设备及介质 |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8725793B2 (en) * | 2009-04-03 | 2014-05-13 | Google Inc. | Architectural pattern for persistent web application design |
EP2247078B1 (en) * | 2009-04-30 | 2016-03-02 | BlackBerry Limited | Method of maintaining data collections in a mobile communication device |
EP2336967B1 (fr) * | 2009-12-15 | 2019-06-12 | Orange | Messagerie personnalisée sur encarts web. |
US9268664B2 (en) | 2010-04-06 | 2016-02-23 | Paypal, Inc. | Method and system for synchronous and asynchronous monitoring |
US8244698B2 (en) * | 2010-07-23 | 2012-08-14 | Google Inc. | Encoding a schema version in table names |
JP5840525B2 (ja) * | 2012-02-16 | 2016-01-06 | シャープ株式会社 | 情報処理装置 |
EP2650799A1 (en) * | 2012-04-11 | 2013-10-16 | Bigpoint GmbH | Online game system and method |
US8990818B2 (en) * | 2012-06-01 | 2015-03-24 | Microsoft Technology Licensing, Llc | Multiple top level user interface displays |
US9405602B1 (en) * | 2012-06-25 | 2016-08-02 | Google Inc. | Method for application notification and tasking |
TWI477978B (zh) * | 2012-12-07 | 2015-03-21 | Inst Information Industry | 資料同步系統以及資料同步方法 |
US10348821B2 (en) * | 2012-12-21 | 2019-07-09 | Dropbox, Inc. | Prioritizing structural operations and distributing changes in a synced online content management system |
US9614932B2 (en) * | 2013-03-14 | 2017-04-04 | Microsoft Technology Licensing, Llc | Managing and implementing web application data snapshots |
US10656800B2 (en) | 2013-03-29 | 2020-05-19 | Microsoft Technology Licensing, Llc | Visual configuration and activation |
US10452222B2 (en) | 2013-05-29 | 2019-10-22 | Microsoft Technology Licensing, Llc | Coordination of system readiness tasks |
US9596196B1 (en) * | 2013-10-17 | 2017-03-14 | Amazon Technologies, Inc. | Message grouping |
US20160218873A1 (en) * | 2015-01-22 | 2016-07-28 | Vermont Secure Computing Inc. | Method and system for securely storing and using private cryptographic keys |
CA3009817A1 (en) | 2015-12-29 | 2017-07-06 | Tao Tao | Systems and methods for caching task execution |
CN107491346B (zh) * | 2016-06-12 | 2021-03-12 | 阿里巴巴集团控股有限公司 | 一种应用的任务处理方法、装置及*** |
US10706069B2 (en) | 2016-06-30 | 2020-07-07 | Facebook, Inc. | Techniques for replication of a client database to remote devices |
US20180013714A1 (en) * | 2016-07-06 | 2018-01-11 | Facebook, Inc. | Techniques for messaging using replication of a client database |
JP6971578B2 (ja) * | 2017-01-23 | 2021-11-24 | キヤノン株式会社 | 情報処理装置及びその制御方法 |
US11550565B1 (en) * | 2017-07-21 | 2023-01-10 | State Farm Mutual Automobile Insurance Company | Method and system for optimizing dynamic user experience applications |
JP7080033B2 (ja) * | 2017-11-07 | 2022-06-03 | 株式会社日立製作所 | タスク管理システム、タスク管理方法、及びタスク管理プログラム |
CN109359256A (zh) * | 2018-09-29 | 2019-02-19 | 北京城市网邻信息技术有限公司 | 页面加载方法、装置、设备及存储介质 |
Family Cites Families (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5453992A (en) * | 1993-08-02 | 1995-09-26 | Texas Instruments Incorporated | Method and apparatus for selectable parallel execution of test operations |
US5913060A (en) * | 1995-10-11 | 1999-06-15 | Citrix Systems, Inc. | Method for deadlock avoidance in a distributed process system using a synchronous procedure call |
JPH1063524A (ja) * | 1996-04-29 | 1998-03-06 | Fujitsu Ltd | ネットワーク資源共用方式 |
FI108478B (fi) * | 1998-01-21 | 2002-01-31 | Nokia Corp | Sulautettu jõrjestelmõ |
JP2000047887A (ja) * | 1998-07-30 | 2000-02-18 | Toshiba Corp | 投機的マルチスレッド処理方法および投機的マルチスレッド処理装置 |
US6633547B1 (en) * | 1999-04-29 | 2003-10-14 | Mitsubishi Electric Research Laboratories, Inc. | Command and control transfer |
US6964008B1 (en) | 1999-11-12 | 2005-11-08 | Maxtor Corporation | Data checksum method and apparatus |
US20010049677A1 (en) * | 2000-03-30 | 2001-12-06 | Iqbal Talib | Methods and systems for enabling efficient retrieval of documents from a document archive |
US6704024B2 (en) | 2000-08-07 | 2004-03-09 | Zframe, Inc. | Visual content browsing using rasterized representations |
DE10047216A1 (de) | 2000-09-23 | 2002-04-11 | Philips Corp Intellectual Pty | Ein Verfahren zur Erkennung von Schreibkonflikten in replizierten Datenbanken ohne Speicheroverhead |
US8234338B1 (en) * | 2001-04-20 | 2012-07-31 | Microsoft Corporation | System and method for reliable message delivery |
JP3823040B2 (ja) | 2001-10-12 | 2006-09-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | データ記憶装置、データ処理装置、書き込み要求の実行順序を最適化する方法、データ処理方法およびハード・ディスク・ドライブ |
TW573257B (en) | 2002-03-29 | 2004-01-21 | Hon Hai Prec Ind Co Ltd | Automatic data download system and method |
US7366894B1 (en) * | 2002-06-25 | 2008-04-29 | Cisco Technology, Inc. | Method and apparatus for dynamically securing voice and other delay-sensitive network traffic |
US7152242B2 (en) | 2002-09-11 | 2006-12-19 | Enterasys Networks, Inc. | Modular system for detecting, filtering and providing notice about attack events associated with network security |
US7412532B2 (en) * | 2002-12-13 | 2008-08-12 | Aol Llc, A Deleware Limited Liability Company | Multimedia scheduler |
US7487502B2 (en) * | 2003-02-19 | 2009-02-03 | Intel Corporation | Programmable event driven yield mechanism which may activate other threads |
US7092703B1 (en) * | 2003-03-24 | 2006-08-15 | Sprint Spectrum L.P. | Method and system for accessing a universal message handler on a mobile device |
US20050017675A1 (en) * | 2003-07-16 | 2005-01-27 | Potter Hsieh | Hub Structure having a charging function |
JP4243571B2 (ja) * | 2003-08-05 | 2009-03-25 | パナソニック株式会社 | 放送受信装置 |
US7831693B2 (en) * | 2003-08-18 | 2010-11-09 | Oracle America, Inc. | Structured methodology and design patterns for web services |
US8432562B2 (en) * | 2004-02-17 | 2013-04-30 | Ricoh Company, Ltd. | Image processing apparatus, method, program, and computer readable recording medium for controlling operation switching and displaying at occurrence of error conditions |
JP2005301791A (ja) | 2004-04-14 | 2005-10-27 | Nec Corp | 移動通信端末および移動通信端末のアプリケーション起動制御方法 |
JP2006163714A (ja) * | 2004-12-06 | 2006-06-22 | Fuji Photo Film Co Ltd | 撮影装置 |
US8230423B2 (en) | 2005-04-07 | 2012-07-24 | International Business Machines Corporation | Multithreaded processor architecture with operational latency hiding |
WO2006112562A1 (en) * | 2005-04-19 | 2006-10-26 | Sk Telecom Co., Ltd. | Hand over method for dual band/dual mode mobile communication terminal |
US7594003B2 (en) | 2005-08-02 | 2009-09-22 | Aol Llc | Client/server web application architectures for offline usage, data structures, and related methods |
US8873539B2 (en) * | 2005-09-06 | 2014-10-28 | Nokia Corporation | Multimedia call control mechanism and communication equipment using the same |
US8595744B2 (en) * | 2006-05-18 | 2013-11-26 | Oracle America, Inc. | Anticipatory helper thread based code execution |
US7792792B2 (en) | 2006-05-22 | 2010-09-07 | Microsoft Corporation | Synchronizing structured web site contents |
US7769144B2 (en) | 2006-07-21 | 2010-08-03 | Google Inc. | Method and system for generating and presenting conversation threads having email, voicemail and chat messages |
US20080155118A1 (en) * | 2006-12-21 | 2008-06-26 | International Business Machines Corporation | Really simple syndication (rss) feed customization |
EP1962192A1 (en) | 2007-02-21 | 2008-08-27 | Deutsche Telekom AG | Method and system for the transparent migration of virtual machine storage |
US20080247278A1 (en) * | 2007-03-07 | 2008-10-09 | Jason Walker | Programmable watch winder |
US8244907B2 (en) | 2007-10-16 | 2012-08-14 | International Business Machines Corporation | Browser-based logoff from distributed and federated environments |
US8045922B2 (en) * | 2007-11-23 | 2011-10-25 | Texas Instruments Incorporated | Apparatus for and method of bluetooth and wireless local area network coexistence using a single antenna in a collocated device |
US20100008338A1 (en) * | 2008-07-14 | 2010-01-14 | Texas Instruments Incorporated | High transmission power using shared bluetooth and wireless local area network front end module |
US8819560B2 (en) | 2008-08-04 | 2014-08-26 | International Business Machines Corporation | Dispatching events to multiple browser windows/tabs using a single connection |
US9792384B2 (en) | 2009-02-26 | 2017-10-17 | Red Hat, Inc. | Remote retreival of data files |
US8301996B2 (en) * | 2009-03-19 | 2012-10-30 | Microsoft Corporation | Annotating images with instructions |
US8218454B2 (en) * | 2009-09-21 | 2012-07-10 | At&T Intellectual Property I, L.P. | Methods and apparatus to implement scalable routing in network communication systems |
US20110178940A1 (en) * | 2010-01-19 | 2011-07-21 | Matt Kelly | Automated assessment center |
US10395031B2 (en) * | 2010-12-30 | 2019-08-27 | Verisign, Inc. | Systems and methods for malware detection and scanning |
US10096033B2 (en) * | 2011-09-15 | 2018-10-09 | Stephan HEATH | System and method for providing educational related social/geo/promo link promotional data sets for end user display of interactive ad links, promotions and sale of products, goods, and/or services integrated with 3D spatial geomapping, company and local information for selected worldwide locations and social networking |
US8965897B2 (en) * | 2012-02-29 | 2015-02-24 | International Business Machines Corporation | Intelligent product feedback analytics tool |
-
2009
- 2009-04-03 US US12/418,444 patent/US8260876B2/en not_active Expired - Fee Related
-
2010
- 2010-04-01 EP EP10712644A patent/EP2414938A1/en not_active Withdrawn
- 2010-04-01 WO PCT/US2010/029564 patent/WO2010114963A1/en active Application Filing
- 2010-04-01 JP JP2012503690A patent/JP5680620B2/ja not_active Expired - Fee Related
- 2010-04-01 KR KR1020117026159A patent/KR101678245B1/ko active IP Right Grant
- 2010-04-01 CA CA2757535A patent/CA2757535A1/en not_active Abandoned
- 2010-04-01 AU AU2010232613A patent/AU2010232613B2/en not_active Ceased
- 2010-04-01 CN CN201080023731.8A patent/CN102449602A/zh active Pending
-
2012
- 2012-08-07 US US13/569,002 patent/US9086914B2/en active Active
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103412740A (zh) * | 2012-06-01 | 2013-11-27 | 微软公司 | 多顶层用户界面显示 |
CN103412740B (zh) * | 2012-06-01 | 2016-09-14 | 微软技术许可有限责任公司 | 多顶层用户界面显示 |
CN103164267A (zh) * | 2013-03-29 | 2013-06-19 | 汉柏科技有限公司 | 无锁消息队列实现方法 |
CN112559070A (zh) * | 2020-12-09 | 2021-03-26 | 北京展心展力信息科技有限公司 | 应用程序启动时的初始化方法、装置、电子设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
US20120303756A1 (en) | 2012-11-29 |
US20100257229A1 (en) | 2010-10-07 |
WO2010114963A8 (en) | 2011-11-17 |
JP2012523048A (ja) | 2012-09-27 |
EP2414938A1 (en) | 2012-02-08 |
US8260876B2 (en) | 2012-09-04 |
KR20120005488A (ko) | 2012-01-16 |
WO2010114963A1 (en) | 2010-10-07 |
AU2010232613B2 (en) | 2015-11-19 |
AU2010232613A1 (en) | 2011-11-17 |
JP5680620B2 (ja) | 2015-03-04 |
CA2757535A1 (en) | 2010-10-07 |
US9086914B2 (en) | 2015-07-21 |
KR101678245B1 (ko) | 2016-11-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102449602A (zh) | 用于降低软件应用的启动成本的***和方法 | |
CN102449628A (zh) | 用于持久性Web应用设计的架构模式 | |
US11341158B2 (en) | Cluster-based business process management through eager displacement and on-demand recovery | |
EP3488357A1 (en) | Systems and methods for responding to an online user query | |
US20020052952A1 (en) | Service execution method and apparatus | |
CN111259022B (zh) | 一种信息同步方法、同步***、计算机设备和介质 | |
CN110740155B (zh) | 分布式***中的请求处理方法及装置 | |
US8010520B2 (en) | Viewing time of search result content for relevancy | |
CN105373563B (zh) | 数据库切换方法及装置 | |
JP4353036B2 (ja) | リモート接続システム、サーバコンピュータ、リモート接続方法及びプログラム | |
US20120030021A1 (en) | Selecting advertisements using same session queries | |
US8666954B2 (en) | Reduced bandwidth cache coherency via checksum exchange | |
CN113476853A (zh) | 交互任务的数据处理方法、装置、电子设备、存储介质 | |
CN115473866B (zh) | 一种会话管理方法、***、设备及存储介质 | |
CN113849751A (zh) | 数据缓存方法、装置、电子设备和计算机可读存储介质 | |
CN115695316A (zh) | 后端接口访问方法、装置、计算机设备及可读存储介质 | |
CN115129435A (zh) | 一种任务管理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120509 |