动态打包方法和装置的制造方法
【技术领域】
[0001 ]本发明涉及计算机技术领域,特别是涉及一种动态打包方法和装置。
【背景技术】
[0002]对前端的静态资源的管理采用模块化技术之后,使得每个JS(JavaScript,一种直译式脚本语言)文件都可以视为一个模块,模块之间还存在依赖关系。当页面在前端运行时,如果没有对多个JS文件按照某种规则进行组合,也就是没有对多个JS文件进行打包,那么每个页面都会加载大量的JS文件,导致JS文件的链接数目增加,网络请求的负担加重。如果有大量的请求访问页面时,就会对后台服务器造成较大的压力。
[0003]传统的方式是在设计期对多个JS文件进行打包,将每个页面所依赖的模块打包到一起,形成一个单一的JS文件。在运行期是页面就只加载打包后的JS文件,有效减少JS文件的链接数目。但是同一JS文件通常会在类似的页面被频繁下载,由此造成网络传输的数据量增大。
【发明内容】
[0004]基于此,有必要针对上述技术问题,提供一种能够有效减少网络传输数据量的动态打包方法和装置。
[0005 ] 一种动态打包方法,所述方法包括:
[0006]接收浏览器发送的判断JS文件是否被修改的请求,所述请求中携带了JS文件集合和第一标识;
[0007]根据所述JS文件集合计算所述请求对应的第二标识的值;
[0008]判断所述第一标识的值与所述第二标识的值是否相等;
[0009]若否,则进一步判断所述第一标识对应的临时文件是否存在,所述临时文件包括了用于动态打包的URL中的多个JS文件;
[0010]若所述第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件,并将修改后的临时文件返回至所述浏览器。
[0011]在其中一个实施例中,在所述接收浏览器发送的判断JS文件是否被修改的请求的步骤之前,还包括:
[0012]根据配置文件对业务特性包进行打包;
[0013]利用界面特性包与所述业务特性包进行过滤,生成用于动态打包的URL。
[0014]在其中一个实施例中,所述根据配置文件对业务特性包进行打包的步骤包括:
[0015]读取配置文件,所述配置文件中包括多个业务特性包;
[0016]获取所述业务特性包所依赖的顶级模块;
[0017]根据所述业务特性包所依赖的顶级模块获取所述业务特性包对应的所有依赖模块,得到所有的业务特性包模块;
[0018]对所业务特性包模块进行排序;
[0019]将排序后的业务特性包模块打包为一个文件。
[0020]在其中一个实施例中,所述利用界面特性包与所述业务特性包进行过滤,生成用于动态打包的URL的步骤包括:
[0021]获取界面特性包;
[0022]从所述界面特性包中解析所述界面特性包对应的顶级模块和依赖模块,得到所有的界面特性包模块;
[0023]利用所述界面特性包模块过滤掉所述业务特性包模块;
[0024]利用过滤后的模块生成用于动态打包的URL。
[0025]在其中一个实施例中,所述对所述业务特性包模块进行排序的步骤包括:
[0026]对所述业务特性包所依赖的顶级模块和依赖模块分别设置对应的计数器;
[0027]以所述业务特性包所依赖的顶级模块对应的计数器的值为基准,按照依赖层级将依赖模块对应的计数器逐层累加,分别得到每个依赖模块对应的计数器的值;
[0028]按照计数器的值的大小对所述业务特性包所依赖的顶级模块和依赖模块进行排序。
[0029]在其中一个实施例中,所述方法还包括:
[0030]判断JS文件是否被修改;
[0031 ]若是,则根据修改后的JS文件修改JS文件集合;
[0032]根据修改后的JS文件集合对临时文件进行更新,并利用更新后的临时文件对URL资源集合进行更新。
[0033]在其中一个实施例中,所述根据修改后的JS文件集合对临时文件进行更新的步骤包括:
[0034]根据URL资源集合和修改后的JS文件集合计算所需的线程任务;
[0035]将多个线程任务形成队列;
[0036]利用所述队列对多个临时文件进行更新。
[0037]一种动态打包装置,所述装置包括:
[0038]接收模块,用于接收浏览器发送的判断JS文件是否被修改的请求,所述请求中携带了 JS文件集合和第一标识;
[0039 ]计算模块,用于根据所述J S文件集合计算所述请求对应的第二标识的值;
[0040]判断模块,用于判断所述第一标识的值与所述第二标识的值是否相等;
[0041]所述判断模块还用于若所述第一标识的值与所述第二标识的值不相等,则进一步判断所述第一标识对应的临时文件是否存在,所述临时文件包括了用于动态打包的URL中的多个JS文件;
[0042]合并模块,用于若所述第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件;
[0043]返回模块,用于将修改后的临时文件返回至所述浏览器。
[0044]在其中一个实施例中,所述装置还包括:
[0045]打包模块,用于根据配置文件对业务特性包进行打包;
[0046]URL生成模块,用于利用界面特性包与所述业务特性包进行过滤,生成用于动态打包的URL。
[0047]在其中一个实施例中,所述打包模块包括:
[0048]第一获取单元,用于读取配置文件,所述配置文件中包括多个业务特性包;获取所述业务特性包所依赖的顶级模块;
[0049]第一解析单元,用于根据所述业务特性包所依赖的顶级模块获取所述业务特性包对应的所有依赖模块,得到所有的业务特性包模块;
[0050]排序单元,用于对所述业务特性包模块进行排序;
[0051]打包单元,用于将排序后的业务特性包模块打包为一个文件。
[0052]在其中一个实施例中,所述URL生成模块包括:
[0053]第二获取单元,用于获取界面特性包;
[0054]第二解析单元,用于从所述界面特性包中解析所述界面特性包对应的顶级模块和依赖模块,得到所有的界面特性包模块;
[0055]过滤单元,用于利用所述界面特性包模块过滤掉所述业务特性包模块;
[0056]生成单元,用于利用过滤后的模块生成用于动态打包的URL。
[0057]在其中一个实施例中,所述排序单元还用于对所述业务特性包所依赖的顶级模块和依赖模块分别设置对应的计数器;以所述业务特性包所依赖的顶级模块对应的计数器的值为基准,按照依赖层级将依赖模块对应的计数器逐层累加,分别得到每个依赖模块对应的计数器的值;按照计数器的值的大小对所述业务特性包所依赖的顶级模块和依赖模块进行排序。
[0058]在其中一个实施例中,所述判断模块还用于判断JS文件是否被修改;
[0059]所述装置还包括:
[0060]更新模块,用于若JS文件被修改,则根据修改后的JS文件修改JS文件集合;根据修改后的JS文件集合对临时文件进行更新,并利用更新后的临时文件对URL资源集合进行更新。
[0061 ]在其中一个实施例中,所述更新模块包括:
[0062]任务计算单元,用于根据URL资源集合和修改后的JS文件集合计算所需的线程任务;
[0063]队列单元,用于将多个线程任务形成队列;
[0064]更新单元,用于利用所述队列对多个临时文件进行更新。
[0065]上述动态打包方法和装置,在接收浏览器发送的判断JS文件是否被修改的请求之后,通过将根据该请求中携带的JS文件集合计算得到的请求对应的第二标识的值与该请求中携带的第一标识的值进行比较,如果第一标识的值与第二标识的值不相等,并且第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件,并将修改后的临时文件返回至浏览器。由于临时文件中包括了用于动态打包的URL在的多个JS文件,由此能够在运行期时,能够有效克服同一个模