一种数据存储方法和装置与流程

文档序号:12719760阅读:275来源:国知局
一种数据存储方法和装置与流程

本发明涉及计算机技术,特别涉及一种数据存储方法和装置。



背景技术:

在浏览器中加载运行某些页面时,可以将该页面显示所需的资源存储在浏览器的本地存储空间,这样待下次运行时可以由本地获取该资源。例如,在开发支持离线的Web应用程序时,该应用程序离线工作时所需的资源文件,浏览器可以在在线状态时将这些文件下载存储在本地存储空间,当用户离线访问该应用程序时,可以由本地获取资源文件并自动加载,从而使得用户可以在离线时正常使用该应用程序。但是,当前主流浏览器的本地存储空间都有限制,通常可以通过域名限制本地存储空间,例如,一个域名对应的本地存储空间可以是5MB,这无法满足大型离线Web应用程序的大量数据本地存储需求。



技术实现要素:

有鉴于此,本发明提供一种数据存储方法和装置,以使得浏览器本地存储能够满足各种容量的数据存储需求。

具体地,本发明是通过如下技术方案实现的:

第一方面,提供一种数据存储方法,所述方法包括:

调用浏览器的本地存储接口,向当前页面对应的域名下的存储空间存储应用数据;

当所述域名下的存储空间不足以存储所述应用数据时,创建至少一个超文本标记语言框架iframe,每个iframe加载一个页面,所述页面对应一个泛域名下的子域名;

将剩余的应用数据存储在至少一个所述子域名对应的存储空间。

第二方面,提供一种数据存储装置,所述装置包括:数据存储模块和页面创建模块;

所述数据存储模块,用于调用浏览器的本地存储接口,向当前页面对应的域名下的存储空间存储应用数据;还用于当所述域名下的存储空间不足以存储所述应用数据时,将剩余的应用数据存储在页面创建模块创建的至少一个所述子域名对应的存储空间;

所述页面创建模块,用于当所述域名下的存储空间不足以存储所述应用数据时,创建至少一个超文本标记语言框架iframe,每个iframe加载一个页面,所述页面对应一个泛域名下的子域名。

本发明实施例的数据存储方法和装置,通过创建泛域名下的子域名对应的代理页面,使得可以将父页面不足够存储的数据放入该子域名对应的存储空间存储,并且由于泛域名可以支持无限的子域名,可以根据存储需求适应性创建子域名的页面,能够使得浏览器本地存储满足各种容量的数据存储需求。

附图说明

图1为本发明实施例提供的一种数据存储方法的流程图;

图2为本发明实施例提供的另一种数据存储方法的流程图;

图3为本发明实施例提供的一种数据存储装置的结构示意图;

图4为本发明实施例提供的另一种数据存储装置的结构示意图。

具体实施方式

当前浏览器的本地存储空间都是有限制的,通常可以根据域名进行限制,每个域名有特定的最大存储容量,但是这种容量的限制有时无法满足数据存储的需求,尤其是将成为大型离线应用本地存储数据的瓶颈。本申请实施例提供的数据存储方法,将突破这种浏览器本地存储空间的容量限制,使得浏览器本地可以存储任意容量规模的数据,适应各种容量的数据存储需求。

为了实现上述目的,在一个例子中,可以将应用的域名设置为支持泛域名。例如,某个大型离线应用,该应用的域名为“*.abc.com”,该域名可以支持泛域名解析,比如,“123.abc.com”或者“234.abc.com”等都可以与“*.abc.com”指向同一IP地址。上述方式可以使得该域名支持无限的子域名,例如,“123.abc.com”、“234.abc.com”等都是泛域名下的子域名。

在设置域名支持泛域名的基础上,图1示例了本例子的数据存储方法的一个示例性流程,该方法可以由要在浏览器本地存储数据的应用执行,例如可以由所开发的某大型离线应用执行。如图1所示,该方法可以包括:

在步骤101中,调用浏览器的本地存储接口,向当前页面对应的域名下的存储空间存储应用数据,所述域名支持泛域名。

例如,浏览器的本地存储接口可以包括:local Storage、Web SQL、Index DB等API,当浏览器加载运行离线应用时,该应用程序可以调用浏览器提供的本地存储接口,将应用数据存储在浏览器的本地存储空间。

