本申请实施例涉及计算机技术,尤其涉及一种应用程序下载方法、服务器及终端。
背景技术:
随着互联网的发展,应用程序(application,app)等的种类和数量越来越多。开发人员通过开发各种app来满足用户需求。
目前,开发人员通过reactnative(rn)热更新平台开发app,一个app包括多个捆绑(bundle)文件。终端的app需要更新一些内容(如运营的弹窗或者功能模块)时,可以直接从热更新平台的服务器下载该app的多个bundle文件,然后该app解析并加载下载的多个bundle文件,在无需下载安装新版本的app的同时,实现更新该app的内容的功能。
然而,经验证发现:一个普通的bundle文件,少则几百kb,多则几mb或上百mb,显然,终端下载bundle文件的过程中会消耗巨大的流量。尤其当终端处于wifi未覆盖的环境中时,对用户造成极大的经济损失。
技术实现要素:
本申请实施例提供一种应用程序下载方法、服务器及终端,通过减小bundle文件的体积,实现降低应用程序下载过程中流量损耗的目的。
第一方面,本申请实施例提供一种应用程序下载方法,包括:
服务器将n个捆绑文件中的每个捆绑文件拆分为公共部分和业务部分,以得到1个公共部分和n个业务部分,n≥1,且为整数;
所述服务器向终端发送所述1个公共部分和所述n个业务部分。
在一种可行的设计中,所述n个捆绑文件包含第一捆绑文件,所述第一捆绑文件包含所述公共部分和第一业务部分,所述n个业务部分包含所述第一业务部分,所述服务器向终端发送所述1个公共部分和所述n个业务部分之后,还包括:
所述服务器更新所述第一业务部分,得到第一更新业务部分;
所述服务器向所述终端发送所述第一更新业务部分。
在一种可行的设计中,所述服务器向终端发送所述1个公共部分和所述n个业务部分之后,还包括:
所述服务器更新所述公共部分,得到更新公共部分;
所述服务器向所述终端发送所述更新公共部分。
在一种可行的设计中,所述服务器向终端发送所述1个公共部分和所述n个业务部分,包括:
所述服务器将所述n个业务部分打包成n个补丁文件;
所述服务器向所述终端发送所述1个公共部分和所述n个补丁文件。
第二方面,本申请实施例提供一种应用程序下载方法,包括:
终端接收服务器发送的1个公共部分和n个业务部分,所述1个公共部分和n个业务部分为所述服务器对n个捆绑文件中的每个捆绑文件进行拆分得到的;
所述终端将所述n个业务部分中的每个业务部分与所述1个公共部分合并,以得到所述n个捆绑文件。
在一种可行的设计中,所述n个捆绑文件包含第一捆绑文件,所述第一捆绑文件包含所述公共部分和第一业务部分,所述n个业务部分包含所述第一业务部分,所述终端将所述n个业务部分中的每个业务部分与所述1个公共部分合并之后,还包括:
所述终端接收所述服务器发送的第一更新业务部分,所述第一更新业务部分为所述服务器对所述第一业务部分进行更新得到;
所述终端根据所述第一更新业务部分,更新所述第一业务部分。
在一种可行的设计中,所述终端将所述n个业务部分中的每个业务部分与所述1个公共部分合并之后,还包括:
所述终端接收所述服务器发送的更新公共部分,所述更新公共部分为所述服务器对所述公共部分进行更新得到;
所述终端根据所述更新公共部分更新所述公共部分。
在一种可行的设计中,终端接收服务器发送的1个公共部分和n个业务部分,包括:
所述终端接收所述服务器发送的所述1个公共部分和n个补丁文件,所述n个补丁文件为所述服务器对所述n个业务部分进行打包得到的。
第三方面,本申请实施例提供一种服务器,包括:
处理模块,用于将n个捆绑文件中的每个捆绑文件拆分为公共部分和业务部分,以得到1个公共部分和n个业务部分,n≥1,且为整数;
收发模块,用于向终端发送所述1个公共部分和所述n个业务部分。
在一种可行的设计中,所述n个捆绑文件包含第一捆绑文件,所述第一捆绑文件包含所述公共部分和第一业务部分,所述处理模块,在所述发送模块向终端发送所述1个公共部分和所述n个业务部分之后,还用于更新所述第一业务部分,得到第一更新业务部分;
所述发送模块,还用于向所述终端发送所述第一更新业务部分。
在一种可行的设计中,所述处理模块,在所述发送模块向终端发送所述1个公共部分和所述n个业务部分之后,还用于更新所述公共部分,得到更新公共部分;
所述发送模块,还用于向所述终端发送所述更新公共部分。
在一种可行的设计中,所述处理模块,还用于将所述n个业务部分打包成n个补丁文件;
所述发送模块,具体用于向所述终端发送所述1个公共部分和所述n个补丁文件。
第四方面,本申请实施例提供一种终端,包括:
收发模块,用于接收服务器发送的1个公共部分和n个业务部分,所述1个公共部分和n个业务部分为所述服务器对n个捆绑文件中的每个捆绑文件进行拆分得到的;
处理模块,用于将所述n个业务部分中的每个业务部分与所述1个公共部分合并,以得到所述n个捆绑文件。
在一种可行的设计中,所述n个捆绑文件包含第一捆绑文件,所述第一捆绑文件包含所述公共部分和第一业务部分,所述n个业务部分包含所述第一业务部分,所述收发模块,在所述处理模块将所述n个业务部分中的每个业务部分与所述1个公共部分合并之后,还用于接收所述服务器发送的第一更新业务部分,所述第一更新业务部分为所述服务器对所述第一业务部分进行更新得到;
所述处理模块,还用于根据所述第一更新业务部分,更新所述第一业务部分。
在一种可行的设计中,所述收发模块,在所述处理模块将所述n个业务部分中的每个业务部分与所述1个公共部分合并之后,还用于接收所述服务器发送的更新公共部分,所述更新公共部分为所述服务器对所述公共部分进行更新得到;
所述处理模块,还用于根据所述更新公共部分更新所述公共部分。
在一种可行的设计中,所述收发模块,具体用于接收所述服务器发送的所述1个公共部分和n个补丁文件,所述n个补丁文件为所述服务器对所述n个业务部分进行打包得到的。
本申请实施例提供的应用程序下载方法、服务器及终端,服务器将对应同一个业务的n个bundle文件中的每个bundle文件拆分为公共部分和业务部分,得到1个公共部分和n个业务部分并发送给终端,使得终端将n个业务部分中的每个业务部分和公共部分合并,从而得到对应一个业务的n个bundle文件。相较于发送n个完整的bundle文件,该过程中,服务器在发送n个bundle文件时,仅发送该n个bundle文件相同的1个公共部分和n个不同的业务部分,从而通过减小bundle文件的体积,实现降低应用程序下载过程中流量损耗的目的。
附图说明
图1为本申请应用程序下载方法实施例一的信令图;
图2为本申请应用程序下载方法所适用的bundle文件的拆分过程示意图;
图3为本申请应用程序下载方法中对bundle文件进行打包的过程示意图;
图4为本申请服务器的结构示意图;
图5为本申请终端的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。以下内容为结合附图及较佳实施例,对依据本申请申请的具体实施方式、结构、特征及其功效的详细说明。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
通常来说,移动互联网行业应用可分为两种,一种是基于本地操作系统,如ios或android操作系统运行的app,称之为nativeapp;一种是基于智能终端的浏览器运行的webapp。
reactnative是脸书(facebook)开源的,可同时用来开发ios和android应用的技术。开发人员通过reactnative(rn)热更新平台开发app,一个app包括多个捆绑(bundle)文件。终端的app需要更新一些内容(如运营的弹窗或者功能模块)时,可以直接从热更新平台的服务器下载该app的多个bundle文件,然后该app解析并加载下载的多个bundle文件,在无需下载安装新版本的app的同时,实现更新该app的内容的功能。
然而,经验证发现:一个普通的bundle文件,少则几百kb,多则几mb或上百mb,显然,终端下载bundle文件的过程中会消耗巨大的流量。尤其当终端处于wifi未覆盖的环境中时,对用户造成极大的经济损失。
有鉴于此,本申请实施例提供一种应用程序下载方法、服务器及终端,通过减小bundle文件的体积,实现降低应用程序下载过程中流量损耗的目的。具体的,可参加图1。
图1为本申请应用程序下载方法实施例一的信令图,本实施例从服务器与终端交互的角度对本申请应用程序下载方法进行详细说明。具体的,本实施例包括:
101、服务器将n个捆绑文件中的每个捆绑文件拆分为公共部分和业务部分。
本申请实施例中,一个app可支持多种业务,如58同城app中包括的租房、招聘、二手、黄页等多个业务,每个业务具有不同的特征,并对应n个捆绑(bundle)文件,对应同一个业务的n个bundle文件中,每个bundle文件可拆分为公共部分和业务部分,n个bundle文件的公共部分相同,业务部分不同。其中,公共部分指bundle文件中和热更新平台自身逻辑有关的部分,业务部分是指bundle文件中和业务逻辑相关的部分。对应同一个业务的n个bundle文件的公共部分与rn热更新平台自身逻辑相关的部分相同,而对应同一个业务的n个bundle文件的业务部分不同。因此,本步骤中,热更新平台的服务器将对应同一个业务的n个bundle文件中的每个bundle文件拆分为公共部分和业务部分,由于n个bundle文件的公共部分相同,因此可视为1个公共部分,从而得到1个公共部分和n个业务部分。具体的,可参加图2,图2为本申请应用程序下载方法所适用的bundle文件的拆分过程示意图。
请参照图2,n个bundle文件中的每个bundle文件被拆分后,得到1个公共部分和n个业务部分。
102、服务器向终端发送所述1个公共部分和所述n个业务部分。
拆分完毕后,服务器向终端发送该1个公共部分和n个业务部分。相应的,终端接收该1个公共部分和n个业务部分。
103、终端将所述n个业务部分中的每个业务部分与所述1个公共部分合并,以得到所述n个捆绑文件。
在接收到1个公共部分和n个业务部分后,终端的app将n个业务部分中的每个业务部分和公共部分合并,从而得到对应一个业务的n个bundle文件。
本申请实施例提供的应用程序下载方法,服务器将对应同一个业务的n个bundle文件中的每个bundle文件拆分为公共部分和业务部分,得到1个公共部分和n个业务部分并发送给终端,使得终端将n个业务部分中的每个业务部分和公共部分合并,从而得到对应一个业务的n个bundle文件。相较于发送n个完整的bundle文件,该过程中,服务器在发送n个bundle文件时,仅发送该n个bundle文件相同的1个公共部分和n个不同的业务部分,从而通过减小bundle文件的体积,实现降低应用程序下载过程中流量损耗的目的。
app被开发出来后,不可避免的需要更新。现有的采用插件技术更新app时,不需要发布新版本app就能够实现对app的页面和功能的更新,但是更新后必须重启app使得插件代码生效。为避免重启app,本申请实施例中,开发人员通过reactnative(rn)热更新平台对app进行更新。更新过程中,终端停留在app的某个页面,rn热更新平台的服务器对终端下发指令,以通知终端该页面有更新,然后下载新页面,下载完毕后对本页面进行刷新,使得用户观看到新页面。下面,对本申请实施例中如何更新应用程序进行详细说明。
具体的,app的一个业务对应多个bundle文件,对该app进行更新,实质上是对该app包含的bundle文件进行更新。而一个bundle文件可以被拆分为公共部分和业务部分,因此,对一个bundle文件的更新,是指对该bundle文件的公共部分进行更新、对该bundle文件的业务部分进行更新,或者对该bundle文件的公共部分和业务部分都进行更新。下面,对该些情况分别进行详细说明。
首先,对公共部分进行更新。
具体的,对于同一个业务对应的n个bundle文件,该n个bundle文件的公共部分相同。当需要对该公共部分进行更新时,服务器更新所述公共部分,得到更新公共部分;接着,所述服务器向所述终端发送所述更新公共部分。相应的,终端接收该公共部分,根据所述更新公共部分更新所述公共部分,即用更新公共部分替换公共部分。然后,终端将n个业务部分中的每个业务部分和更新公共部分合并,得到对应一个业务的n个bundle文件,从而实现对n个bundle文件的更新。
其次,对业务部分进行更新。
具体的,对于同一个业务对应的n个bundle文件,该n个bundle文件的业务部分不相同。该n个捆绑文件包含第一捆绑文件,所述第一捆绑文件包含所述公共部分和第一业务部分,所述n个业务部分包含所述第一业务部分。当需要对第一捆绑文件的第一业务部分进行更新时,所述终端将所述n个业务部分中的每个业务部分与所述1个公共部分合并之后,当需要对第一捆绑文件的第一业务部分进行更新时,服务器更新所述第一业务部分,得到第一更新业务部分;接着,所述服务器向所述终端发送所述第一更新业务部分。相应的,终端接收该第一更新业务部分,根据所述第一更新业务部分更新所述第一业务部分,即用第一更新业务部分替换第一业务部分。然后,终端将第一业务部分和公共部分合并,得到更新后的第一bundle文件,从而实现对第一bundle文件的更新。
最后,对公共部分和业务部分都进行更新。
本申请实施例中,对于app的同一个业务,终端第一次该业务的bundle文件时,将该业务的bundle文件的1个公共部分和n个业务部分都进行下载。后续,当需要对公共部分和n个业务部分中的至少一个业务部分进行更新时,由于更新后的每个业务部分需要和更新后的公共部分进行合并。因此,本申请实施例中,当需要对公共部分和业务部分都进行更新时,先对公共部分进行更新,再对业务部分进行更新,避免先对业务部分进行更新、再对公共部分进行更新后,需要继续对更新后的业务部分和更新后的公共部分进行合并的弊端。
另外,在本申请一示例中,所述服务器向终端发送所述1个公共部分和所述n个业务部分时,先将所述n个业务部分打包成n个补丁文件,然后向所述终端发送所述1个公共部分和所述n个补丁文件。具体的,可参加图3,图3为本申请应用程序下载方法中对bundle文件进行打包的过程示意图。
请参照图3,n个bundle文件中的每个bundle文件被拆分后,得到1个公共部分和n个业务部分。然后,服务器对该n个业务部分中的每个业务部分进行打包,将其打包为补丁(patch)文件,从而得到n个补丁文件。如此一来,将n个bundle文件,即n×bundle文件转换为1个公共部分+n×补丁文件。假设每个bundle文件的大小为600kb,被压缩后为100kb,共有6个bundle文件,则6个bundle文件压缩后的大小为600kb。每一个压缩后的bundle文件的公共部分为40kb,业务部分为60kb,则对该6个bundle文件进行拆分,得到1个公共部分和6个业务部分,对该6个业务部分打包,得到6个patch文件,其中,1个公共部分的大小为40kb,6个补丁文件的大小为6×60kb=360kb,1个公共部分和6个业务部分的大小为40kb+360kb=400kb。服务器仅需要将该400kb的文件发送给终端,相较于向终端发送600kb的6个bundle文件,文件大小减少了33%。
图4为本申请服务器的结构示意图,包括:
处理模块11,用于将n个捆绑文件中的每个捆绑文件拆分为公共部分和业务部分,以得到1个公共部分和n个业务部分,n≥1,且为整数;
收发模块12,用于向终端发送所述1个公共部分和所述n个业务部分。
本申请实施例提供的服务器,将对应同一个业务的n个bundle文件中的每个bundle文件拆分为公共部分和业务部分,得到1个公共部分和n个业务部分并发送给终端,使得终端将n个业务部分中的每个业务部分和公共部分合并,从而得到对应一个业务的n个bundle文件。相较于发送n个完整的bundle文件,该过程中,服务器在发送n个bundle文件时,仅发送该n个bundle文件相同的1个公共部分和n个不同的业务部分,从而通过减小bundle文件的体积,实现降低应用程序下载过程中流量损耗的目的。
可选的,在本申请一实施例中,所述n个捆绑文件包含第一捆绑文件,所述第一捆绑文件包含所述公共部分和第一业务部分,所述处理模块11,在所述发送模块向终端发送所述1个公共部分和所述n个业务部分之后,还用于更新所述第一业务部分,得到第一更新业务部分;
所述发送模块,还用于向所述终端发送所述第一更新业务部分。
可选的,在本申请一实施例中,所述处理模块11,在所述发送模块向终端发送所述1个公共部分和所述n个业务部分之后,还用于更新所述公共部分,得到更新公共部分;
所述发送模块,还用于向所述终端发送所述更新公共部分。
可选的,在本申请一实施例中,所述处理模块11,还用于将所述n个业务部分打包成n个补丁文件;
所述发送模块,具体用于向所述终端发送所述1个公共部分和所述n个补丁文件。
图5为本申请终端的结构示意图,包括:
收发模块21,用于接收服务器发送的1个公共部分和n个业务部分,所述1个公共部分和n个业务部分为所述服务器对n个捆绑文件中的每个捆绑文件进行拆分得到的;
处理模块22,用于将所述n个业务部分中的每个业务部分与所述1个公共部分合并,以得到所述n个捆绑文件。
本申请实施例提供的终端,接收服务器1个公共部分和n个业务部分,该1个公共部分和n个业务部分为服务器将对应同一个业务的n个bundle文件中的每个bundle文件拆分为公共部分和业务部分后得到的,终端将n个业务部分中的每个业务部分和公共部分合并,从而得到对应一个业务的n个bundle文件。相较于发送n个完整的bundle文件,该过程中,服务器在发送n个bundle文件时,仅发送该n个bundle文件相同的1个公共部分和n个不同的业务部分,从而通过减小bundle文件的体积,实现降低应用程序下载过程中流量损耗的目的。
可选的,在本申请一实施例中,所述n个捆绑文件包含第一捆绑文件,所述第一捆绑文件包含所述公共部分和第一业务部分,所述n个业务部分包含所述第一业务部分,所述收发模块21,在所述处理模块22将所述n个业务部分中的每个业务部分与所述1个公共部分合并之后,还用于接收所述服务器发送的第一更新业务部分,所述第一更新业务部分为所述服务器对所述第一业务部分进行更新得到;
所述处理模块22,还用于根据所述第一更新业务部分,更新所述第一业务部分。
可选的,在本申请一实施例中,所述收发模块21,在所述处理模块22将所述n个业务部分中的每个业务部分与所述1个公共部分合并之后,还用于接收所述服务器发送的更新公共部分,所述更新公共部分为所述服务器对所述公共部分进行更新得到;
所述处理模块22,还用于根据所述更新公共部分更新所述公共部分。
可选的,在本申请一实施例中,所述收发模块21,具体用于接收所述服务器发送的所述1个公共部分和n个补丁文件,所述n个补丁文件为所述服务器对所述n个业务部分进行打包得到的。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。