发明内容
本发明的目的是提供一种高效可靠的嵌入式浏览器磁盘缓存方法,通过磁盘缓存读写模块和磁盘缓存更新模块的互相配合,减少了使用磁盘缓存时不必要的服务器端连接,提高了网络资源的访问速度。
为实现上述目的,本发明提供了一种嵌入式浏览器的磁盘缓存方法,所述方法包含:
步骤101,启动第一线程和第二线程,并等待浏览器的下载请求事件;
步骤102,当浏览器接收到下载请求时:
第一线程用于下载请求中磁盘缓存的写入和读出;
第二线程以一定的时间间隔,在浏览器空闲时从后台发起下载请求更新缓存资源;
其中,
所述线程也能够采用进程;
当第二线程更新磁盘缓存信息时,第一线程与第二线程对磁盘缓存信息的单个资源互斥访问;
当第一线程读写磁盘缓存信息时,第二线程与第一线程对磁盘缓存信息互斥访问;
且第二线程的线程执行优先级比第一线程的低。
上述步骤102进一步包含:
步骤102-1)第一线程检查磁盘缓存是否包含请求资源,若磁盘缓存包含请求资源并且该资源当前没有被第二线程更新,则直接读取磁盘缓存的内容,由浏览器内核渲染并显示页面;反之,直接发起网络下载请求,获得下载数据后写入到磁盘缓存,下载数据交浏览器内核渲染、显示;
步骤102-2)第二线程依据策略选取一定时期内的磁盘缓存作为更新的备选项,当更新时机成熟时,从后台逐一发起更新备选项的资源下载请求,若通过与服务器验证该资源未过期,则更新资源的存储日期;如果资源已过期,则下载新的资源替代旧的资源,并且更新资源的下载时间为当前时间;磁盘缓存更新模块更新结束之后,选择新的更新备选项,等待时机进行下次更新;
其中,所述策略为:选取备选更新资源,通过结合资源的优先级、资源的本地更新时间建立优先队列进而维护磁盘缓存更新备选资源的更新优先级,依照优先级依次更新缓存资源。
上述步骤102-1)进一步包含:
步骤102-1-1)当浏览器接收到用户的下载请求时,则进入步骤102-1-2;当接收到浏览器退出请求时,则退出程序;
步骤101-1-2)如果当前磁盘缓存中包含请求下载的内容时,则阻塞磁盘缓存存储线程,进入步骤102-1-3;
步骤102-1-3)浏览器读写磁盘缓存时是对磁盘缓存的单个记录互斥的访问,这样当第二线程更新磁盘缓存的某条记录时,第一依然能够读写其它当前未被更新的缓存记录;当第一线程不能互斥访问某条缓存记录时,进入步骤102-1-6,反之进入步骤102-1-4;
步骤102-1-4,发起网络下载请求,进入步骤102-1-6;
在步骤102-1-5,第一线程读取缓存数据,进入步骤102-1-7;
步骤102-1-6,根据HTTP协议下载接收网络数据,进入步骤102-1-7;
步骤101-1-7,主线程将读取的缓存数据解析渲染到屏幕上,呈现给用户,进入步骤102-1-1;
步骤102-1-8,如果接收到的数据在磁盘缓存中已经存储过,则更新磁盘缓存信息,进入步骤102-1-7,反之,进入步骤102-1-9;
步骤102-1-9,将接收的数据添加到磁盘缓存中。
上述步骤102-2)进一步包含:
步骤102-2-1,第二线程定期运行,选择需要更新的缓存条目;第二线程选择需要更新的缓存条目时,对磁盘缓存信息的访问同第一线程是互斥的,即当第一线程访问磁盘缓存信息时,第二线程就处于休眠状态;第一线程的读写互斥粒度比第二线程的互斥力度更细,因此第二线程的线程执行优先级就比较低;第二线程选定磁盘缓存更新备选项之后,进入步骤102-2-2;
步骤102-2-2,第二线程在浏览器处于空闲的时候定期发起更新请求,进入步骤102-2-3;
步骤102-2-3,第二线程依据磁盘缓存被选项资源的优先级以及磁盘缓存被选项的上次更新时间以优先队列的形式维护更新被选项,更新时从后台按照资源在优先队列中的顺序顺次发起更新请求,进入步骤102-2-4;
步骤102-2-4,第二线程接收到更新的数据之后,更新磁盘缓存内容。
此外,本发明还提供了一种嵌入式浏览器的磁盘缓存系统,所述系统包含:
浏览器运行磁盘缓存读写模块,用于网络下载请求中磁盘缓存数据的读取和写入;和
浏览器磁盘缓存更新模块,用于选取备选更新资源,通过结合资源的优先级、资源的本地更新时间建立优先队列,该队列用于维护磁盘缓存更新备选资源的更新优先级,以一定的时间间隔,在浏览器比较空闲的时候从后台发起下载请求,依照优先级依次更新缓存资源;
其中,所述磁盘缓存读写模块和磁盘缓存更新模块并行执行,且两个模块分别在不同的线程或者进程中执行,所述磁盘缓存读写模块和磁盘缓存更新模块对磁盘缓存的访问采用不同的互斥粒度。
上述浏览器运行磁盘缓存读写模块进一步包含:
检查及判决子模块,用于检查磁盘缓存是否包含请求资源,若磁盘缓存包含请求资源并且该资源当前没有被第二线程更新,则启动读取子模块;若磁盘缓存不包含请求资源,则启动下载请求子模块;
读取子模块,用于直接读取磁盘缓存的内容,由浏览器内核渲染并显示页面;
下载请求子模块,用于直接发起网络下载请求,获得下载数据后启动写入子模块;和
写入子模块,用于将获得的下载数据写入到磁盘缓存,并下载数据交浏览器内核渲染、显示。
上述浏览器磁盘缓存更新模块进一步包含:
更新备选项选择就排序子模块,用于选取一定时期内的磁盘缓存作为更新的备选项,通过结合更新备选项的资源的优先级、资源的本地更新时间建立优先队列进而维护磁盘缓存更新备选项包含的资源的更新优先级;和
更新子模块,用于当更新时机成熟时,从后台逐一发起更新备选项的资源下载请求,若通过与服务器验证该资源未过期,则更新资源的存储日期;如果资源已过期,则下载新的资源替代旧的资源,并且更新资源的下载时间为当前时间。
综上所述,本发明提供了一种嵌入式浏览器磁盘缓存方法,浏览器运行磁盘缓存读写模块和磁盘缓存更新模块,磁盘缓存读写模块用来读取或者写入网络资源,磁盘缓存更新模块用于更新缓存的资源,该方法包含如下步骤:发起资源下载请求时,磁盘缓存读取模块查询磁盘缓存中是否包含请求资源,若磁盘缓存包含请求资源并且磁盘缓存更新模块当前没有对该资源更新,则由磁盘缓存读取模块直接读取该资源,并上传给浏览器内核渲染显示;反之,直接发起网络下载请求,磁盘缓存读写模块将接收到的资源存储到磁盘缓存中;磁盘缓存更新模块根据资源的优先级和本地更新时间,选取合适的资源作为更新备选资源,时机成熟时从后台逐一发起下载请求,通过服务器端验证资源有效性并且更新资源。
与现有技术相比,本发明的技术优势在于:
通过将缓存的读写和缓存的更新操作分别处在不同的进程或线程中执行,从而避免了下载资源阶段,读取缓存资源时连接服务器端的资源有效性验证,减少了不必要的连接,可以提高资源的访问速度,增强用户上网体验,进一步提高了嵌入式浏览器的性能。即,本发明提出一种使用缓存的时候不需要再连接服务器端验证,可以直接读取缓存的嵌入式浏览器磁盘缓存技术,浏览器运行磁盘缓存读写模块和磁盘缓存更新模块,磁盘缓存读写模块和磁盘缓存更新模块并行执行,分别在不同的线程或者进程中执行,磁盘缓存读写模块用于网络下载请求中磁盘缓存的写入和直接读取,避免再去服务器端进行资源有效性验证;该处的直接读取含义是相对于之前的磁盘缓存方案来说的,之前的磁盘缓存方案依据HTTP1.1协议,缓存在读取之前必须先验证其有效性,一般是提供缓存的信息链接到服务器端再验证缓存是否有效,根据服务器端的应答结果来判读是从服务器端读取新的资源还是直接使用缓存;本发明的方案在使用缓存资源的时候不需要再去服务器端验证资源的有效性,因此说“直接读取”。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
本发明是一种基于磁盘的嵌入式浏览器缓存方法实现的方案,其核心在于:本发明的嵌入式浏览器磁盘缓存的存储介质为磁盘;浏览器运行磁盘缓存读写模块和磁盘缓存更新模块,磁盘缓存读写模块用于网络下载请求时读取和写入磁盘缓存数据,磁盘缓存更新模块用于定期在后台更新磁盘缓存数据;磁盘缓存读写模块和磁盘缓存更新模块是并行执行的,分别在不同的进程或者线程中执行;磁盘缓存更新模块通过建立优先队列,结合资源的优先级、资源的本地更新时间来存储访问磁盘缓存;当浏览器接收到下载请求时,磁盘缓存读写模块与磁盘缓存更新模块之间互斥地访问磁盘缓存检索信息,检查磁盘缓存是否包含请求资源,若磁盘缓存包含请求资源并且该资源当前没有被磁盘缓存更新模块更新,则直接读取磁盘缓存的内容,由浏览器内核渲染并显示页面,反之直接发起网络下载请求,获得下载数据后写入到磁盘缓存,下载数据交浏览器内核渲染、显示;磁盘缓存更新模块更新磁盘缓存信息时,磁盘缓存读写模块与其互斥地访问磁盘缓存的某一项记录;磁盘缓存更新模块选取一定时期内的磁盘缓存作为更新的备选项,结合资源的优先级和缓存的更新时间,以优先队列的数据格式维护磁盘缓存更新备选项列表,当时机成熟时,从后台逐一发起更新备选项的资源下载请求,更新磁盘缓存;磁盘缓存更新模块下载到新的资源数据之后只是更新磁盘缓存,而不显示到磁盘缓存更新模块更新结束之后,选择新的更新备选项,等待时机进行下次更新。
图1为本发明实施例嵌入式浏览器磁盘缓存的方法流程图。嵌入式浏览器运行第一线程和第二线程,其中第一线程对应于图1中左半部分的磁盘缓存读写模块,第二线程对应于图1中右半部分的磁盘缓存更新模块。浏览器磁盘缓存读写模块用于在网络下载请求中读写磁盘缓存,执行步骤101-115,其中第一线程就是主线程,第二线程就是缓存更新线程。磁盘缓存更新模块用于更新磁盘缓存信息,执行步骤200-204。具体步骤如下:
在步骤101:流程开始,用户启动浏览器。
在步骤102:浏览器主线程和磁盘缓存更新线程被开启,浏览器主线程进入步骤103,磁盘缓存存储线程进入步骤200。
在步骤103,浏览器主线程完成初始化工作后进入浏览器事件循环,等待用户操作
以下为浏览器主线程执行步骤:
在步骤104:当浏览器接收到用户的下载请求时,则进入步骤107;当接收到浏览器退出请求时,则进入到步骤105判断是否有退出请求,如果有则进入步骤115结束,否则还回到该步骤继续判断是否有用户的下载请求。
在步骤107:如果当前磁盘缓存中包含请求下载的内容时阻塞磁盘缓存存储线程。进入步骤108。
在步骤108,浏览器磁盘缓存读写模块读写磁盘缓存时是对磁盘缓存的单个记录互斥的访问,这样当磁盘缓存更新模块更新磁盘缓存的某条记录时,磁盘缓存读写模块依然可以读写其它当前未被更新的缓存记录,避免了无谓的等待,提高了用户体验;当磁盘缓存读写模块不能互斥访问某条缓存记录时,进入步骤111,反之进入步骤109。
在步骤109:发起网络下载请求,进入步骤111。
在步骤110:浏览器磁盘缓存读写模块读取缓存数据,进入步骤112。
在步骤111:根据HTTP协议下载接收网络数据,进入步骤113。
在步骤112:主线程将读取的缓存数据解析渲染到屏幕上,呈现给用户,进入步骤104。
在步骤113:如果接收到的数据在磁盘缓存中已经存储过,则更新磁盘缓存信息,进入步骤112,反之,进入步骤114。
在步骤114:将接收的数据添加到磁盘缓存中,进入步骤112。
以下是磁盘缓存更新模块所在线程执行步骤:
在步骤200:启动磁盘缓存更新模块。
在步骤201:磁盘缓存更新模块定期运行,选择需要更新的缓存条目。这里磁盘缓存更新模块选择需要更新的缓存条目时,对磁盘缓存信息的访问同磁盘缓存读写模块之间是互斥的,即当磁盘缓存读写模块访问磁盘缓存信息时,磁盘缓存更新模块就处于休眠状态,这样避免了磁盘缓存读写模块访问磁盘缓存时CPU被额外的线程占用,由于磁盘缓存读写模块的读写互斥粒度比磁盘缓存更新模块的互斥力度更细,因此磁盘缓存更新模块所在的线程执行优先级就比较低,这样就降低了磁盘缓存更新时对用户下载请求资源的影响,提高了用户体验。磁盘缓存更新模块选定磁盘缓存更新备选项之后,进入步骤202。
在步骤202:磁盘缓存更新模块所处线程在浏览器处于空闲的时候定期发起更新请求,进入步骤203。
在步骤203:磁盘更新模块所处的线程依据磁盘缓存被选项资源的优先级以及磁盘缓存被选项的上次更新时间以优先队列的形式维护更新被选项。更新时从后台按照资源在优先队列中的顺序顺次发起更新请求,进入步骤204。
在步骤204:磁盘更新模块接收到更新的数据之后,更新磁盘缓存内容。然后进入步骤201。
综上所述,本发明提供的一种嵌入式浏览器的磁盘缓存方法,所述浏览器运行磁盘缓存读写模块和磁盘缓存更新模块,磁盘缓存读写模块和磁盘缓存更新模块并行执行,分别在不同的线程或者进程中执行,对磁盘缓存的访问采用不同的互斥粒度;所述磁盘缓存读写模块用于网络下载请求中磁盘缓存数据的读取和写入,所述磁盘缓存更新模块选取备选更新资源,通过结合资源的优先级、资源的本地更新时间建立优先队列来维护磁盘缓存更新备选资源的更新优先级,以一定的时间间隔,在浏览器比较空闲的时候从后台发起下载请求,依照优先级依次更新缓存资源。所述磁盘缓存更新模块从后台更新资源时,只是从服务器端请求更新资源而不将资源传递给浏览器内核渲染。所述资源优先级指符合数字电视业务上的特点的资源优先级。当所述磁盘缓存更新模块更新磁盘缓存信息时,所述磁盘缓存读写模块与磁盘缓存更新模块之间对磁盘缓存信息的单个资源互斥访问。当所述磁盘缓存读写模块读写磁盘缓存信息时,所述磁盘缓存更新模块与磁盘缓存读写模块之间对磁盘缓存信息互斥访问。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。