而根据浏览器的特性,浏览器将根据域名限制应用数据的存储。例如,假设一个域名对应5MB的存储空间,那么应用数据将先向该存储空间进行存储。其中,本步骤中的应用数据,可以是用户在访问应用的域名时,由应用服务器将应用加载所需的数据传输至该域名对应的当前页面。

在步骤102中,当域名下的存储空间不足以存储应用数据时,创建至少一个iframe,每个iframe加载域名下的一个子域名对应的页面。

例如,当前页面对应的域名下的存储空间,由于有域名对应的存储容量的限制,而不足以存储应用数据,比如,假设应用数据共有10MB,而该域名下的存储空间容量上限是5MB,则该空间无法容纳所有的应用数据。

本例子中,应用可以在当前页面创建至少一个iframe,每一个irame中加载一个页面,该页面可以称为代理页面,并且,该代理页面对应步骤101中的泛域名域名下的一个子域名。例如,当前页面的域名是“*.abc.com”,本步骤创建的该泛域名下的一个子域名可以是“123.abc.com”,当然也可以创建该域名下的其他的子域名比如,“234.abc.com”,该域名可以支持泛域名,因此可以支持无限的子域名。

当创建子域名对应的代理页面后,根据浏览器的“通过域名限制本地存储空间”的特性,该子域名将产生一个新的对应的本地存储空间,比如,还可以是5MB,那就相当于又增加了一个5MB的本地存储空间;剩余的应用数据可以继续在该子域名下的本地存储空间进行存储。

本步骤中,具体创建的iframe的数量,可以根据数据存储需求来确定,比如,假设步骤101中在向当前页面对应的存储空间存储数据后,剩余了6MB的应用数据,那么可以创建两个iframe,每个iframe加载一个子域名对应的代理页面,且假设每个子域名产生5MB的本地存储空间,则这两个iframe的创建将可以使得应用数据存储完毕。又例如,假设步骤101中剩余了12MB的应用数据,则根据上述的示例,可以创建三个iframe,每个iframe加载一个子域名对应的代理页面,以将应用数据完成存储。

在步骤103中,将剩余的应用数据存储在至少一个子域名对应的存储空间。

本步骤中,即将步骤101中剩余的未存储的应用数据,存储在步骤102中创建的子域名对应的本地存储空间中。需要说明的是,图1的流程中,并不限制个步骤之间的执行顺序,例如,当应用需要创建至少两个iframe时,可以是通过执行一次步骤102和步骤103,完成一个iframe的创建并将数据存储至该iframe对应的子域名的存储空间,然后再执行一次步骤102和步骤103,完成另一个iframe的创建以及数据存储。

本例子的数据存储方法,以在当前页面创建多个iframe,并在该iframe中引入对应一个子域名的页面的方式,使得该子域名产生一个新的对应存储空间;并且,本例子的方法中,iframe中的页面对应的子域名,是“泛域名下的子域名”,采用泛域名下的子域名,可以带来多种突出的效果,例如,如下三种效果:

第一、使得浏览器的本地存储空间无穷大;

由于泛域名可以支持无限的子域名,那么可以无限扩展浏览器的本地存储空间,例如,泛域名“*.abc.com”下可以有“123.abc.com”、“234.abc.com”、“456.abc.com”等无限个子域名,可以根据数据存储需求无限制的创建iframe中的页面,直至能够足够存储应用数据。这种方式相当于使得浏览器的本地存储空间无穷大,突破了浏览器本地存储空间的限制。

第二、使得浏览器本地存储空间更加灵活的增加;

正是由于泛域名支持无限个子域名,可以为iframe中嵌入的页面分配该泛域名下的任意一个子域名即可,这种子域名相当于是随用随取的,非常方便。而假设不采用泛域名下的子域名,预先申请几个子域名以供iframe中的页面所用,操作就会相对繁琐,因为每个子域名都需要预先申请使用。

并且,这种预先申请几个子域名用来使用的方式,其实相当于对浏览器的本地存储空间进行了定制,存储空间的容量还是有限的。比如,假设每个子域名对应5MB的存储空间,那如果预先申请三个子域名,将使得浏览器增加本地存储空间15MB,多于该容量的数据仍然不能满足存储需求;如果预先申请五个子域名,将使得浏览器增加本地存储空间25MB,多于该容量的数据不能存储。因此,不采用泛域名下的子域名,浏览器的本地存储空间不能称之为无穷大,其仍然是一个有一定容量限制的存储空间,如果要增加存储空间,则需要继续申请新的子域名,使得浏览器本地存储空间的增加就相对不够灵活。

