具体实施方式
为了使本技术领域的人员更好地理解本说明书一个或多个中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一个或多个一部分实施例,而不是全部的实施例。基于本说明书一个或多个中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书一个或多个保护的范围。
本说明书一个或多个实施例提供了一种资源更新方法及装置,结合页面资源之间的逆向引用索引,确定直接或间接引用目标页面资源的至少一个关联页面资源,进而对该关联页面资源自身的版本信息以及该关联页面资源包含的引用信息中涉及的页面资源的版本信息进行更新,这样能够实现更细粒度的对页面资源进行更新管控,从而提高页面资源的更新效率和准确度。
图1为本说明书一个或多个实施例提供的资源更新方法的第一种流程示意图,图1中的方法能够由图1中的应用服务器执行,如图1所示,该方法至少包括以下步骤:
S101,在目标页面资源发生变更时,获取预先构建的与该目标页面资源相关的逆向引用索引;
其中,上述页面资源包括将动态页面以静态页面的形式发布时所涉及的静态资源,例如,页面资源可以是图片、视频、html页面模板、css样式表等等,上述逆向引用索引用于表征各页面资源之间的逆向引用关系,若通过版本信息标记页面资源,当目标页面资源发生变更时,例如,目标页面资源的具体内容被修改,对应的该目标页面资源的版本信息也发生变更,此时需要获取预先构建的针对涉及该目标页面资源的业务功能的逆向引用索引;
S102,根据获取到的逆向引用索引,确定目标页面资源的关联页面资源,其中,该关联页面资源直接或间接引用目标页面资源;
例如,当某一电商类网站中的首页页面上的宣传图片发生变更时,获取与该宣传图片相关的逆向引用索引,再根据该逆向引用索引确定直接或间接引用该宣传图片的关联页面资源;
其中,上述逆向引用索引可以是由多条逆向引用分支构成的,每个逆向引用分支包含具有直接引用关系的一个从页面资源(即被引用页面资源)和至少一个主页面资源(即引用页面资源),主页面资源的代码包含从页面资源的版本信息,达到主页面资源引用从页面资源的目的;
具体的,在多条逆向引用分支中,查找目标页面资源为从页面资源的目标逆向引用分支,该目标逆向引用分支中的主页面资源属于目标页面资源的关联页面资源1,且该关联页面资源1与目标页面资源具有直接引用关系;
另外,关联页面资源1在另一个逆向引用分支可以是从页面资源,即该关联页面资源1被另一个逆向引用分支中的主页面资源所引用;
进一步的,在多条逆向引用分支中,查找关联页面资源1为从页面资源的目标逆向引用分支,该目标逆向引用分支中的主页面资源属于目标页面资源的关联页面资源2,且该关联页面资源2与目标页面资源具有间接引用关系;
同样的,关联页面资源2在又一个逆向引用分支可以是从页面资源,即该关联页面资源2被又一个逆向引用分支中的主页面资源所引用;
更进一步的,在多条逆向引用分支中,查找关联页面资源2为从页面资源的目标逆向引用分支,该目标逆向引用分支中的主页面资源属于目标页面资源的关联页面资源3,且该关联页面资源3与目标页面资源具有间接引用关系,依次类推,直到在多条逆向引用分支中不存在关联页面资源n为从页面资源的目标逆向引用分支、或者以关联页面资源n为从页面资源的逆向引用分支的主页面资源为目标页面资源(即出现引用环路问题);
也就是说,在与发生变更的目标页面资源相关的逆向引用索引中,通过遍历该逆向引用索引中的各逆向引用分支,可以确定出直接或间接引用目标页面资源的至少一个关联页面资源,即关联页面资源1、关联页面资源2…、关联页面资源n;
S103,根据目标页面资源的最新的版本信息,更新确定出的关联页面资源;
其中,由于当页面资源发生变更时,对应的该页面资源的版本信息也发生变更,将该页面资源的版本信息更新为最新的版本信息,并且通过在主页面资源的代码中写入从页面资源的版本信息,达到主页面资源引用从页面资源的目的,因此,需要更新关联页面资源的代码中包含的页面资源的版本信息,以及更新关联页面资源的版本信息,从而实现对页面资源的版本更新控制;
具体的,若目标页面资源的至少一个关联页面资源包括:关联页面资源1、关联页面资源2…、关联页面资源n,根据目标页面资源的最新的版本信息,更新确定出的关联页面资源的过程,具体为:
由于目标页面资源被关联页面资源1所引用,关联页面资源1的代码中包含目标页面资源的版本信息,因此,若目标页面资源的版本信息发生变更,则需要将关联页面资源1的代码中包含的目标页面资源的版本信息进行更新,同时,还需要变更关联页面资源1的版本信息;
进一步的,由于关联页面资源1又被关联页面资源2所引用,关联页面资源2的代码中包含关联页面资源1的版本信息,因此,若关联页面资源1的版本信息发生变更,则需要将关联页面资源2的代码中包含的关联页面资源1的版本信息进行更新,同时,还需要变更关联页面资源2的版本信息;
更进一步的,由于关联页面资源2又被关联页面资源3所引用,关联页面资源3的代码中包含关联页面资源2的版本信息,因此,若关联页面资源2的版本信息发生变更,则需要将关联页面资源3的代码中包含的关联页面资源2的版本信息进行更新,同时,还需要变更关联页面资源3的版本信息,依次类推,直到关联页面资源n的版本信息变更完成,以达到重建静态资源链接的效果,并且在应用服务器只需要更新与变更的页面资源相关的关联页面资源。
在关联页面资源更新后,当客户端中的浏览器访问更新后的页面资源时,基于页面资源的版本信息和页面资源的代码中包含的被引用页面资源的版本信息,判断本地的缓存数据是否为最新版本的缓存数据,若判断结果为否,则重新向应用服务器请求新版本的缓存数据,以更新本地的旧版本的缓存数据更新为新版本的缓存数据,进而达到本地缓存数据自动更新的效果,并且在客户端只需要更新与变更的页面资源相关的缓存数据;
具体的,基于与目标页面资源相关的逆向引用索引,确定发生变更的目标页面资源的关联页面资源,进而对关联页面资源进行更新,以触发客户端对本地缓存进行更新,由于将关联页面资源包含的引用信息中涉及的发生变更的页面资源的版本信息均更新为最新的版本信息,并且客户端的本地缓存也更新为最新版本的静态资源,这样客户端在渲染业务页面时,能够加载到最新版本的静态资源,从而保证客户端渲染得到的网页页面中展示最新版本的页面资源。
进一步的,为了确保向客户端传输更新后的页面资源的传输速度和传输稳定性,从而解决互联网网络拥挤的状况,提高用户访问网站的响应速度,基于此,在上述S103根据目标页面资源的最新的版本信息,更新确定出的关联页面资源之后,还包括:
利用内容分发网络(Content Delivery Network,CDN)将更新后的关联页面资源分发至分布于不同地理位置的应用服务端,以便客户端从满足预设条件的应用服务端处获取更新后的关联页面资源并基于该关联页面资源进行本地缓存更新;其中,该满足预设条件的应用服务端可以是与客户端的距离小于预设距离阈值的应用服务端。
本说明书一个或多个实施例中,结合页面资源之间的逆向引用索引,确定直接或间接引用目标页面资源的至少一个关联页面资源,进而对该关联页面资源自身的版本信息以及该关联页面资源包含的引用信息中涉及的页面资源的版本信息进行更新,这样能够实现更细粒度的对页面资源进行更新管控,从而提高页面资源的更新效率和准确度。
其中,由于当存在页面资源变更时,需要借助逆向引用索引确定直接或间接引用变更的页面资源的关联页面资源,因此,需要预先构建逆向引用索引,基于此,如图2所示,上述S101获取预先构建的与该目标页面资源相关的逆向引用索引之前,还包括:
S104,确定各页面资源之间的引用关系,具体的,针对每个页面资源,基于该页面资源的代码中关于页面资源的引用信息,确定该页面资源所引用的其他页面资源,进而确定各页面资源之间的引用关系;
例如,页面资源a.html文件的具体代码为:
<html>
<head></head>
<body><img src="pathTo/1.jpg><img>"<body>
</html>
由此可知,页面资源a.html引用了页面资源1.jpg,同样的,基于页面资源b.html、页面资源a.css的具体代码,可知页面资源b.html、页面资源a.css也引用了1.jpg等等。
其中,在一个具体实施例中,确定各页面资源之间的引用关系的具体算法伪码可以为:
如图3a所示,给出了针对某一网站所提供的新业务功能的业务页面涉及的各页面资源之间引用关系的具体结构示意图,具体的,该引用关系结构中主要包括:页面资源a.html、b.html、c.html、a.css、1.jpg、2.jpg、3.jpg,其中,a.html、b.html、a.css均引用了1.jpg,a.html还引用了2.jpg,a.css还引用了3.jpg,a.html还引用了b.html等等。
S105,根据确定出的引用关系,构建逆向引用索引,其中,该逆向引用索引包括:至少一条逆向引用分支,该逆向引用分支包括:一个被引用的根节点和引用该根节点的至少一个子节点,针对每个逆向引用分支,该逆向引用分支中的根节点用于表示被引用页面资源,子节点用于表示引用页面资源;
具体的,当某一网站的新业务功能上线时,需要根据该新业务功能涉及的多个页面资源之间的引用关系,构建针对该业务功能的逆向引用索引,后续若需要对该业务功能涉及的某一页面资源进行变更,那么所有直接或间接引用变更的页面资源的关联页面资源均需要随之进行更新,此时,可以基于该逆向引用索引确定出关联页面资源。
另外,由于逆向引用索引只与页面资源的引用关系有关,因此,只有页面资源之间的引用关系发生变化时才需要对逆向引用索引进行更新,页面资源的版本信息发生变更并不影响逆向引用索引。
例如,通过遍历图3a中所示的各页面资源之间的引用关系,可知:
所有引用了1.jpg的文件列表,即a.html、b.html、a.css;
所有引用了2.jpg的文件列表,即a.html;
所有引用了3.jpg的文件列表,即a.css;
所有引用了a.css的文件列表,即a.html;
所有引用了b.html的文件列表,即a.html;
所有引用了c.html的文件列表,即a.html;
如图3b所示,基于上述各被引用页面资源的文件列表,确定多个逆向引用分支,再由确定出的多个逆向引用分支得到逆向引用索引,其中,该逆向引用索引包含的逆向引用分支,具体包括:
以1.jpg为根节点且以a.html、b.html、a.css为子节点的逆向引用分支1;
以2.jpg为根节点且以a.html为子节点的逆向引用分支2;
以3.jpg为根节点且以a.css为子节点的逆向引用分支3;
以a.css为根节点且以a.html为子节点的逆向引用分支4;
以b.html为根节点且以a.html为子节点的逆向引用分支5;
以c.html为根节点且以a.html为子节点的逆向引用分支6。
其中,在构建得到上述逆向引用索引的基础上,基于该逆向引用索引查找到与目标页面资源相关的关联页面资源,具体的,如图4所示,上述S102根据获取到的逆向引用索引,确定目标页面资源的关联页面资源,具体包括:
S1021,在获取到的逆向引用索引中,查找与目标页面资源相关的目标逆向引用分支,其中,该目标逆向引用分支中的子节点所表示的页面资源与目标页面资源具有直接或间接的引用关系,具体的,可以利用深度优先算法在获取到的逆向引用索引中,查找与目标页面资源相关的目标逆向引用分支;
S1022,根据查找出的目标逆向引用分支确定目标页面资源的关联页面资源,具体的,将目标逆向引用分支中的子节点作为目标页面资源的关联页面资源。
具体的,上述S1021在获取到的逆向引用索引中,查找与目标页面资源相关的目标逆向引用分支,具体包括:
在获取到的逆向引用索引中,将用于表示目标页面资源的根节点作为首个当前遍历对象;
确定以当前遍历对象为根节点的目标逆向引用分支;以及,
将目标逆向引用分支中的至少一个子节点作为下一个当前遍历对象,并继续执行确定以当前遍历对象为根节点的目标逆向引用分支的步骤,直到所有的当前遍历对象均不属于任一逆向引用分支的根节点、或者以当前遍历对象为根节点的逆向引用分支的子节点为用于表示目标页面资源(即出现引用环路问题)。
具体的,仍以图3b所示的逆向引用索引为例,如果页面资源1.jpg为发生变更的目标页面资源,在该逆向引用索引中,以页面资源1.jpg为根节点的目标逆向引用分支是逆向引用分支1;
对应的,逆向引用分支1中的子节点分别为页面资源a.html、b.html、a.css,其中,a.html、b.html、a.css与1.jpg具有直接引用关系;并且,将a.html、b.html、a.css分别作为下一个当前遍历对象;
以页面资源b.html为根节点的目标逆向引用分支是逆向引用分支5;
对应的,逆向引用分支5中的子节点为页面资源a.html,其中,a.html与1.jpg还具有间接引用关系;并且,将a.html作为下一个当前遍历对象;
以页面资源a.css为根节点的目标逆向引用分支是逆向引用分支4;
对应的,逆向引用分支4中的子节点为页面资源a.html,其中,a.html与1.jpg还具有间接引用关系;并且,将a.html作为下一个当前遍历对象;
由于最终确定出的当前遍历对象均为a.html,且在该逆向引用索引中,不存在以a.html为根节点的逆向引用分支,因此,与目标页面资源相关的目标逆向引用分支分别为:逆向引用分支1、逆向引用分支4、逆向引用分支5;
进而,将目标逆向引用分支中的子节点作为目标页面资源的关联页面资源,对应的,目标页面资源的关联页面资源分别为:页面资源a.html、b.html、a.css、a.html、a.html。
其中,在确定出目标页面资源的关联页面资源后,需要对关联页面资源进行更新,为了进一步提高资源更新效率,简化资源更新处理量,采用基于更新任务集合且当更新任务集合满足预设更新条件时,对更新任务进行集中更新处理的方式,基于此,如图5所示,上述S103根据目标页面资源的最新的版本信息,更新确定出的关联页面资源,具体包括:
S1031,创建针对目标页面资源的更新任务集合,其中,该更新任务集合中的每个更新任务用于触发基于目标页面资源的最新的版本信息更新关联页面资源,并且该更新任务集合可以采用队列、链表或堆栈的数据结构实现;
具体的,针对每个关联页面资源,生成该关联页面资源的更新任务,该更新任务用于触发更新该关联页面资源的代码中包含的发生变更的被引用页面资源的版本信息,以及触发变更该关联页面资源的版本信息;
S1032,判断上述更新任务集合是否符合预设更新条件,其中,该预设更新条件可以是更新任务集合中包含资源本次资源变更事件涉及的所有更新任务,即本次资源变更事件已完成且已将本次资源变更事件涉及的更新任务加入更新任务集合中;还可以是更新任务的数量达到预设阈值,即加入更新任务集合中的更新任务的数量大于或等于预设阈值;
若是,则执行S1033,执行上述更新任务集合中的各个更新任务,具体的,针对每个更新任务,更新该更新任务对应的关联页面资源的代码中包含的发生变更的被引用页面资源的版本信息,以及触发变更该关联页面资源的版本信息,其中,该发生变更的被引用页面资源可以是目标页面资源,还可以是直接或间接因目标页面资源变更而发生变更的其他关联页面资源。
其中,上述S1032判断上述更新任务集合是否符合预设更新条件,具体包括:
判断本次资源变更事件是否完成,和/或判断上述更新任务集合中的更新任务的数量是否大于预设阈值;
若至少一个判断结果为是,则确定上述更新任务集合符合预设更新条件。
具体的,若本次资源变更事件已完成,则确定上述更新任务集合符合预设更新条件,或者若更新任务集合中的更新任务的数量大于预设阈值,则确定上述更新任务集合符合预设更新条件,或者若本次资源变更事件已完成且更新任务集合中的更新任务的数量大于预设阈值,则确定上述更新任务集合符合预设更新条件。也就是说,当静态资源变更事务完成、或者更新任务集合中的更新任务的数量达到最大阈值时,应用系统集中处理更新任务集合中的更新任务。
进一步的,考虑到基于消息队列完成关联页面资源的更新,能够使用发布订阅模式处理更新任务,进而能够实现更新任务分布式并发处理,基于此,优选的,上述更新任务集合采用消息队列的数据结构实现;
对应的,上述S1031创建针对目标页面资源的更新任务集合,具体包括:
根据目标页面资源和关联页面资源,生成更新任务,以及将生成的更新任务按序添加至消息队列中,即更新任务入队;
对应的,上述S1033执行更新任务集合中的各个更新任务,具体包括:
采用分布式并发模式执行消息队列中的各个更新任务,具体的,可以通过分布式系统采用分布式并发模式对消息队列中的更新任务进行一次性消费。
其中,由于考虑到当前前端架构的趋势是组件化、碎片化,使得页面资源之间存在引用关系,一个页面资源的版本信息发生变化,可能导致引用该页面资源的另一个页面资源的版本信息随之变化,即出现一系列关联页面资源需要更新的情况,在更新关联页面资源时,需要更新该关联页面资源的代码中包含的发生变更的被引用页面资源的版本信息,因此,针对每个关联页面资源,需要优先对该关联页面资源所引用的直接或间接发送变更的其他关联页面资源的版本信息进行更新之后,再对该关联页面资源进行更新,即需要先执行针对发生变更的被引用页面资源生成的更新任务,再执行针对该关联页面资源生成的更新任务,这样才能够确保引用该被引用页面资源的关联页面资源的代码中包含的被引用页面资源的版本信息均更新为最新的版本信息;
其中,考虑到针对消息队列而言,可以按照更新任务的入队顺序执行消息队列中的更新任务,因此,在更新任务入队时,需要先确定各更新任务的更新优先级,再按照更新优先级由高到低的顺序将更新任务添加至消息队列中,基于此,上述将生成的更新任务按序添加至消息队列中,具体包括:
将目标页面资源对应的更新任务的更新优先级设置为最高;
针对每个关联页面资源,根据该关联页面资源与其他页面资源的引用关系,确定各关联页面资源的更新优先级,其中,被引用页面资源的更新优先级高于引用页面资源的更新优先级,即先对被引用页面资源进行更新,再对引用页面资源进行更新;
根据目标页面资源的更新优先级和确定出的各关联页面资源的更新优先级,按照优先级由高到低的顺序将生成的更新任务添加至消息队列中。
在一个具体实施例中,仍以图3b所示的逆向引用索引且页面资源1.jpg为发生变更的目标页面资源为例,目标页面资源的关联页面资源分别为:页面资源a.html、b.html、a.css、a.html、a.html;
对应的,若将针对目标页面资源1.jpg生成的更新任务定义为任务0;以及,
将针对由上述逆向引用分支1确定出的关联页面资源a.html生成的更新任务定义为任务1;以及,
将针对关联页面资源b.html生成的更新任务定义为任务2;以及,
将针对关联页面资源a.css生成的更新任务定义为任务3;以及,
将针对由上述逆向引用分支5确定出的关联页面资源a.html生成的更新任务定义为任务4;以及,
将针对由上述逆向引用分支4确定出的关联页面资源a.html生成的更新任务定义为任务5;
如果基于上述关联页面资源的更新优先级的确定方法,得到的更新优先级由高到低的排序为:
(1)任务0对应的目标页面资源1.jpg;
(2)任务2对应的关联页面资源b.html;
(3)任务4对应的关联页面资源a.html;
(4)任务1对应的关联页面资源a.html;
(5)任务3对应的关联页面资源a.css;
(6)任务5对应的关联页面资源a.html;
对应的,如图6a所示,按照1.jpg、b.html、a.html、a.html、a.css、a.html的顺序将更新任务0、更新任务2、更新任务4、更新任务1、更新任务3、更新任务5添加至消息队列中。
进一步的,考虑到某一关联页面资源可能同时引用目标页面资源和至少一个其他关联页面资源,或者同时引用至少两个其他关联页面资源的情况,这样将导致更新任务集合中存在至少两个更新任务是针对同一关联页面资源生成的情况,基于此,上述S1033执行上述更新任务集合中的各个更新任务,具体包括:
根据各更新任务对应的页面资源的唯一性标识,对更新任务集合中的更新任务进行去重处理,得到去重后的更新任务集合;
执行去重后的更新任务集合中的各个更新任务,具体的,对各更新任务对应的关联页面资源进行更新。
其中,上述唯一性标识可以是页面资源的全路径文件名,即若在更新任务集合中存在至少两个关联页面资源的全路径文件名相同,则只保留一个关联页面资源对应的更新任务,例如,在图6a中,存在三个全路径文件名均为a.html的关联页面资源,因此,可以删除两个a.html对应的更新任务,最终保留一个a.html对应的更新任务。
其中,为了确保关联页面资源的代码中包含的被引用页面资源的版本信息均更新为最新的版本信息,基于此,上述根据各更新任务对应的页面资源的唯一性标识,对更新任务集合中的更新任务进行去重处理,得到去重后的更新任务集合,具体包括:
查找具有相同的唯一性标识的页面资源对应的至少两个重复更新任务;
获取至少两个重复更新任务分别对应的页面资源的更新优先级,具体的,该更新优先级是基于上述更新优先级确定方式得到的;
在至少两个重复更新任务中,保留更新优先级最低的页面资源对应的更新任务;
对应的,上述执行去重后的更新任务集合中的各个更新任务,具体包括:
按照优先级由高到低的顺序,执行去重后的更新任务集合中的各个更新任务。
具体的,由于确定出的多个目标逆向引用分支中,可能存在至少两个目标逆向引用分支的子节点所表示的关联页面资源的唯一性标识相同的情况,并且在确定关联页面资源时,并不参考页面资源的唯一性标识,而是直接将目标逆向引用分支中的子节点作为目标页面资源的关联页面资源,同时,由于针对每个关联页面资源均生成一个对应的更新任务,这样将导致更新任务集合中存在至少两个更新任务是针对同一关联页面资源生成的情况,例如,针对基于图3b所示的逆向引用索引且目标页面资源为1.jpg的情况,在确定出的多个目标逆向引用分支中,逆向引用分支1、逆向引用分支4、逆向引用分支5的子节点所表示的关联页面资源均包括a.html,即页面资源a.html同时引用了1.jpg、b.html、a.css,也就是说,以针对图6a中的消息队列为例,具有相同的唯一性标识的页面资源对应的至少两个重复更新任务包括:任务4、任务1、任务5,即对应的关联页面资源的唯一性标识均为a.html;
对应的,如图6b所示,由于在更新任务入队时,按照优先级由高到低的顺序依次将更新任务添加至消息队列中,可知,任务5对应的页面资源a.html的更新优先级最低,因此,在消息队列中,保留任务5,删除任务1和任务4,即最终消息队列中的更新任务包括:任务0、任务2、任务3、任务5;
另外,如果保留任务1,删除任务4和任务5,由于在对关联页面资源a.html的进行更新之前并未执行对关联页面资源a.css进行更新,因此,在在对关联页面资源a.html的进行更新时,无法将页面资源a.html的代码中包含的页面资源a.css的版本信息进行更新,从而导致将出现页面资源a.html的代码中包含的页面资源a.css的版本信息不是最新的版本信息的情况。
其中,上述执行更新任务集合中的各个更新任务,具体包括:
针对每个更新任务,确定该更新任务对应的关联页面资源中的被引用页面资源的最新的版本信息,其中,该被引用页面资源包括:目标页面资源和/或其他关联页面资源;
根据确定出的被引用页面资源的最新的版本信息,更新关联页面资源的属性信息,其中,该属性信息包括:针对目标页面资源的引用信息中的版本信息、针对其他关联页面资源的引用信息中的版本信息、以及关联页面资源的版本信息中的至少一种。
其中,针对目标页面资源的引用信息中的版本信息,是指在关联页面资源直接引用目标页面资源的情况,关联页面资源的代码中包含的目标页面资源的版本信息;针对其他关联页面资源的引用信息中的版本信息,是指在关联页面资源直接引用其他关联页面资源的情况,关联页面资源的代码中包含的其他关联页面资源的版本信息;
例如,页面资源A为商品图片,页面资源B为css样式表,页面资源C为html页面模板,其中,页面资源B引用了页面资源A,即css样式表的代码包含的引用信息中涉及的商品图片的版本信息,页面资源C引用了页面资源B,即html页面模板的代码包含的引用信息中涉及的css样式表的版本信息,此时,如果商品图片发生了变更,即将原商品图片替换为新商品图片,对应的,获取与商品图片相关的逆向引用索引,根据该逆向引用索引,确定商品图片的关联页面资源为css样式表和html页面模板,将css样式表的代码包含的引用信息中涉及的商品图片的版本信息由商品图片的旧版本号更新为商品图片的新版本号,同时,还需要将css样式表的版本信息由旧版本号更新为新版本号,再将html页面模板的代码包含的引用信息中涉及的css样式表的版本信息由css样式表的旧版本号更新为css样式表的新版本号,同时,还需要将html页面模板的版本信息由旧版本号更新为新版本号,依次类推,直到对所有的关联页面资源更新完成。
其中,上述版本信息可以是序列号信息,还可以是时间戳信息,考虑到时间戳信息具有唯一性和自增性,且为了保证页面资源的版本信息能够标记版本的唯一性,可以根据页面资源的更新频率确定时间戳信息的最小单位,例如,当页面资源的更新频率为一天最多更新一次时,时间戳信息可以是以天为最小单位的时间戳,又如,当页面资源的更新频率为一天至少更新两次时,还可以是以小时为最小单位的时间戳,优选的,页面资源的版本信息包括:时间戳信息。
具体的,在对页面资源的版本信息进行更新时,使用时间戳给页面资源打标,即采用更为简单的时间戳作为页面资源的版本控制依据,能够弱化复杂的引用关系,解决了在现代前端工程碎片化结构下,细粒度版本控制带来的高消耗问题,并且基于时间戳信息可以识别出目标页面资源的版本信息和关联页面资源的版本信息是否为最新的版本信息,若是,则不会继续更新,并且在确定关联页面资源时已进行环路问题规避,不会误将目标页面资源再次归为关联页面资源,从而还能够有效规避引用环路问题和更新顺序问题,这样应用系统只需要规划最终的分发部署顺序即可。
在本说明书一个或多个实施例中,通过将时间戳信息作为页面资源的版本控制依据,并且以消息队列的形式对针对页面资源的更新任务进行集中批量消费,以及在进行更新任务批量消费之前对消息队列进行更新任务去重合并处理,这样能够在不损失粒度的前提下提供了轻量级更新方案,进一步提高了页面资源的更新处理效率。
具体的,以图6b中所示更新任务集合为例,针对任务0,将目标页面资源1.jpg的版本信息更新为当前时间戳;
针对任务2,将关联页面资源b.html的代码中1.jpg的版本信息更新为当前时间戳,以及将关联页面资源b.html的版本信息更新为当前时间戳;
针对任务3,将关联页面资源a.css的代码中1.jpg的版本信息更新为当前时间戳,以及将关联页面资源a.css的版本信息更新为当前时间戳;
针对任务5,将关联页面资源a.html的代码中1.jpg的版本信息更新为当前时间戳,将关联页面资源a.html的代码中b.html的版本信息更新为当前时间戳,将关联页面资源a.html的代码中a.css的版本信息更新为当前时间戳,以及将关联页面资源a.html的版本信息更新为当前时间戳。
例如,以页面资源a.html引用目标页面资源1.jpg的相关代码为例,页面资源a.html文件的更新前的具体代码为:
<html>
<head></head>
<body>
<img src="pathto/1.jpg?20180821"/>
</body>
对应的,若目标页面资源1.jpg的最新的时间戳信息为20180822,则页面资源a.html文件的更新后的具体代码为:
<html>
<head></head>
<body>
<img src="pathto/1.jpg?20180822"/>
</body>
也就是说,将<img src="pathto/1.jpg?20180821"/>
替换成
<img src="pathto/1.jpg?20180822"/>。
本说明书一个或多个实施例中的资源更新方法,在目标页面资源发生变更时,获取预先构建的与该目标页面资源相关的逆向引用索引;根据该逆向引用索引,确定目标页面资源的关联页面资源,其中,该关联页面资源直接或间接引用目标页面资源;根据目标页面资源的最新的版本信息,更新关联页面资源。本说明书一个或多个实施例中,结合页面资源之间的逆向引用索引,确定直接或间接引用目标页面资源的至少一个关联页面资源,进而对该关联页面资源自身的版本信息以及该关联页面资源包含的引用信息中涉及的页面资源的版本信息进行更新,这样能够实现更细粒度的对页面资源进行更新管控,从而提高页面资源的更新效率和准确度。
对应上述图1至图6b描述的资源更新方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种资源更新装置,图7为本说明书一个或多个实施例提供的资源更新装置的第一种模块组成示意图,该装置用于执行图1至图6b描述的资源更新方法,如图7所示,该装置包括:
逆向索引获取模块701,用于在目标页面资源发生变更时,获取预先构建的与所述目标页面资源相关的逆向引用索引;
关联资源确定模块702,用于根据所述逆向引用索引,确定所述目标页面资源的关联页面资源,其中,所述关联页面资源直接或间接引用所述目标页面资源;
页面资源更新模块703,用于根据所述目标页面资源的最新的版本信息,更新所述关联页面资源。
可选地,如图8所示,上述装置还包括:
引用关系确定模块704,用于确定各页面资源之间的引用关系;
逆向索引构建模块705,用于根据确定出的所述引用关系,构建逆向引用索引,其中,所述逆向引用索引包括:至少一条逆向引用分支,所述逆向引用分支包括:一个被引用的根节点和引用所述根节点的至少一个子节点。
可选地,所述关联资源确定模块702,具体用于:
在所述逆向引用索引中,查找与所述目标页面资源相关的目标逆向引用分支;
根据所述目标逆向引用分支确定所述目标页面资源的关联页面资源。
可选地,所述关联资源确定模块702,进一步具体用于:
在所述逆向引用索引中,将用于表示所述目标页面资源的根节点作为首个当前遍历对象;
确定以所述当前遍历对象为根节点的目标逆向引用分支;以及,
将所述目标逆向引用分支中的至少一个子节点作为下一个当前遍历对象,并继续执行确定以所述当前遍历对象为根节点的目标逆向引用分支的步骤,直到所述当前遍历对象不属于任一逆向引用分支的根节点、或者以所述当前遍历对象为根节点的逆向引用分支的子节点为用于表示所述目标页面资源。
可选地,所述页面资源更新模块703,具体用于:
创建针对所述目标页面资源的更新任务集合,其中,所述更新任务集合中的每个更新任务用于触发基于所述目标页面资源的最新的版本信息更新所述关联页面资源;
若所述更新任务集合符合预设更新条件,则执行所述更新任务集合中的各个所述更新任务。
可选地,所述更新任务集合采用队列、链表或堆栈的数据结构实现。
可选地,所述更新任务集合采用消息队列的数据结构实现;
所述页面资源更新模块703,进一步具体用于:
根据所述目标页面资源和所述关联页面资源,生成更新任务,以及将所述更新任务按序添加至所述消息队列中;
采用分布式并发模式执行所述消息队列中的各个更新任务。
可选地,页面资源更新模块703,还具体用于:
判断本次资源变更事件是否完成,和/或判断所述更新任务集合中的更新任务的数量是否大于预设阈值;
若至少一个判断结果为是,则确定所述更新任务集合符合预设更新条件。
可选地,页面资源更新模块703,进一步具体用于:
根据各所述更新任务对应的页面资源的唯一性标识,对所述更新任务集合中的更新任务进行去重处理,得到去重后的更新任务集合;
执行去重后的更新任务集合中的各个所述更新任务。
可选地,所述页面资源更新模块703,进一步具体用于:
针对每个所述更新任务,确定该更新任务对应的关联页面资源中的被引用页面资源的最新的版本信息,其中,所述被引用页面资源包括:目标页面资源和/或其他关联页面资源;
根据所述被引用页面资源的最新的版本信息,更新所述关联页面资源的属性信息,其中,所述属性信息包括:针对目标页面资源的引用信息中的版本信息、针对其他关联页面资源的引用信息中的版本信息、以及所述关联页面资源的版本信息中的至少一种。
可选地,所述版本信息包括:时间戳信息。
可选地,上述装置还包括:
页面资源分发模块706,用于利用内容分发网络将更新后的所述关联页面资源分发至分布于不同地理位置的应用服务端,以便客户端从所述应用服务端处获取所述关联页面资源并基于该关联页面资源进行本地缓存更新。
本说明书一个或多个实施例中的资源更新装置,在目标页面资源发生变更时,获取预先构建的与该目标页面资源相关的逆向引用索引;根据该逆向引用索引,确定目标页面资源的关联页面资源,其中,该关联页面资源直接或间接引用目标页面资源;根据目标页面资源的最新的版本信息,更新关联页面资源。本说明书一个或多个实施例中,结合页面资源之间的逆向引用索引,确定直接或间接引用目标页面资源的至少一个关联页面资源,进而对该关联页面资源自身的版本信息以及该关联页面资源包含的引用信息中涉及的页面资源的版本信息进行更新,这样能够实现更细粒度的对页面资源进行更新管控,从而提高页面资源的更新效率和准确度。
需要说明的是,本说明书中该实施例与本说明书中上一实施例基于同一发明构思,因此该实施例的具体实施可以参见前述资源更新方法的实施,重复之处不再赘述。
进一步地,对应上述图1至图6b所示的方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种资源更新设备,该设备用于执行上述的资源更新方法,如图9所示。
资源更新设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上的处理器901和存储器902,存储器902中可以存储有一个或一个以上存储应用程序或数据。其中,存储器902可以是短暂存储或持久存储。存储在存储器902的应用程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对资源更新设备中的一系列计算机可执行指令。更进一步地,处理器901可以设置为与存储器902通信,在资源更新设备上执行存储器902中的一系列计算机可执行指令。资源更新设备还可以包括一个或一个以上电源903,一个或一个以上有线或无线网络接口904,一个或一个以上输入输出接口905,一个或一个以上键盘906等。
在一个具体的实施例中,资源更新设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对资源更新设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:
在目标页面资源发生变更时,获取预先构建的与所述目标页面资源相关的逆向引用索引;
根据所述逆向引用索引,确定所述目标页面资源的关联页面资源,其中,所述关联页面资源直接或间接引用所述目标页面资源;
根据所述目标页面资源的最新的版本信息,更新所述关联页面资源。
可选地,计算机可执行指令在被执行时,还包含用于进行以下计算机可执行指令:
所述获取预先构建的与所述目标页面资源相关的逆向引用索引之前,还包括:
确定各页面资源之间的引用关系;
根据确定出的所述引用关系,构建逆向引用索引,其中,所述逆向引用索引包括:至少一条逆向引用分支,所述逆向引用分支包括:一个被引用的根节点和引用所述根节点的至少一个子节点。
可选地,计算机可执行指令在被执行时,所述根据所述逆向引用索引,确定所述目标页面资源相关的关联页面资源,包括:
在所述逆向引用索引中,查找与所述目标页面资源相关的目标逆向引用分支;
根据所述目标逆向引用分支确定所述目标页面资源的关联页面资源。
可选地,计算机可执行指令在被执行时,所述在所述逆向引用索引中,查找与所述目标页面资源相关的目标逆向引用分支,包括:
在所述逆向引用索引中,将用于表示所述目标页面资源的根节点作为首个当前遍历对象;
确定以所述当前遍历对象为根节点的目标逆向引用分支;以及,
将所述目标逆向引用分支中的至少一个子节点作为下一个当前遍历对象,并继续执行确定以所述当前遍历对象为根节点的目标逆向引用分支的步骤,直到所述当前遍历对象不属于任一逆向引用分支的根节点、或者以所述当前遍历对象为根节点的逆向引用分支的子节点为用于表示所述目标页面资源。
可选地,计算机可执行指令在被执行时,所述根据所述目标页面资源的最新的版本信息,更新所述关联页面资源,包括:
创建针对所述目标页面资源的更新任务集合,其中,所述更新任务集合中的每个更新任务用于触发基于所述目标页面资源的最新的版本信息更新所述关联页面资源;
若所述更新任务集合符合预设更新条件,则执行所述更新任务集合中的各个所述更新任务。
可选地,计算机可执行指令在被执行时,所述更新任务集合采用队列、链表或堆栈的数据结构实现。
可选地,计算机可执行指令在被执行时,所述更新任务集合采用消息队列的数据结构实现;
所述创建针对所述目标页面资源的更新任务集合,包括:
根据所述目标页面资源和所述关联页面资源,生成更新任务,以及将所述更新任务按序添加至所述消息队列中;
所述执行所述更新任务集合中的各个所述更新任务,包括:
采用分布式并发模式执行所述消息队列中的各个更新任务。
可选地,计算机可执行指令在被执行时,还包含用于进行以下计算机可执行指令:
在创建针对所述目标页面资源的更新任务集合之后,还包括:
判断本次资源变更事件是否完成,和/或判断所述更新任务集合中的更新任务的数量是否大于预设阈值;
若至少一个判断结果为是,则确定所述更新任务集合符合预设更新条件。
可选地,计算机可执行指令在被执行时,所述执行所述更新任务集合中的各个所述更新任务,具体包括:
根据各所述更新任务对应的页面资源的唯一性标识,对所述更新任务集合中的更新任务进行去重处理,得到去重后的更新任务集合;
执行去重后的更新任务集合中的各个所述更新任务。
可选地,计算机可执行指令在被执行时,所述执行所述更新任务集合中的各个所述更新任务,包括:
针对每个所述更新任务,确定该更新任务对应的关联页面资源中的被引用页面资源的最新的版本信息,其中,所述被引用页面资源包括:目标页面资源和/或其他关联页面资源;
根据所述被引用页面资源的最新的版本信息,更新所述关联页面资源的属性信息,其中,所述属性信息包括:针对目标页面资源的引用信息中的版本信息、针对其他关联页面资源的引用信息中的版本信息、以及所述关联页面资源的版本信息中的至少一种。
可选地,计算机可执行指令在被执行时,所述版本信息包括:时间戳信息。
可选地,计算机可执行指令在被执行时,还包含用于进行以下计算机可执行指令:
在根据所述目标页面资源的最新的版本信息,更新所述关联页面资源之后,还包括:
利用内容分发网络将更新后的所述关联页面资源分发至分布于不同地理位置的应用服务端,以便客户端从所述应用服务端处获取所述关联页面资源并基于该关联页面资源进行本地缓存更新。
本说明书一个或多个实施例中的资源更新设备,在目标页面资源发生变更时,获取预先构建的与该目标页面资源相关的逆向引用索引;根据该逆向引用索引,确定目标页面资源的关联页面资源,其中,该关联页面资源直接或间接引用目标页面资源;根据目标页面资源的最新的版本信息,更新关联页面资源。本说明书一个或多个实施例中,结合页面资源之间的逆向引用索引,确定直接或间接引用目标页面资源的至少一个关联页面资源,进而对该关联页面资源自身的版本信息以及该关联页面资源包含的引用信息中涉及的页面资源的版本信息进行更新,这样能够实现更细粒度的对页面资源进行更新管控,从而提高页面资源的更新效率和准确度。
进一步地,对应上述图1至图6b所示的方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种存储介质,用于存储计算机可执行指令,一种具体的实施例中,该存储介质可以为U盘、光盘、硬盘等,该存储介质存储的计算机可执行指令在被处理器执行时,能实现以下流程:
在目标页面资源发生变更时,获取预先构建的与所述目标页面资源相关的逆向引用索引;
根据所述逆向引用索引,确定所述目标页面资源的关联页面资源,其中,所述关联页面资源直接或间接引用所述目标页面资源;
根据所述目标页面资源的最新的版本信息,更新所述关联页面资源。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,还实现以下流程:
所述获取预先构建的与所述目标页面资源相关的逆向引用索引之前,还包括:
确定各页面资源之间的引用关系;
根据确定出的所述引用关系,构建逆向引用索引,其中,所述逆向引用索引包括:至少一条逆向引用分支,所述逆向引用分支包括:一个被引用的根节点和引用所述根节点的至少一个子节点。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述根据所述逆向引用索引,确定所述目标页面资源相关的关联页面资源,包括:
在所述逆向引用索引中,查找与所述目标页面资源相关的目标逆向引用分支;
根据所述目标逆向引用分支确定所述目标页面资源的关联页面资源。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述在所述逆向引用索引中,查找与所述目标页面资源相关的目标逆向引用分支,包括:
在所述逆向引用索引中,将用于表示所述目标页面资源的根节点作为首个当前遍历对象;
确定以所述当前遍历对象为根节点的目标逆向引用分支;以及,
将所述目标逆向引用分支中的至少一个子节点作为下一个当前遍历对象,并继续执行确定以所述当前遍历对象为根节点的目标逆向引用分支的步骤,直到所述当前遍历对象不属于任一逆向引用分支的根节点、或者以所述当前遍历对象为根节点的逆向引用分支的子节点为用于表示所述目标页面资源。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述根据所述目标页面资源的最新的版本信息,更新所述关联页面资源,包括:
创建针对所述目标页面资源的更新任务集合,其中,所述更新任务集合中的每个更新任务用于触发基于所述目标页面资源的最新的版本信息更新所述关联页面资源;
若所述更新任务集合符合预设更新条件,则执行所述更新任务集合中的各个所述更新任务。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述更新任务集合采用队列、链表或堆栈的数据结构实现。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述更新任务集合采用消息队列的数据结构实现;
所述创建针对所述目标页面资源的更新任务集合,包括:
根据所述目标页面资源和所述关联页面资源,生成更新任务,以及将所述更新任务按序添加至所述消息队列中;
所述执行所述更新任务集合中的各个所述更新任务,包括:
采用分布式并发模式执行所述消息队列中的各个更新任务。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,还实现以下流程:
在创建针对所述目标页面资源的更新任务集合之后,还包括:
判断本次资源变更事件是否完成,和/或判断所述更新任务集合中的更新任务的数量是否大于预设阈值;
若至少一个判断结果为是,则确定所述更新任务集合符合预设更新条件。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述执行所述更新任务集合中的各个所述更新任务,具体包括:
根据各所述更新任务对应的页面资源的唯一性标识,对所述更新任务集合中的更新任务进行去重处理,得到去重后的更新任务集合;
执行去重后的更新任务集合中的各个所述更新任务。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述执行所述更新任务集合中的各个所述更新任务,包括:
针对每个所述更新任务,确定该更新任务对应的关联页面资源中的被引用页面资源的最新的版本信息,其中,所述被引用页面资源包括:目标页面资源和/或其他关联页面资源;
根据所述被引用页面资源的最新的版本信息,更新所述关联页面资源的属性信息,其中,所述属性信息包括:针对目标页面资源的引用信息中的版本信息、针对其他关联页面资源的引用信息中的版本信息、以及所述关联页面资源的版本信息中的至少一种。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述版本信息包括:时间戳信息。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,还实现以下流程:
在根据所述目标页面资源的最新的版本信息,更新所述关联页面资源之后,还包括:
利用内容分发网络将更新后的所述关联页面资源分发至分布于不同地理位置的应用服务端,以便客户端从所述应用服务端处获取所述关联页面资源并基于该关联页面资源进行本地缓存更新。
本说明书一个或多个实施例中的存储介质存储的计算机可执行指令在被处理器执行时,在目标页面资源发生变更时,获取预先构建的与该目标页面资源相关的逆向引用索引;根据该逆向引用索引,确定目标页面资源的关联页面资源,其中,该关联页面资源直接或间接引用目标页面资源;根据目标页面资源的最新的版本信息,更新关联页面资源。本说明书一个或多个实施例中,结合页面资源之间的逆向引用索引,确定直接或间接引用目标页面资源的至少一个关联页面资源,进而对该关联页面资源自身的版本信息以及该关联页面资源包含的引用信息中涉及的页面资源的版本信息进行更新,这样能够实现更细粒度的对页面资源进行更新管控,从而提高页面资源的更新效率和准确度。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HD Cal、JHDL(Java Hardware Description Language)、Lava、Lola、My HDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书一个或多个时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书一个或多个的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书一个或多个可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个是参照根据本说明书一个或多个实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书一个或多个的实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书一个或多个的实施例而已,并不用于限制本说明书一个或多个。对于本领域技术人员来说,本说明书一个或多个可以有各种更改和变化。凡在本说明书一个或多个的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个的权利要求范围之内。