发明内容
本申请所要解决的技术问题是提供一种IE内核浏览器的页面下载控制方法,用以有效控制IE内核浏览器的页面下载过程,提高页面下载的效率和稳定性。
相应地,本申请还提供了一种IE内核浏览器的页面下载控制系统,用以保证上述方法在实际中的应用。
本申请提供了一种IE内核浏览器的页面下载控制方法,包括:
启动IE内核浏览器进程,并启动预置的下载进程;
在所述IE内核浏览器进程中注册通信协议,等待基于相应通信协议的页面下载请求;
当所述IE内核浏览器进程收到页面下载请求时,将所述页面下载请求发送给下载进程;
下载进程获取所述页面下载请求对应的文件大小信息;
当所述文件大小信息超过预设的文件大小阈值时,采用多线程下载的方式执行相应页面的下载操作;
下载进程在所述页面下载操作过程中向IE内核浏览器进程返回下载状态信息。
优选的是,所述的方法,还包括:
当所述文件大小信息未超过预设的文件大小阈值时,采用单线程下载的方式执行相应页面的下载操作。
优选的是、所述的方法,其特征在于,还包括:
所述IE内核浏览器进程依据所述下载状态信息,对下载的页面数据进行解析、执行、和/或渲染的操作。
优选的是,所述在IE内核浏览器进程中注册通信协议的步骤为,使用IInternetSession接口的RegisterNameSpace方法,在IE内核浏览器进程中注册通信协议,所述通信协议包括http协议、https协议、mailto协议和FTP协议。
优选的是,在下载进程获取所述页面下载请求对应的文件大小信息的步骤之前,还包括:
下载进程将所述页面下载请求添加至预先生成的下载任务列表中;
获取所述页面下载请求对应的页面资源类型,在所述下载任务列表中,按照所述页面资源类型对页面下载请求进行排序;
依次处理所述下载任务列表中的页面下载请求。
优选的是,所述页面下载请求中包括URL信息,所述URL信息中包括扩展名信息,所述页面下载请求对应的页面资源类型通过读取所述扩展名信息获取。
优选的是,在下载进程获取所述页面下载请求对应的文件大小信息的步骤之前,还包括:
下载进程根据所述页面下载请求判断所请求的文件是否已被预先写入缓存中,若是,则从缓存中提取该文件;若否,则开始执行获取所述页面下载请求对应的文件大小信息的步骤。
优选的是,所述的方法还包括:
将下载的文件写入缓存。
优选的是,所述的方法还包括:
在从缓存中提取文件进行下载的步骤之前,查询该文件写入缓存的时间是否超过预设期限,若是,则开始执行获取所述页面下载请求对应的文件大小信息的步骤;否则,执行从缓存中提取文件的步骤。
本申请还提供了一种IE内核浏览器的页面下载控制系统,包括:
启动模块,用于启动IE内核浏览器进程,并启动预置的下载进程;
协议注册模块,用于在所述IE内核浏览器进程中注册通信协议,等待基于相应通信协议的页面下载请求;
请求传送模块,用于在IE内核浏览器进程收到页面下载请求时,将所述页面下载请求发送给下载进程;
文件大小获取模块,用于由下载进程获取所述页面下载请求对应的文件大小信息;
多线程下载模块,用于在所述文件大小信息超过预设的文件大小阈值时,采用多线程下载的方式执行相应页面的下载操作;
状态汇报模块,用于在所述页面下载操作过程中向IE内核浏览器进程返回下载状态信息。
优选的是,所述的系统还包括:
单线程下载模块,用于在所述文件大小信息未超过预设的文件大小阈值时,采用单线程下载的方式执行相应页面的下载操作。
优选的是,所述的系统还包括:
内核操作模块,用于由所述IE内核浏览器进程依据所述下载状态信息,对下载的页面数据进行解析、执行、和/或渲染的操作。
优选的是,所述的系统还包括:
任务添加模块,用于由下载进程将所述页面下载请求添加至预先生成的下载任务列表中;
排序模块,用于获取所述页面下载请求对应的页面资源类型,在所述下载任务列表中,按照所述页面资源类型对页面下载请求进行排序;
下载执行模块,用于依次处理所述下载任务列表中的页面下载请求,调用所述文件大小获取模块。
优选的是,所述页面下载请求中包括URL信息,所述URL信息中包括扩展名信息,所述页面下载请求对应的页面资源类型通过读取所述扩展名信息获取。
优选的是,所述的系统还包括:
缓存判断模块,用于由下载进程根据所述页面下载请求判断所请求的文件是否已被预先写入缓存中,若是,则触发缓存提取模块;若否,则触发文件大小获取模块;
缓存提取模块,用于从缓存中提取该文件。
优选的是,所述的系统还包括:
缓存写入模块,用于将下载的文件写入缓存。
优选的是,所述的系统还包括:
缓存超期判断模块,用于查询该文件写入缓存的时间是否超过预设期限,若是,则调用文件大小获取模块,若否,则调用所述缓存提取模块。
与现有技术相比,本申请具有以下优点:
本申请使用IE的协议管理扩展接口,来将IE内核浏览器的全部下载都自己接管,从而使嵌入IE内核浏览器的外壳程序,能够自行控制浏览器内核的下载,并将下载后的数据送回IE内核,让其继续执行解析、执行、渲染的工作。由于下载行为不发生在浏览器进程,当下载遇到问题程序崩溃时,浏览器进程不会随之崩溃。可以重新启动一个下载进程继续下载。因而,本申请可以有效控制IE内核浏览器的页面下载过程,以提高页面下载的效率和稳定性。
再者,本申请通过采用多线程下载、资源排序和缓存读写的下载优化方案,能提升下载速度和页面展现速度,充分发挥用户的带宽,提高资源利用率。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请的核心构思在于,使嵌入IE内核浏览器的外壳程序,能够自行控制浏览器内核的下载,并将下载后的数据送回IE内核,让其继续执行解析、执行、渲染的工作。
参考图1,示出了本申请的一种IE内核浏览器的页面下载控制方法实施例1的步骤流程图,具体可以包括以下步骤:
步骤101、启动IE内核浏览器进程,并启动预置的下载进程;
在本申请实施例中,所述IE内核浏览器进程是指采用IE(InternetExplorer)浏览器内核的浏览器进程。现有技术中,浏览器内核负责对页面进行下载、解析、执行、渲染,而在本实施例中,IE浏览器内核仅用于完成解析、执行、渲染的操作,下载的操作由预置的下载进程完成。
公知的是,进程是一个正在执行的程序,即计算机中正在运行的程序实例;其可以分配给处理器并作为一个实体由处理器执行。从用户角度来看,浏览器进程可以理解为在任务管理器内所启动的浏览器代表的进程,
所述下载进程可以理解为IE内核浏览器的另外一个进程,是一个专门用于下载操作的进程。即所述下载进程专门用于下载,而不做其他操作。作为本申请实施例具体实现的一种示例,所述下载进程内部可以使用WinHTTP(WinHTTP的全称是Microsoft Windows HTTP Services,它提供给开发者一个HTTP客户端应用程序接口(API),通过这种API借助HTTP协议给其他的HTTP服务器发送请求.)实现一个下载器,和一个下载管理器。即所述下载进程中包括一个下载管理器和一些下载器。所述下载管理器用于按照预设的下载规则控制页面下载,例如对下载资源的请求进行排序、优化等;下载器则用于实现具体的下载操作,并通过下载管理器向IE内核浏览器进程报告下载情况,即下载状态信息。在实际中,这个下载进程就像一个服务,启动后随时等待被调用。
在本申请实施例中,所述IE内核浏览器进程启动时,所述下载进程也会启动,以保证页面在浏览器中的正常展现。
步骤102、在所述IE内核浏览器进程中注册通信协议,等待基于相应通信协议的页面下载请求;
在具体实现中,所述在IE内核浏览器进程中注册通信协议的步骤可以为,使用IInternetSession接口的RegisterNameSpace方法,在IE内核浏览器进程中注册通信协议,所述通信协议可以包括http协议、https协议、mailto协议和FTP协议。
具体而言,IInternetSession接口的RegisterNameSpace方法,要求了一个固定格式的接口,使用这个方法在IE内核浏览器进程中注册通信协议之后,则所有采用相应通信协议的页面下载请求,都会传送到预设的外壳程序接口,即当发生任何采用相应通信协议(如http、https协议)的页面下载请求时,IE内核会通知或调用预设的外壳程序接口。
步骤103、当所述IE内核浏览器进程收到页面下载请求时,将所述页面下载请求发送给下载进程;
步骤104、下载进程获取所述页面下载请求对应的文件大小信息;
步骤105、当所述文件大小信息超过预设的文件大小阈值时,采用多线程下载的方式执行相应页面的下载操作;
步骤106、下载进程在所述页面下载操作过程中向IE内核浏览器进程返回下载状态信息。
在本申请的一种优选实施例中,还可以包括如下步骤:
当所述文件大小信息未超过预设的文件大小阈值时,采用单线程下载的方式执行相应页面的下载操作。
在具体实现中,当IE内核调用在通信协议注册过程中提供的IInternetProtocol接口的Start方法时,通过跨进程通信,将页面下载请求发送到下载进程,并返回操作符E_PENDING,通知IE内核操作正在执行中。当下载到数据后,下载进程会通知到发起下载的IE内核浏览器进程,IE内核浏览器进程调用IE内核提供的IInternetProtocolSink接口的相关方法,通知IE内核下载进度、下载到的数据等下载状态信息。
更具体而言,跨进程通信,是指将一个进程的请求转到另一个进程,在本实施例中即指将IE内核浏览器进程的页面下载请求转到下载进程,并在下载过程中,实时向IE内核报告下载进度和下载数据等下载状态信息。跨进程通信可以使用windows消息机制,并配合内核对象进行数据传输。例如,在IE浏览器进程中注册了http协议后,一旦有基于http协议的页面下载请求就会送到预设的浏览器外壳程序中。当IE内核调用所述外壳程序的时候,会将这个页面下载请求的相关信息都传递过来,外壳程序会将这些信息打包(放到一个数据块中,数据块中主要包括url、refresh、cookie等),然后通过Windows系统提供的标准管道通信,将此数据块发送到下载进程。下载过程中向浏览器进程发送的Windows消息,主要是告诉浏览器当前下载的进度。
简而言之,跨进程通信是双方的,首先,IE内核浏览器进程收到页面下载请求后,会通过跨进程通信,告诉下载进程那些文件需要下载。另一方面,当下载请求执行过程中,下载进程会向IE内核浏览器进程发送消息,通知其下载进度、下载数据等下载状态信息。
本申请实施例主要涉及通过针对超过预设阈值的大文件进行多线程下载的下载优化方案,是在下载进程控制下载的过程中实现的,也就是说,当浏览器进程接收到IE下载请求时,触发下载进程执行下载,在由下载器正式下载的时候,下载管理器会判断当前文件大小是否超过预设阈值,若是,则控制下载器采用多线程下载的方式对当前页面下载请求对应的文件进行下载。
线程可以理解为下载的通道,单线程下载就是针对一个文件开启一个下载通道,多线程下载就是针对一个文件同时开启多个下载通道,具体而言,多线程下载其实就是同时向服务器请求单一文件的不同部分。
在具体实现中,仅需向服务器通信一次,如发送一个标准的http请求,即可获取到文件大小,以及,是否支持多线程下载等信息。通过诸如flash,图片等多媒体类型的文件会比较大,针对实际需求,可以设置文件大小阈值,比如1M,当超过1M,则启动多线程下载。
在具体实现中,本申请实施例还可以包括如下步骤:
步骤107、所述IE内核浏览器进程依据所述下载状态信息,对下载的页面数据进行解析、执行、和/或渲染的操作。
当下载进程完成下载操作后,将下载后的数据送回IE内核,由IE内核继续执行解析、执行、渲染的工作。
参考图2,示出了本申请的一种IE内核浏览器的页面下载控制方法实施例2的步骤流程图,具体可以包括如下步骤:
步骤201、启动IE内核浏览器进程,并启动预置的下载进程;
步骤202、在所述IE内核浏览器进程中注册通信协议,等待基于相应通信协议的页面下载请求;
步骤203、当所述IE内核浏览器进程收到页面下载请求时,将所述页面下载请求发送给下载进程;
步骤204、下载进程将所述页面下载请求添加至预先生成的下载任务列表中;
步骤205、获取所述页面下载请求对应的页面资源类型,在所述下载任务列表中,按照所述页面资源类型对页面下载请求进行排序;
在实际中,所述页面下载请求中包括URL信息,所述URL信息中包括扩展名信息,在这种情况下,所述页面下载请求对应的页面资源类型可以通过读取所述扩展名信息获取。
步骤206、依次处理所述下载任务列表中的页面下载请求;
步骤207、获取所述页面下载请求对应的文件大小信息;
步骤208、判断所述文件大小信息是否超过预设的文件大小阈值,若是,则执行步骤209;否则,执行步骤210;
步骤209、采用多线程下载的方式执行相应页面的下载操作;转步骤211;
步骤210、采用单线程下载的方式执行相应页面的下载操作;转步骤211;
步骤211、在所述页面下载操作过程中向IE内核浏览器进程返回下载状态信息。
本实施例主要涉及通过多线程下载和资源排序进行下载优化的方案,是在下载进程控制下载的过程中实现的,也就是说,当浏览器进程接收到IE下载请求时,触发下载进程执行下载,在由下载器正式下载之前,下载管理器会对下载请求对应的资源进行排序,判断当前文件大小是否超过预设阈值,若是,则控制下载器采用多线程下载的方式对当前页面下载请求对应的文件进行下载。
在实际应用中,可以优先下载文本类型的文件(如html、css、js等类型的文件),将多媒体类型的文件(如图片、flash等大资源的文件)靠后下载,因为网页的展现并不依赖于它们。下载进程中的下载管理器内会有一个下载任务列表,根据优先级,可以确定将新增加的下载任务放到这个表中的那个位置。比如,html、ess、js这些文本类型的文件都是网页打开时必须的,所以可以放入这个表的前面。其他的图片、flash等多媒体类型的文件则放入表尾。下载器会从表头中不停的取任务来开始下载。这样就实现了资源排序。
在实际中,每一个页面下载请求都对应一个下载任务,每个下载任务资源类型是一种。
例如,假设在浏览器中访问http://www.360.cn/,IE内核会产生5个下载请求,请求的内容/类型/顺序如下:
http://www.360.cn/index.htm;
http://www.360.cn/360safe.ess;
http://www.360.cn/product.swf;
http://www.360.cn/360safe.png;
http://www.360.cn/frame.htm。
按照与IE下载请求产生一致的顺序,将上述页面下载请求从IE内核浏览器进程发送到下载进程。
假设现在下载进程内的下载任务列表为空。当我们收到http://www.360.cn/index.htm的页面下载请求时,因为表是空的,则直接放入队列内。如表1所示,当前的下载任务列表中只有一个请求。
表1:
接下来收到http://www.360.cn/360safe.css的页面下载请求,通过其扩展名可以得知这是一个文本文件,与htm是一样的级别,于是直接放到下载任务列表中第一个表项的后面位置。如表2所示,当前的下载任务列表中的请求排序情况是:
表2:
继续收到http://www.360.cn/product.swf的页面下载请求,通过其扩展名可以得知其是一个flash文件,由于此种类型的文件最大,于是放入表的最末位置。
如表3所示,当前的下载任务列表中的请求排序情况是:
表3:
index.htm |
360safe.css |
product.swf |
继续收到http://www.360.cn/360safe.png的页面下载请求,通过其扩展名可以得知其是一个图片文件,由于此种类型文件的大小大于文本文件但小于flash类型的文件,于是将其插入到文本类型与flash类型的中间。如表4所示,当前的下载任务列表中的请求排序情况是:
表4:
index.htm |
360safe.css |
360safe.png |
product.swf |
继续收到http://www.360.cn/frame.htm的请求,通过其扩展名可以得知其是一个htm文件,于是将其插入到所有文本类型的后面位置。
如表5所示,当前的下载任务列表中的请求排序情况是:
表5:
index.htm |
360safe.css |
frame.htm |
360safe.png |
product.swf |
这样就生成了下载任务列表。这个下载任务列表与原始请求顺序是不同的,按照这个下载任务列表进行下载,会优先下载文本,保证文字尽快显示,接下来显示图片,最后才轮到比较大的flash。
当处理到所述下载任务列表中的较大文件时,如最后的product.swf文件,判断其大小是否超过预设阈值,如为1M,若是,则启动多线程下载。多线程下载实质上就是针对一个文件同时开启多个下载通道,具体而言,多线程下载其实就是同时向服务器请求单一文件的不同部分。
参考图3,示出了本申请的一种IE内核浏览器的页面下载控制方法实施例3的步骤流程图,具体可以包括如下步骤:
步骤301、启动IE内核浏览器进程,并启动预置的下载进程;
步骤302、在所述IE内核浏览器进程中注册通信协议,等待基于相应通信协议的页面下载请求;
步骤303、当所述IE内核浏览器进程收到页面下载请求时,将所述页面下载请求发送给下载进程;
步骤304、根据所述页面下载请求判断所请求的文件是否已被预先写入缓存中,若是,则执行步骤305;若否,则开始执行步骤307;
步骤305、查询该文件写入缓存的时间是否超过预设期限,若是,则开始执行步骤307;否则,执行步骤306;
步骤306、从缓存中提取该文件;
步骤307、获取所述页面下载请求对应的文件大小信息;
步骤308、判断所述文件大小信息是否超过预设的文件大小阈值,若是,则执行步骤309;否则,执行步骤310;
步骤309、采用多线程下载的方式执行相应页面的下载操作;转步骤311;
步骤310、采用单线程下载的方式执行相应页面的下载操作;转步骤311;
步骤311、在所述页面下载操作过程中向IE内核浏览器进程返回下载状态信息,并将下载的文件写入缓存,
本实施例主要涉及多线程下载和缓存读写的下载优化方案,是在下载进程控制下载的过程中实现的,也就是说,当浏览器进程接收到IE下载请求时,触发下载进程执行下载,在由下载器正式下载前,下载管理器会判断判断是从缓存读取还是实时下载,并判断当前文件大小是否超过预设阈值,若是,则控制下载器采用多线程下载的方式对当前页面下载请求对应的文件进行下载。在由下载器正式下载后,将下载后的数据写入缓存。
在具体应用中,可以根据实际需求来决定某文件是否写入缓存、某文件已经缓存了是否可以直接使用等等。例如,如果某文件在本地缓存中刚刚进行过更新,则几分钟内可以完全不去服务器通信,直接读取本地缓存中的文件即可。或如,用浏览器访问http://www.360.cn/index.htm,先查看此文件是否在缓存中,如果没有则先下载然后放入缓存。如果有,则可以完全不必去服务器通信,直接使用,这样就加速了访问速度。
本实施例在实际中更为优选的做法是,不在每次IE启动时执行向服务器请求相应的缓存是否过期的操作的,而是让用户先使用缓存访问。在访问过后,再进行缓存的检查和更新。当然,这里的策略也可以参考所使用的缓存最后是什么时间更新的。如果刚刚更新不久,比如仅有几分钟或几个小时,就可以先使用缓存再检查。但如果缓存是几天以前的,则也可以在启动时就进行缓存检查,以避免用户到过旧的内容。
本领域技术人员易于想到的是,上述方法实施例1、方法实施例2和方法实施例3所采用下载优化方案还可以组合应用,本申请对此无需加以限制。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
参考图4,示出了本申请的一种IE内核浏览器的页面下载控制系统实施例的结构框图,具体可以包括如下模块:
启动模块401,用于启动IE内核浏览器进程,并启动预置的下载进程;
协议注册模块402,用于在所述IE内核浏览器进程中注册通信协议,等待基于相应通信协议的页面下载请求;
请求传送模块403,用于在IE内核浏览器进程收到页面下载请求时,将所述页面下载请求发送给下载进程;
文件大小获取模块404,用于由下载进程获取所述页面下载请求对应的文件大小信息;
多线程下载模块405,用于在所述文件大小信息超过预设的文件大小阈值时,采用多线程下载的方式执行相应页面的下载操作;
状态汇报模块406,用于在所述页面下载操作过程中向IE内核浏览器进程返回下载状态信息。
在本申请的一种优选实施例中,所述系统实施例还可以包括:
单线程下载模块,用于在所述文件大小信息未超过预设的文件大小阈值时,采用单线程下载的方式执行相应页面的下载操作。
在具体实现中,所述系统实施例还可以包括:
内核操作模块,用于由所述IE内核浏览器进程依据所述下载状态信息,对下载的页面数据进行解析、执行、和/或渲染的操作。
在本申请的一种优选实施例中,所述系统实施例还可以包括:
任务添加模块,用于由下载进程将所述页面下载请求添加至预先生成的下载任务列表中;
排序模块,用于获取所述页面下载请求对应的页面资源类型,在所述下载任务列表中,按照所述页面资源类型对页面下载请求进行排序;
下载执行模块,用于依次处理所述下载任务列表中的页面下载请求,调用所述文件大小获取模块。
优选的是,所述页面下载请求中包括URL信息,所述URL信息中包括扩展名信息,所述页面下载请求对应的页面资源类型通过读取所述扩展名信息获取。
在本申请的一种优选实施例中,所述系统实施例还可以包括:
缓存判断模块,用于由下载进程根据所述页面下载请求判断所请求的文件是否已被预先写入缓存中,若是,则触发缓存提取模块;若否,则触发文件大小获取模块;
缓存提取模块,用于从缓存中提取该文件。
缓存写入模块,用于将下载的文件写入缓存。
更为优选的是,所述系统实施例还可以包括:
缓存超期判断模块,用于查询该文件写入缓存的时间是否超过预设期限,若是,则调用文件大小获取模块,若否,则调用所述缓存提取模块。
本说明书中的各个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上对本申请所提供的一种IE内核浏览器的页面下载控制方法和一种IE内核浏览器的页面下载控制系统进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。