第三、使得浏览器本地存储空间能够满足动态的数据存储容量的变化;

应用数据的规模也可能是动态变化的,例如,当前需要存储5MB的数据,也可能应用在使用的过程中产生了大量的数据,数据存储需求增加到20MB。采用本例子中的泛域名下的子域名的方式,完全可以满足这种动态数据存储需求,不论数据增加多少,都可以根据数据规模灵活快速的增加iframe即可。

同样,仍对比上面第二点提到的预先申请几个子域名以供iframe中的页面所用的方式,这种方式就相对静态化,当数据存储需求变化,原来预申请的几个子域名已经不足够存储应用数据时,则需要再申请几个新的子域名来满足增加的数据存储需求,非常不灵活。

本申请实施例的方法是一种动态创建iframe的方式,可以根据数据存储需求实时动态的引入新的子域名,即数据存储需要几个iframe,则创建几个引入子域名的iframe,可以很好的适应和满足数据存储需求;并且,该方法通过将域名设置为支持泛域名,使得该域名下可以有无限的子域名,随时可以根据数据存储需求建立一个该泛域名下的子域名,使用起来非常方便。

图2以一个例子,描述本申请实施例的数据存储方法的一个应用。在本例子中,假定一个域名(或子域名)对应的本地存储空间容量是5MB,并且假设当前的应用要在浏览器本地存储的应用数据为12MB,存储流程可以如下:

在步骤201中,调用浏览器的本地存储接口,向当前页面对应的域名下的存储空间存储应用数据。

例如,当前页面可以称为父页面,可以通过浏览器提供的local Storage、Index DB等API,向该父页面的域名对应的本地存储空间中存储应用数据。

在步骤202中,判断当前页面对应的所述域名下的存储空间,是否足够存储所述应用数据。

若判断结果为足够,则将应用数据存储在该当前页面的域名对应的存储空间即可,可以结束流程。

而本例子中,假定的需要存储的应用数据为12MB,当前页面的域名下的存储空间为5MB,则本步骤的判断结果为不足够,则可以继续执行步骤203。

在步骤203中,创建一个iframe,在所述iframe加载一个代理页面,所述代理页面对应所述域名下的一个子域名。

例如,可以在当前的父页面创建一个iframe,在所述iframe加载一个代理页面,该代理页面可以称为子页面。并且,本例子中,为了不影响父页面的体验,可以将创建的iframe中嵌入的子页面设置为不显示,例如,可以通过设置子页面的属性使得隐藏该页面。该子页面的创建,是为了使用该子页面的对应的子域名下的存储空间,该子域名是父页面的域名下的一个子域名。

本步骤中,若创建iframe中的代理页面失败,则继续重新执行步骤203,再次创建一个iframe,引入一个子域名对应的代理页面。

若创建iframe中的代理页面成功,则继续执行步骤204。

在步骤204中,调用浏览器的本地存储接口,在所述子域名对应的存储空间中继续存储应用数据。

例如,可以将在步骤201中向父页面的存储空间存储数据时,剩余未存储的应用数据继续存储在该子页面的存储空间。父页面和子页面之间的数据交互,可以是父页面将应用数据传输给子页面,以在子页面的存储空间进行存储;将应用数据由当前父页面传输至所述子域名对应的子页面。设置跨域数据传输的方法很多,例如其中一种方法可以是,采用postMessage API。

如下示例部分创建一个iframe以引入代理页面的实例:

创建一个iframe

var iframeNode=document.createElement("iframe")

所创建的该iframe中的子页面的地址

iframe.src="http://x.alipay.net/proxy.htm

父页面调用子页面,以将应用数据传输至子页面存储

document.appendChild(iframeNode)

本步骤中,在将应用数据向子域名下的存储空间存储时,仍然可以继续判断该子域名对应的存储空间是否足够存储应用数据,即可以返回执行步骤202。如果创建该一个iframe中的子页面足够,则可以结束流程;如果仍不足够存储应用数据,则继续执行步骤203,创建一个新的iframe,引入另一个新的子域名对应的代理页面,直至足够存储应用数据则不再创建。本例子中,为了存储12MB应用数据,需要创建两个iframe,每个iframe加载一个子域名下的代理页面。

