一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

页面缓存管理方法、装置、电子设备及存储介质与流程

2022-09-07 13:28:53 来源:中国专利 TAG:
1.本公开涉及计算机
技术领域
:,具体涉及一种页面缓存管理方法、装置、电子设备及存储介质。
背景技术
::2.web页面的开发者常会在web网页中添加页面缓存逻辑,对web页面中数据的进行缓存,便于在切换页面后,实现对web页面中相同数据的快速加载,提高对web页面记载效率。3.在web页面中添加缓存逻辑的方法不具有移植性,因此需要对web页面中包含数据的每一处位置都重复添加缓存逻辑,同时在web页面中添加缓存逻辑的方式,对web页面自身的侵入性很大,且实现缓存的效率很低。4.公开内容5.为克服上述问题的至少一个方面,本公开提供了一种页面缓存管理方法,包括:6.调用页面缓存管理对象,获取第一页面的数据作为缓存数据;7.调用页面缓存管理对象,加载所述缓存数据至第二页面;8.其中,所述页面缓存管理对象为scheme对象,所述scheme对象不包含所述第一页面的页面逻辑和所述第二页面的页面逻辑。9.可选地,所述调用页面缓存管理对象,获取第一页面的数据作为缓存数据,包括:10.调用页面缓存管理对象的拦截函数;11.设置所述拦截函数的缓存策略;12.基于所述缓存策略,通过所述拦截函数获取第一页面的数据作为缓存数据。13.可选地,所述基于所述缓存策略,通过所述拦截函数获取第一页面的数据作为缓存数据,包括:14.基于所述缓存策略,通过所述拦截函数获取第一页面的数据;15.拼接所述数据;16.储存拼接后的数据作为缓存数据。17.可选地,所述调用页面缓存管理对象,加载所述缓存数据至第二页面,包括:18.响应于切换至第二页面的请求,通过页面缓存管理对象获取缓存数据的单例;19.基于所述单例中缓存数据的存储地址,获取所述请求对应的数据;20.将所述数据返回至预先构建的response对象;21.加载所述response对象中的数据至第二页面。22.可选地,在所述响应于切换至第二页面的请求,通过页面缓存管理对象获取缓存数据的单例之前,包括:23.定义urlprotocol子类;24.在所述urlprotocol子类中构建加载数据的方法;25.对所述urlprotocol子类进行注册,以对页面切换请求进行监听。26.可选地,在所述调用页面缓存管理对象,获取第一页面的数据作为缓存数据之前,包括:27.获取所述页面缓存管理对象的类cls;28.获取所述页面缓存管理对象的注册函数的指针sel;29.使所述类cls响应所述注册函数的指针sel,以对所述页面缓存管理对象的进行注册。30.可选地,所述方法还包括:31.响应于页面关闭指令,获取所述页面缓存管理对象的取消注册函数的指针sel;32.使所述类cls响应所述取消注册函数的指针sel,以对所述页面缓存管理对象的进行取消注册。33.本公开还提供了一种页面缓存管理装置,包括:34.获取模块,用于调用页面缓存管理对象,获取第一页面的数据作为缓存数据;35.加载模块,用于调用页面缓存管理对象,加载所述缓存数据至第二页面;36.其中,所述页面缓存管理对象为scheme对象,所述scheme对象不包含所述第一页面的页面逻辑和所述第二页面的页面逻辑。37.本公开还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述任一所述的页面缓存管理方法。38.本公开还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现上述任一所述的页面缓存管理方法。39.基于上述技术方案可知,本公开至少具有以下有益效果:40.本公开提供了一种页面缓存管理方法,包括:调用页面缓存管理对象,获取第一页面的数据作为缓存数据;调用页面缓存管理对象,加载所述缓存数据至第二页面,所述页面缓存管理对象为scheme对象,所述scheme对象不包含所述第一页面的页面逻辑和所述第二页面的页面逻辑。不包含所述第一页面和所述第二页面的页面逻辑的scheme对象,在不对web页面进行修改的情况下,实现一次注册,就可执行对web页面中的全部数据进行缓存,减少对web页面的侵入性,提高缓存效率。附图说明41.为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,其中:42.图1示意性地示出了根据本公开实施例的页面缓存管理方法的流程图;43.图2示意性地示出了根据本公开实施例的页面缓存管理装置的框图;44.图3示意性地示出了根据本公开实施例的电子设备的硬件结构图。具体实施方式45.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。46.在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。除非另外定义,木公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人上所理解的通常意义。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。47.图1示意性地示出了根据本公开实施例的页面缓存管理方法的流程图。如图1所示,本公开提供了一种页面缓存管理方法,方法包括:48.步骤s101,调用页面缓存管理对象,获取第一页面的数据作为缓存数据;49.步骤s102,调用页面缓存管理对象,加载缓存数据至第二页面。50.示例性地,若在服务器端中执行上述步骤s101和s102的操作,则服务器端调用页面缓存管理对象,获取客户端中的第一页面的数据作为缓存数据,在页面切换后,将缓存的数据发送至客户端,并在将数据加载至客户端显示第二页面中相应的位置以显示页面数据。若在客户端中执行上述步骤s101和s102的操作,则客户端直接调用页面缓存管理对象,直接获取客户端中的第一页面的数据作为缓存数据,在页面切换后,直接将缓存的数据加载至客户端显示第二页面中相应的位置以显示页面数据,无需执行缓存数据的发送,提高页面缓存管理的效率。51.在本公开实施例中,页面缓存管理对象为不包含第一页面和第二页面的页面逻辑的scheme对象。页面缓存管理对象是独立于第一页面和第二页面外部的执行对象,不包含第一页面和第二页面自身的页面逻辑框架和页面逻辑语言等,因此页面缓存管理对象具有稳定的移植性,可在不对页面自身进行修改的情况下,即不在页面中添加缓存逻辑时,实现执行对当前页面的数据进行缓存和加载缓存数据至切换后的第二页面中的操作。同时,只需要对页面缓存管理对象进行一次注册,则可以对页面中的全部数据进行缓存,以及加载缓存数据至切换后的第二页面中。无需在页面中多次重复添加相同的缓存逻辑,减少对页面的侵入性,提高缓存效率。52.作为一可选实施例,在步骤s101之前,在调用页面缓存管理对象,获取第一页面的数据作为缓存数据之前,方法至少包括以下步骤:53.步骤s103,获取页面缓存管理对象的类cls;54.步骤s104,获取页面缓存管理对象的注册函数的指针sel;55.步骤s105,使类cls响应注册函数的指针sel,以对页面缓存管理对象的进行注册。56.在本公开实施例中,页面缓存管理对象具有注册和取消注册的功能。对页面缓存管理对象注册后,则页面缓存管理对象可以开始执行后续对页面缓存进行管理的操作。当页面缓存管理对象被注册后,第一页面被打开后,开始获取第一页面中的数据,当第一页面被切换至第二页面时,则将前一步缓存数据加载至第二页面中。第二页面可以为第一页面刷新后的页面,也可以是与第一页面关联的页面。第二页面显示的数据与第一页面相同,或部分相同。则可以将从第一页面缓存的数据,直接加载至第二页面中。当页面缓存管理对象注册后,可以直接自动执行对页面中所有数据的缓存管理操作,无需再对页面进行其他的修改。即实现一次注册,则可以对web页面中的全部数据进行缓存的效果。57.具体地,实现注册的函数是wk_rgscheme,无返回值,注册的方法为 (void)wk_rgscheme:(nsstring*)scheme。注册过程的具体实现方法是,使用classcls=contextcontrollerclass()获取到当前的控制器的类,即cls;再获取页面缓存管理对象scheme的注册函数的指针sel,指针具体为selsel=rgschemeselector()。进一步判断cls类是否可以响应该指针,具体的判断方法为if([(id)clsrespondstoselector:sel]);若该cls类可以响应该指针sel,则通过[(id)clsperformselector:selwithobject:scheme]使cls类响应该指针sel,即实现了对页面缓存管理对象scheme的注册,具体的注册的页面缓存管理对象是http和https。[0058]同时,还需要webview实现加载页面,当在加载web视图时,已注册的页面缓存管理对象就自动地实现完全无侵入的缓存和存储数据的过程。[0059]作为一种可选实施例,在执行步骤s101中,调用页面缓存管理对象,获取第一页面的数据作为缓存数据,至少包括以下步骤:[0060]步骤s111,调用页面缓存管理对象的拦截函数;[0061]步骤s112,设置拦截函数的缓存策略[0062]步骤s113,基于缓存策略,通过拦截函数获取第一页面的数据作为缓存数据。[0063]在本公开实施例中,已被注册的页面缓存管理对象,可对当前的第一页面中的数据进行缓存。缓存过程具体可以是,调用拦截函数urlsession:(nsurlsession*)session对页面中的数据进行拦截,即获取当前第一页面中的数据。其中,拦截函数需要两个参数datatask和response,datatask的类型是(nsurlsessiondatatask*)datatask,response的类型是(nsurlresponse*)respons。在拦截函数urlsession:(nsurlsession*)session的内部实现过程中,首先获取当前页面所在的客户端self.client,客户端self.client调用urlprotocol,urlprotocol中包含一个可以接收数据的方法didreceiveresponse,即拦截函数通过方法didreceiveresponse获取当前第一页面的数据。同时,还需要设置拦截函数中的缓存策略,缓存策略具体为nsurlcachestorageallowed。在获取到数据后,将数据存储起来作为缓存数据,其中数据为self.responsedata=[[nsmutabledataalloc]init]。[0064]在一具体实施中,在步骤s113中,基于缓存策略,通过拦截函数获取第一页面的数据作为缓存数据,至少包括以下步骤:[0065]步骤s1131,基于缓存策略,通过拦截函数获取第一页面的数据;[0066]步骤s1132,拼接数据;[0067]步骤s1133,储存拼接后的数据作为缓存数据。[0068]具体地,在拦截函数urlsession:(nsurlsession*)session实现对数据缓存的具体过程中,需要三个参数datatask、response和didreceivedata,datatask的类型是(nsurlsessiondatatask*)datatask,response的类型是(nsurlresponse*)respons,didreceivedata的类型是(nsdata*)data。基于拦截获取第一页面的数据,采用[self.responsedataappenddata:data]拼接方法对数据进行拼接。对拼接后的数据通过[[selfclient]urlprotocol:selfdidloaddata:data]进行处理,最终实现对获取到的数据进行存储,将存储后的数据作为缓存数据。其中,selfclient是当前的请求的客户端对象,self是当前的urlprotocol对象,data是接收到的数据。使用具有非侵入式性质的页面缓存管理对象scheme对数据进行拦截和存储之后,存储的缓存数据可被加载至其他页面中显示。[0069]作为一种可选实施例,在步骤s102中,调用页面缓存管理对象,加载缓存数据至第二页面,至少包括以下步骤:[0070]步骤s121,响应于切换至第二页面的请求,通过页面缓存管理对象获取缓存数据的单例;[0071]步骤s122,基于单例中缓存数据的存储地址,获取请求对应的数据;[0072]步骤s123,将数据返回至预先构建的response对象;[0073]步骤s124,加载response对象中的数据至第二页面。[0074]具体的,在步骤s121之前,在响应于切换至第二页面的请求,通过页面缓存管理对象获取缓存数据的单例之前,至少包括以下步骤:[0075]步骤s125,定义urlprotocol子类;[0076]步骤s126,在urlprotocol子类中构建加载数据的方法;[0077]步骤s127,对urlprotocol子类进行注册,以对页面切换请求进行监听。[0078]在本实施例中,在定义的urlprotocol子类中构建加载数据的方法,包括开始加载的方法startloading函数,在viewdidload中使用[nsurlprotocolregisterclass:[dyurlprotocolclass]]完成对protocol的注册。对页面切换的请求进行监听,当监听到由第一页面切换至第二页面时,创建一个加载缓存数据的请求,即通过mutablereqeust创建一个加载请求,具体创建请求的方法为nsmutableurlrequest*mutablereqeust=[[selfrequest]mutablecopy]。此时,在储存缓存数据的内存中调用一个key去获取已经缓存的数据。获取已缓存数据的具体方法为:首先通过url获取key,其中获取key的方法为nsstring*key=[[webimagemanagersharedmanager]cachekeyforurl:self.request.url]。然后通过key获取缓存数据,其中获取缓存数据的方法为nsdata*data=[[sdimagecachesharedimagecache]performselector:@selector(diskimagedatabysearchingallpathsforkey:)withobject:key]。[0079]具体地,获取缓存数据的方法中[sdimagecachesharedimagecache]是一个存储的缓存的单例,通过单例,可以找到缓存数据的存储地址,则获取到url对应的存储的具体地缓存数据。其中,获取缓存数据的方法中@selector(diskimagedatabysearchingallpathsforkey:)withobject:key为缓存数据。在获取到所需的缓存数据后,将缓存数据返回至预先构建的response对象。构建response对象的具体方法为使用nsurlresponsealloc对象创建response基础对象,这个response基础对象调用initwithurl:mutablereqeust.urlmimetype:@″image/png/jpg″方法来构建一个response对象。最后通过self.client方法获取这个当前的客户端对象,客户端对象获取response对象,并在第二页面中进行缓存数据的加载,加载的方法可以是urlprotocol:selfdidloaddata:data]。[0080]在实际的缓存过程中,会存在需要获取的缓存数据不存在的情况。在此种情况下,可通过原始的数据加载方法,获取第二页面需要显示的数据。具体的加载方法为常见的web页面从数据库获取并加载数据的方法,本公开在此不作具体的说明。[0081]通过本公开实施例,页面缓存管理对象具有获取缓存数据和加载缓存数据的能力,则在对页面管理对象注册后,可在监听到页面切换请求后,需要再添加额外的操作,直接执行对页面数据的非侵入式的缓存和加载。[0082]作为一可选实施例,页面缓存管理方法还包括以下步骤:[0083]步骤s106,响应于页面关闭指令,获取页面缓存管理对象的取消注册函数的指针sel;[0084]步骤s107,使类cls响应取消注册函数的指针sel,以对页面缓存管理对象的进行取消注册。[0085]在本实施例中,当页面关闭时,可响应于页面关闭的指令,对页面缓存管理对象进行取消注册。取消注册的过程与注册过程类似。[0086]具体地,实现取消注册的函数是unrgscheme,无返回值,取消注册的方法是 (void)wk_unrgscheme:(nsstring*)scheme。具体地实现方法可以是,使用classcls=contextcontrollerclass()获取到当前的控制器的类,即cls;再获取页面缓存管理对象的取消注册函数的指针sel,指针具体为selsel=unregisterschemeselector();判断cls类是否可以相应该指针,具体的判断方法为if([(id)clsrespondstoselector:sel]);若该cls类可以响应该指针sel,则通过[(id)clsperformselector:selwithobject:scheme]使cls类响应该指针sel,即实现了对页面缓存管理对象的取消注册。[0087]参见图2,本公开还提供了一种页面缓存管理装置200,装置200包括:[0088]获取模块210,用于调用页面缓存管理对象,获取第一页面的数据作为缓存数据;[0089]加载模块220,用于调用页面缓存管理对象,加载缓存数据至第二页面;[0090]其中,页面缓存管理对象为scheme对象,该scheme对象不包含第一页面的页面逻辑和第二页面的页面逻辑。[0091]本实施例中,获取模块210,包括:调用单元211,用于调用页面缓存管理对象的拦截函数;设置单元212,用于设置拦截函数的缓存策略;第一获取单元213,用于基于缓存策略,通过拦截函数获取第一页面的数据作为缓存数据。[0092]具体的,第一获取单元213包括:第二获取单元2131,用于基于缓存策略,通过拦截函数获取第一页面的数据;拼接单元2232,用于拼接数据;存储单元2133,用于储存拼接后的数据作为缓存数据。[0093]本实施例中,加载模块220,包括:第三获取单元221,用于响应于切换至第二页面的请求,通过页面缓存管理对象获取缓存数据的单例;第四获取单元222,用于基于单例中缓存数据的存储地址,获取请求对应的数据;返回单元223,用于将数据返回至预先构建的response对象;加载单元224,用于加载response对象中的数据至第二页面。[0094]加载模块220还包括:定义单元225,用于定义urlprotocol子类;构建单元226,用于urlprotocol子类中构建加载数据的方法;注册单元227,用于对urlprotocol子类进行注册,以对页面切换请求进行监听。[0095]装置200还包括:第五获取单元230,用于获取页面缓存管理对象的类cls;第六获取单元240,用于获取页面缓存管理对象的注册函数的指针sel;第一响应单元250,用于使类cls响应注册函数的指针sel,以对页面缓存管理对象的进行注册。第七获取单元260,用于响应于页面关闭指令,获取页面缓存管理对象的取消注册函数的指针sel;第二响应单元270,用于使类cls响应取消注册函数的指针sel,以对页面缓存管理对象的进行取消注册。[0096]图3示出了一种电子设备的硬件结构图。[0097]如图3所示,本实施例中所描述的电子设备,包括:[0098]存储器301、处理器302及存储在存储器301上并可在处理器302上运行的计算机程序,处理器302执行该程序时实现前述图1所示实施例中描述的页面缓存管理方法。[0099]进一步地,该电子设备还包括:[0100]至少一个输入设备303;至少一个输出设备304。[0101]上述存储器301、处理器302输入设备303和输出设备304通过总线305连接。[0102]其中,输入设备303具体可为摄像头、触控面板、物理按键或者鼠标等等。输出设备304具体可为显示屏。[0103]存储器301可以是高速随机存取记忆体(ram,randomaccessmemory)存储器,也可为非不稳定的存储器(non-volatilememory),例如磁盘存储器。存储器301用于存储一组可执行程序代码,处理器302与存储器301耦合。[0104]进一步地,本公开实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是设置于上述各实施例中的电子设备中,该计算机可读存储介质可以是前述图3所示实施例中的电子设备。该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现前述图1所示实施例中描述的页面缓存管理方法。进一步地,该计算机可存储介质还可以是u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。[0105]需要说明的是,在本公开各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。[0106]所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来。[0107]需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本公开并不受所描述的动作顺序的限制,因为依据本公开,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本公开所必须的。[0108]在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。[0109]以上为对本公开所提供的一种页面缓存管理方法、装置、电子设备及可读存储介质的描述,对于本领域的技术人员,依据本公开实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本公开的限制。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献