发明内容
本发明公开了一种WEB平台数据缓存的方法,包括:
客户端模块从服务端模块网页的主体框架、无需缓存的数据单元内容、网页各数据单元属性信息;所述数据单元属性主要包括数据单元是否可供客户端模块缓存、更新级别、版本等信息;
客户端模块根据所述网页各数据单元属性信息分析所述网页中是否有需要缓存的数据单元;
如果网页中存在需要缓存数据单元,判断客户端模块本地是否存在所述需要缓存的数据单元;
如果客户端模块本地不存在需要缓存的数据单元,从服务端模块请求获取所述需要缓存的数据单元,进行本地存储,并生成所述数据单元的版本信息;
如果本地存在所述需要缓存的数据单元,判断该需要缓存的数据单元的属性信息中的更新级别;
根据所述更新级别对所述需要缓存的数据单元进行获取。
优选地,所述判断该需要缓存的数据单元的属性信息中的更新级别中,所述更新级别包括从不更新、偶尔需要更新、经常需要更新;所述根据所述更新级别对所述需要缓存的数据单元进行获取进一步为:如果所述需要缓存的数据单元的更新级别为从不更新,每次访问网页时,客户端模块从本地读取该数据单元进行加载;如果该数据单元的更新级别为偶尔需要更新,在当次客户端模块开机周期中首次访问目标网页时,从服务端模块获取该数据单元的版本信息,用该版本信息与本地存储的该数据单元的版本信息进行对比,如果版本信息不同,则从服务端请求该数据单元内容,并替换本地已存储的数据单元;如果该数据单元的更新级别为经常需要更新,在客户端模块每次请求访问该网页时,都将对从服务端获取的版本信息与本地存储的版本信息进行比对,如果版本信息不同,则从服务端请求该数据单元内容,并替换本地已存储的数据单元。
优选地,还包括:客户端模块加载数据单元到从服务端请求获取的网页的主体框架内,并和无需缓存的数据单元内容组成完整的网页展示。
优选地,所述客户端模块根据所述网页各数据单元属性信息分析所述网页中是否有需要缓存的数据单元进一步为:客户端模块根据网页各数据单元属性信息逐个分析网页中所有数据单元属性,判断网页中是否有需要缓存的数据单元。
优选地,还包括:根据WEB网站服务提供商在发布或更新web资源时的指令,设置数据单元属性。
优选地,客户端模块从服务端模块网页的主体框架、无需缓存的数据单元内容、网页各数据单元属性信息中,客户端发送请求时采用Ajax页面无刷新机制。
优选地,如果版本信息不同,则从服务端请求该数据单元内容,并替换本地已存储的数据单元后,更新数据单元的版本。
本发明还公开了一种WEB平台数据缓存的***,由两部分组成:服务端模块和客户端模块;
所述服务端模块包括网络服务子模块、后台数据存储子模块、页面资源设置子模块、页面数据输出子模块;
所述网络服务子模块,用于为客户端模块提供网络服务;
所述后台数据存储子模块,与所述网络服务子模块相连,用于存储从服务端模块获取的需要缓存的数据单元及数据单元相关属性信息;
所述页面资源设置子模块,与后台数据存储子单元相连,用于对于网页中的数据单元属性进行设置,并用于根据所述属性设置控制引导数据单元与客户端模块之间的交互;所述数据单元的属性包括id、是否缓存开关、更新级别、版本信息;
页面数据输出子模块,与所述页面资源设置子模块相连,用于根据客户端模块的连接请求以及页面资源设置子模块对网页中的数据单元属性设置情况,生成页面的主框架以及不需要客户端缓存的数据资源,并通过网络将其返回至客户端模块;
客户端模块包括数据加载子模块、数据控制子模块、数据存储子模块、数据展示子模块等四个子模块;
所述数据加载子模块,与数据控制子模块相连,用于获取服务端返回的网页的主体框架、无需缓存的数据单元内容、需要缓存的数据单元、网页各数据单元属性信息等,并将其交由数据控制子模块;
数据存储子模块,用于对WEB***的网页需要缓存的数据单元进行本地化存储,并存储数据单元的版本信息;
数据控制子模块,用于为不同的网站开辟不同的存储空间,供数据控制子模块进行数据单元的存储和读取;
数据控制子模块,与数据加载子模块、数据存储子模块、数据展示子模块相连,主要用于根据数据加载子模块获取网页各数据单元属性信息,分析网页中是否有需要缓存的数据单元;并用于判断本地是否存在所述需要缓存数据单元和需要缓存数据单元的更新级别;并根据分析判断结果控制数据加载子模块对网页数据的加载,控制数据存储子模块对需要缓存数据的存储,控制数据展示子模块对网页数据的展示;
数据展示子单元,与数据控制子模块快和数据加载子模块相连,用于加载数据单元到从服务端请求获取的网页的主体框架内,并和无需缓存的数据单元内容组成完整的网页展示。
本发明实现了对一部分不常更新的网站资源的可配置缓存,减少了web访问,节约了访问资源和提高了访问时效性。
具体实施方式
本发明的一个实施例公开了一种WEB平台数据缓存的方法,如图1所示。主要包括如下步骤:
步骤1、根据WEB网站服务提供商在发布或更新web资源时的指令,设置数据单元属性。
这里,数据单元属性主要包括数据单元的是否可供客户端模块缓存、更新级别、版本等信息。当数据单元被更新时,其版本信息被更新。
本步骤中,web资源为网页中的各种数据单元,包括单体资源,如:图片、flash文档、js文档、css文档、xml文档等;也包括混合资源,如:table(表格,HTML标签,用规范化的行和列为HTML文档中的数据内容提供结构的元素)、div(层,HTML标签,用来为HTML文档内大块(block-level)的内容提供结构和背景的元素)等,混合资源中一般至少包括两种以上的单体资源。
另外,服务端网页中的各种数据资源存在于网页的主体框架内,服务端网页的主体框架如同树干,网页的每个数据单元如同树叶一般依附在树干上。
每个数据单元均包含两部分信息:属性和内容。数据单元的属性包括id、是否缓存开关、更新级别、版本信息等,属性由服务端页面资源设置子模块进行设置,在客户端控制子模块中进行读取和分析。数据单元的内容由其属性决定是否在客户端进行缓存以及如何更新,数据单元的内容将直接体现在用户的浏览器界面中。
在很多大型的WEB网站中,所有的网站资源按其更新频率基本可以划分为以下几种更新级别:从不更新、偶尔更新、经常更新、时时更新。越时时更新的信息,其缓存的必要性越小,时时更新类的资源一般不需要缓存,例如:实时新闻、股票信息、论坛帖子等等,要求每次客户端发送访问请求都直接连接服务端获取网页资源;而其他几类WEB网站服务提供商可以根据实际情况对网页的各个数据单元进行设置,通过客户端的缓存来优化网页的访问速度。
数据单元的版本信息可以定义为一个特殊的字符串,该字符串由数字组成,也可以包含若干字母,具体格式由WEB网站服务提供商自己定义,例如:v.2010.0012,表示该数据单元为2010年发布的第12次______发布的版本。一般说来,数值越大表示该版本越新。
步骤2:客户端模块从服务端模块网页的主体框架、无需缓存的数据单元内容、网页各数据单元属性信息。
本步骤中,客户端模块请求访问服务端模块的网页数据,并接收加载服务端模块响应请求后生成网页的主体框架、无需缓存的数据单元内容、网页各数据单元属性信息。
步骤3:客户端模块根据网页各数据单元属性信息分析网页中是否有需要缓存的数据单元。
本步骤中,客户端后台控制子模块根据网页各数据单元属性信息逐个分析该网页中所有的数据单元属性,包括判断网页中是否有需要缓存的数据单元。
步骤4:如果网页中存在需要缓存数据单元,则判断本地是否存在所述需要缓存数据单元。
步骤5:如果客户端模块本地不存在需要缓存的数据单元,从服务端模块请求获取该需要缓存的数据单元,并进行本地存储,并生成该数据单元的版本信息。
本步骤中,如果本地不存在需要缓存的数据单元,客户端数据控制子模块将通过加载子模块发送请求,以连接服务端获取该数据单元,并存储到客户端存储子模块中,同时生成该数据单元的版本信息。
步骤6:如果本地存在需要缓存的数据单元,则进一步判断该需要缓存的数据单元的属性中的更新级别。
根据更新级别,分三种情况,通过以下7、8、9步骤进行执行。
步骤7:如果该需要缓存的数据单元的更新级别为从不更新,每次访问网页时,客户端模块从本地读取该数据单元进行加载。
本步骤中,每次访问该页面时,都不连接服务器获取该资源,而只读取客户端本地数据存储子模块的数据。
本步骤中,比如网页的Banner(网页的横幅广告或是大标题)、Js文档、Css文档等等,此类资源在网站服务开展后一般不会再更新。这种情况下,一旦该资源在客户端数据存储子模块已经保存,那么当用户访问页面时即可不连接服务端获取该资源,而只读取客户端本地存储的数据即可达到目的。
步骤8:如果该数据单元的更新级别为偶尔需要更新,在当次客户端模块开机周期中首次访问目标网页时,从服务端模块获取该数据单元的版本信息,用该版本信息与本地存储的该数据单元的版本信息进行对比,如果版本信息不同,则从服务端请求该数据单元内容,并替换本地已存储的数据单元。
本步骤的具体操作为:则客户端数据控制子模块将利用加载子模块发送连接请求,通过网络传递该数据单元的id至服务端,而服务端根据id参数生成该数据单元的内容,并返回至客户端。客户端加载子模块获取了服务端返回的数据单元内容,通过客户端控制子模块,删除该数据单元的历史版本,并保存新版本的数据单元内容到客户端存储子模块中,以便其他时候读取。
本步骤中,比如一些在本WEB网站投放的广告信息、某些公告类信息等等,此类资源更新频率比较低,但是隔一段时间还是需要更新的。这种情况下,在本次开机周期中首次访问本网页时才比对网页数据单元与客户端本地存储子模块的资源版本信息,而其他时候打开该网站都不进行比对而直接调取本地存储的资源。开机周期是指客户端个人电脑从开启机器到关闭机器的这段时间。
步骤9:如果该数据单元的更新级别为经常需要更新,那么在客户端模块每次请求访问该网页时,都将对从服务端获取的版本信息与本地存储的版本信息进行比对,如果版本信息不同,则从服务端请求该数据单元内容,并替换本地已存储的数据单元。
比如一些不要求实时更新的资讯、视频信息等。这种情况下,要求每次访问该网页都比对网页的数据单元与客户端本地存储子模块的资源版本信息。
客户端模块加载数据单元到从服务端请求获取的网页的主体框架内,并和无需缓存的数据单元内容组成完整的网页,一起展示。
本步骤中,当服务端模块的数据单元的版本和客户端模块本地存储子模块中取出的数据单元版本一致时,则客户端控制子模块将根据该数据单元的id和版本信息直接读取本地存储子模块所存储的数据单元的内容进行加载。
当服务端资源版本较之客户端本地存储子模块的数据单元为新的时,则客户端加载从服务端新获取的数据单元。
较佳的,本实施例中浏览器展示了网页的主体框架和无须缓存的数据单元,而那些须缓存的数据单元中有一部分可能需要后台连接服务端进行加载,此操作可能需要若干时间,因此这些网页数据单元可以显示诸如“正在加载数据,请等待…”等使得人机交互更加友好。
较佳的,本实施例中客户端数据控制子模块将通过加载子模块发送请求时可以采用Ajax页面无刷新机制的技术进行与服务端模块进行交互,这样既可以减轻对网络和服务器的负担,提高处理的效率,同时也无需打断用户访问页面数据的交互流程。
较佳的,本实施例中,当客户端通过数据加载子模块进行数据单元的请求时,页面将会创建一个XmlHttpRequest对象,向服务器发送参数,以及由该对象产生一个接收服务端传递过来的数据的XmlDoc对象,客户端数据加载子模块通过Dom来解析XmlDoc对象并将进行进一步处理。
较佳的,本实施例中服务端生成数据单元时可以将该数据单元的文本内容按UniCode格式进行编码(也可采用UTF-8等编码格式),以便客户端在解析过程中因为某些特殊的字符而产生异常。
通过本实施例的描述,本发明方案,避免了传统的浏览器缓存技术对于同类型的网页资源要么全部加载要么全部不加载的“一刀切”的缺陷,通过对不经常更新的数据资源进行缓存,实现服务端的WEB网站服务提供商能够自主的控制其网页资源是否在客户端进行缓存,以达到减少服务端和客户端之间的交互,提高用户的界面访问速度的目的。
如图2所示,本发明第二个实施例提供了一种Web平台数据缓存的***。***主要由两部分组成:服务端模块和客户端模块。
其中,服务端模块包括网络服务子模块、后台数据存储子模块、页面资源设置子模块、页面数据输出子模块等四个子模块。
网络服务子模块,为在网络环境下运行的、面向服务的、基于分布式程序的软件模块,采用HTTP和XML等互联网通用标准,使得人们可以在不同的地方通过不同的终端设备访问WEB上的数据,用于为客户端模块提供网络服务。
后台数据存储子模块,与网络服务子模块相连,为按照数据结构来组织、存储和管理数据的仓库。可以为网络数据存储数据库,如sqlserver、mysql数据库等。用于存储从服务端模块获取的需要缓存的数据单元及数据单元相关属性信息。
页面资源设置子模块,与后台数据存储子单元相连,用于WEB网站服务提供商在发布web资源时对于网页中的数据单元属性进行设置,数据单元的属性包括id、是否缓存开关、更新级别、版本信息等。并用于控制引导该数据单元与客户端模块之间的交互。
网页中的数据单元可为网页的单体资源,如:图片、flash文档、js文档、css文档、xml文档等等;也可以为混合资源,如:数据表格(table)、层(div)等,混合资源中一般至少包括两种以上的单体资源。
页面数据输出子模块,与页面资源设置子模块相连,根据客户端模块的连接请求以及页面资源设置子模块对网页中的数据单元属性设置情况,来生成页面的数据。页面资源被划分为很多单元,而且每个数据单元具有独立的id、是否缓存开关、更新级别以及版本信息等属性。页面数据输出子模块最终生成页面的主框架以及所有不需要客户端缓存的数据资源,并通过网络将其返回至客户端模块。
客户端模块包括数据加载子模块、数据控制子模块、数据存储子模块、数据展示子模块等四个子模块。其中:
数据加载子模块,与数据控制子模块相连,主要用于发送客户端模块请求,连接服务端模块、获取服务端返回的网页的主体框架、无需缓存的数据单元内容、需要缓存的数据单元、网页各数据单元属性信息等,并将其交由数据控制子模块进行分析。
数据存储子模块,用于对WEB***的网页需要缓存的数据单元进行本地化存储,并存储数据单元的版本信息,以提高网页的访问效率。
数据控制子模块为不同的网站开辟不同的存储空间,便于数据控制子模块进行数据单元的存储和读取。对于混合资源的数据单元将开辟独立的空间用于存储。如:对于一个包含图片以及链接的table(数据表格)。
数据控制子模块,与数据加载子模块、数据存储子模块、数据展示子模块相连,主要用于根据数据加载子模块获取网页各数据单元属性信息,分析网页中是否有需要缓存的数据单元;并用于判断本地是否存在所述需要缓存数据单元和需要缓存数据单元的更新级别;并根据分析判断结果控制数据加载子模块对网页数据的加载,控制数据存储子模块对需要缓存数据的存储,控制数据展示子模块对网页数据的展示。
数据控制子模块与其他子模块的主要交互为:一,控制数据加载子模块连接服务端模块发送网页访问的请求;二,分析服务端返回的网页数据文件;三、根据需要缓存的数据单元的id在客户端数据存储子模块中创建独立的存储空间;四、比对数据单元的版本信息;五、将数据单元存储至数据存储子模块中;六、将数据单元从数据存储子模块中读取出来;七、控制网页数据或数据单元在浏览器中进行显示。
数据展示子单元,与数据控制子模块快和数据加载子模块相连,用于加载数据单元到从服务端请求获取的网页的主体框架内,并和无需缓存的数据单元内容组成完整的网页,一起展示。用户最终浏览的结果应为完整的页面,包括:服务端返回的无需缓存的数据单元,以及客户端数据存储子模块中读取的本地存储的数据单元。
另外,客户端模块和服务端模块可通过互联网通道相连,客户端模块的各个功能可通过一般计算机终端的IE等多种浏览器软件运行实现。服务端模块一般运行于提供各种网络服务的服务器,其各模块的功能一般在服务器上运行实现。
在上述描述中,数据是指用户所要浏览的网页内容。
通过本实施例的描述,本发明方案,避免了传统的浏览器缓存技术对于同类型的网页资源要么全部加载要么全部不加载的“一刀切”的缺陷。在现有技术框架的基础上增加了服务端的页面资源设置子模块和客户端的数据控制子模块,实现服务端的WEB网站服务提供商能够自主的控制其网页资源是否在客户端进行缓存,以达到减少服务端和客户端之间的交互,提高用户的界面访问速度的目的。
一般目前的浏览器缓存技术,由于浏览器存在于客户端的局限性,无法得知用户想要访问的网页哪些是需要实时更新,哪些只需保存在客户端本地缓存区中即可的,并且在缓存数据的时候,只能根据网页资源的类型“一刀切”,即某类型的网页资源要么全部缓存,要么全部不缓存,不够灵活。而通过本方案的实施,服务端WEB网站服务提供商可以介入其网站资源在各个客户端中的合理保存行为中,毕竟只有WEB网站服务提供商才能准确的指明各个网页资源是否缓存以及更新级别。因此本方案不仅能大大减少了客户端与服务端模块的交互的数据流量,减轻了数据在传输过程给网络和服务器带来的负担,并且不影响用户在客户端执行浏览和处理数据,缩短用户等待数据连接服务器加载完整网页的时间,提高了用户处理的效率。
上述实施例仅用来进一步说明本发明的一种WEB平台数据缓存的方法及其装置,但本发明并不局限于实施例,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均落入本发明技术方案的保护范围内。