在另一个例子中,不同于上述的每创建一个iframe就判断一次是否已经足够存储应用数据,本例子中可以预先根据应用数据的规模,计算应创建的iframe的数量;创建所述数量对应的iframe,且在每个iframe加载一个页面,每个所述页面对应泛域名下的一个子域名。比如,假设应用数据的规模是12MB,且每个子域名对应的存储空间是5MB,那么除去当前页面的5MB存储空间,还需要创建iframe以用于存储7MB的数据,该7MB的数据需要创建两个iframe,每个iframe加载对应泛域名下子域名的页面,两个子域名共可以产生10MB的存储空间,足够存储上述的7MB的剩余应用数据。

由以上说明可以看到,在浏览器本地存储应用数据时,可以根据数据存储需求,动态创建iframe,比如,如果需要再创建两个iframe可以足够存储数据,则创建两个,如果需要创建六个iframe才能足够存储数据,则创建六个,这种方式使得数据的存储不会受到浏览器的域名存储容量的限制,可以满足任何规模的数据存储需求;并且,通过泛域名的设置,可以支持无限的子域名,需要时创建即可,不需要额外再申请域名,使用非常方便。

此外,完成应用数据的存储后,当下次使用该数据时,例如,离线应用在离线时加载运行时,需要将这些存储的应用数据重新在浏览器加载,此时,可以分别由所述域名下的存储空间、以及至少一个所述子域名对应的存储空间中,获取所述应用数据。其中,子页面可以通过postMesage函数调用父页面的函数,将子页面存储的应用数据(即子页面对应的子域名下的存储空间中存储的数据)传输至父页面,在父页面统一显示应用数据。

此外,在上面的例子中,是以当前页面的域名为泛域名为例,在iframe中加载的页面对应的是该泛域名下的一个子域名。这只是一个例子,具体实施中并不局限于此,比如,创建的iframe中的页面,对应的仍然是某一个泛域名下的一个子域名,但是该泛域名并不是当前页面对应的域名,即当前页面的域名与上述的泛域名是不同的域名。

举例如下:假设当前页面域名是www.123.com,当该页面的域名下的存储空间不够存储应用数据时,创建一个iframe,该iframe中加载的页面对应某个泛域名下的一个子域名,该泛域名可以是*.abc.com,该泛域名下的一个子域名可以是456.abc.com。这种情况下,尽管当前页面域名与iframe中页面对应的泛域名不同,但是由于创建的仍然是泛域名下的子域名对应的页面,可以无限扩充,能够实现与前述例子相同的效果,即可以满足任何容量的数据存储需求。

为了实现上述的数据存储方法,本申请实施例还提供了一种数据存储装置,如下对该装置的结构做简单说明,其具体的工作原理可以结合参见方法实施例。如图3所示,该装置可以包括:数据存储模块31和页面创建模块32。

数据存储模块31,用于调用浏览器的本地存储接口,向当前页面对应的域名下的存储空间存储应用数据;还用于当所述域名下的存储空间不足以存储所述应用数据时,将剩余的应用数据存储在页面创建模块创建的至少一个所述子域名对应的存储空间;

所述页面创建模块32,用于当所述域名下的存储空间不足以存储所述应用数据时,创建至少一个超文本标记语言框架iframe,每个iframe加载一个页面,所述页面对应一个泛域名下的子域名。

在一个例子中,页面创建模块32,用于判断当前页面对应的所述域名下的存储空间,是否足够存储所述应用数据;若判断结果为不足够,则创建一个iframe,在所述iframe加载一个代理页面,所述代理页面对应所述域名下的一个子域名;当所述子域名对应的存储空间仍不足够存储所述应用数据时,继续创建一个iframe,在所述iframe加载一个对应所述域名下的另一个子域名的代理页面。

在一个例子中,页面创建模块32,用于根据所述应用数据的规模,计算应创建的iframe的数量;创建所述数量对应的iframe,且在每个iframe加载一个页面,每个所述页面对应泛域名下的一个子域名。

在一个例子中,数据存储模块31,在用于将剩余的应用数据存储在至少一个所述子域名对应的存储空间时,包括:将所述子域名对应的页面与所述域名对应的当前页面,设置为同域;将所述应用数据由当前页面传输至所述子域名对应的页面。

在一个例子中,如图4所示,该装置还可以包括:数据获取模块33,用于当在浏览器中加载存储的所述应用数据时,分别由所述域名下的存储空间、以及至少一个所述子域名对应的存储空间中,获取所述应用数据。

在一个例子中,所述泛域名是所述当前页面对应的域名;或者,所述泛域名是与当前页面的域名不同的另一个域名。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1