CN105468412B - 动态打包方法和装置 - Google Patents
动态打包方法和装置 Download PDFInfo
- Publication number
- CN105468412B CN105468412B CN201510844403.9A CN201510844403A CN105468412B CN 105468412 B CN105468412 B CN 105468412B CN 201510844403 A CN201510844403 A CN 201510844403A CN 105468412 B CN105468412 B CN 105468412B
- Authority
- CN
- China
- Prior art keywords
- module
- file
- modified
- service characteristic
- identifier
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种动态打包方法,所述方法包括:接收浏览器发送的判断JS文件是否被修改的请求,所述请求中携带了JS文件集合和第一标识;根据所述JS文件集合计算所述请求对应的第二标识的值;判断所述第一标识的值与所述第二标识的值是否相等;若否,则进一步判断所述第一标识对应的临时文件是否存在,所述临时文件包括了用于动态打包的URL中的多个JS文件;若所述第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件,并将修改后的临时文件返回至所述浏览器。采用本方法能够有效减少网络传输数据量。此外还提供一种动态打包装置。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种动态打包方法和装置。
背景技术
对前端的静态资源的管理采用模块化技术之后,使得每个JS(JavaScript,一种直译式脚本语言)文件都可以视为一个模块,模块之间还存在依赖关系。当页面在前端运行时,如果没有对多个JS文件按照某种规则进行组合,也就是没有对多个JS文件进行打包,那么每个页面都会加载大量的JS文件,导致JS文件的链接数目增加,网络请求的负担加重。如果有大量的请求访问页面时,就会对后台服务器造成较大的压力。
传统的方式是在设计期对多个JS文件进行打包,将每个页面所依赖的模块打包到一起,形成一个单一的JS文件。在运行期是页面就只加载打包后的JS文件,有效减少JS文件的链接数目。但是同一JS文件通常会在类似的页面被频繁下载,由此造成网络传输的数据量增大。
发明内容
基于此,有必要针对上述技术问题,提供一种能够有效减少网络传输数据量的动态打包方法和装置。
一种动态打包方法,所述方法包括:
接收浏览器发送的判断JS文件是否被修改的请求,所述请求中携带了JS文件集合和第一标识;
根据所述JS文件集合计算所述请求对应的第二标识的值;
判断所述第一标识的值与所述第二标识的值是否相等;
若否,则进一步判断所述第一标识对应的临时文件是否存在,所述临时文件包括了用于动态打包的URL中的多个JS文件;
若所述第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件,并将修改后的临时文件返回至所述浏览器。
在其中一个实施例中,在所述接收浏览器发送的判断JS文件是否被修改的请求的步骤之前,还包括:
根据配置文件对业务特性包进行打包;
利用界面特性包与所述业务特性包进行过滤,生成用于动态打包的URL。
在其中一个实施例中,所述根据配置文件对业务特性包进行打包的步骤包括:
读取配置文件,所述配置文件中包括多个业务特性包;
获取所述业务特性包所依赖的顶级模块;
根据所述业务特性包所依赖的顶级模块获取所述业务特性包对应的所有依赖模块,得到所有的业务特性包模块;
对所业务特性包模块进行排序;
将排序后的业务特性包模块打包为一个文件。
在其中一个实施例中,所述利用界面特性包与所述业务特性包进行过滤,生成用于动态打包的URL的步骤包括:
获取界面特性包;
从所述界面特性包中解析所述界面特性包对应的顶级模块和依赖模块,得到所有的界面特性包模块;
利用所述界面特性包模块过滤掉所述业务特性包模块;
利用过滤后的模块生成用于动态打包的URL。
在其中一个实施例中,所述对所述业务特性包模块进行排序的步骤包括:
对所述业务特性包所依赖的顶级模块和依赖模块分别设置对应的计数器;
以所述业务特性包所依赖的顶级模块对应的计数器的值为基准,按照依赖层级将依赖模块对应的计数器逐层累加,分别得到每个依赖模块对应的计数器的值;
按照计数器的值的大小对所述业务特性包所依赖的顶级模块和依赖模块进行排序。
在其中一个实施例中,所述方法还包括:
判断JS文件是否被修改;
若是,则根据修改后的JS文件修改JS文件集合;
根据修改后的JS文件集合对临时文件进行更新,并利用更新后的临时文件对URL资源集合进行更新。
在其中一个实施例中,所述根据修改后的JS文件集合对临时文件进行更新的步骤包括:
根据URL资源集合和修改后的JS文件集合计算所需的线程任务;
将多个线程任务形成队列;
利用所述队列对多个临时文件进行更新。
一种动态打包装置,所述装置包括:
接收模块,用于接收浏览器发送的判断JS文件是否被修改的请求,所述请求中携带了JS文件集合和第一标识;
计算模块,用于根据所述JS文件集合计算所述请求对应的第二标识的值;
判断模块,用于判断所述第一标识的值与所述第二标识的值是否相等;
所述判断模块还用于若所述第一标识的值与所述第二标识的值不相等,则进一步判断所述第一标识对应的临时文件是否存在,所述临时文件包括了用于动态打包的URL中的多个JS文件;
合并模块,用于若所述第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件;
返回模块,用于将修改后的临时文件返回至所述浏览器。
在其中一个实施例中,所述装置还包括:
打包模块,用于根据配置文件对业务特性包进行打包;
URL生成模块,用于利用界面特性包与所述业务特性包进行过滤,生成用于动态打包的URL。
在其中一个实施例中,所述打包模块包括:
第一获取单元,用于读取配置文件,所述配置文件中包括多个业务特性包;获取所述业务特性包所依赖的顶级模块;
第一解析单元,用于根据所述业务特性包所依赖的顶级模块获取所述业务特性包对应的所有依赖模块,得到所有的业务特性包模块;
排序单元,用于对所述业务特性包模块进行排序;
打包单元,用于将排序后的业务特性包模块打包为一个文件。
在其中一个实施例中,所述URL生成模块包括:
第二获取单元,用于获取界面特性包;
第二解析单元,用于从所述界面特性包中解析所述界面特性包对应的顶级模块和依赖模块,得到所有的界面特性包模块;
过滤单元,用于利用所述界面特性包模块过滤掉所述业务特性包模块;
生成单元,用于利用过滤后的模块生成用于动态打包的URL。
在其中一个实施例中,所述排序单元还用于对所述业务特性包所依赖的顶级模块和依赖模块分别设置对应的计数器;以所述业务特性包所依赖的顶级模块对应的计数器的值为基准,按照依赖层级将依赖模块对应的计数器逐层累加,分别得到每个依赖模块对应的计数器的值;按照计数器的值的大小对所述业务特性包所依赖的顶级模块和依赖模块进行排序。
在其中一个实施例中,所述判断模块还用于判断JS文件是否被修改;
所述装置还包括:
更新模块,用于若JS文件被修改,则根据修改后的JS文件修改JS文件集合;根据修改后的JS文件集合对临时文件进行更新,并利用更新后的临时文件对URL资源集合进行更新。
在其中一个实施例中,所述更新模块包括:
任务计算单元,用于根据URL资源集合和修改后的JS文件集合计算所需的线程任务;
队列单元,用于将多个线程任务形成队列;
更新单元,用于利用所述队列对多个临时文件进行更新。
上述动态打包方法和装置,在接收浏览器发送的判断JS文件是否被修改的请求之后,通过将根据该请求中携带的JS文件集合计算得到的请求对应的第二标识的值与该请求中携带的第一标识的值进行比较,如果第一标识的值与第二标识的值不相等,并且第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件,并将修改后的临时文件返回至浏览器。由于临时文件中包括了用于动态打包的URL在的多个JS文件,由此能够在运行期时,能够有效克服同一个模块在类似页面被频繁下载的问题,只需下载一次临时文件即可,充分利用了浏览器缓存,有效减少了网络传输的数据量。
附图说明
图1为一个实施例中动态打包方法的流程图;
图2为一个实施例中根据配置文件对业务特性包进行打包的流程图;
图3为一个实施例中利用界面特性包与业务特性包进行过滤,生成用于动态打包的URL的流程图;
图4为一个实施例中动态打包装置的结构示意图;
图5为又一个实施例中动态打包装置的结构示意图;
图6为一个实施例中打包模块的结构示意图;
图7为一个实施例中URL生成模块的结构示意图;
图8为另一个实施例中动态打包装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在一个实施例中,如图1所示,提供了一种动态打包方法,以该方法应用于后台服务器为例进行说明,该方法具体包括:
步骤102,接收浏览器发送的判断JS文件是否被修改的请求,请求中携带了JS文件集合和第一标识。
浏览器可以访问运行期的页面。运行期是指页面处于运行阶段。通常浏览器会从后台服务器下载了页面对应的JS文件,并将下载的JS文件存入浏览器缓存中。在浏览器下一次请求访问页面时,浏览器一般会先向后台服务器发送请求判断JS文件是否过期,如果没有过期,则可以直接加载浏览器缓存中的JS文件,进而渲染出页面。
浏览器向后台服务器发送的请求中,携带了JS文件集合和第一标识。JS文件集合中包括多个JS文件。JS文件也可称为模块。每个模块都具有对应的模块名称和修改时间。请求中携带的第一标识是指后台服务器响应该请求时返回对应的JS文件的标记。
步骤104,根据JS文件集合计算请求对应的第二标识的值。
第二标识用于标识浏览器向后台服务器发送的请求。利用JS集合中每个模块的模块名称和修改时间形成字符串,计算该字符串的哈希值,从而得到第二标识的值。如果多次请求对应的第二标识的值都未发生变化,则表示用于动态打包的URL(Uniform ResoureLocator,统一资源定位器)没有发生变化。动态打包是指在运行期将页面所依赖的JS文件进行动态打包。通过动态打包能够有效克服多个界面在浏览器只会下载一次的问题,从而能够充分利用浏览器缓存,减少网络传输的数据量。
步骤106,判断第一标识的值与第二标识的值是否相等;若是,则向浏览器返回状态码,若否,则进入步骤108。
通常后台服务器计算得到第二标识的值之后,会将第二标识及第二标识的值返回至前端。浏览器会从后台服务器下载了页面对应的JS文件时,可以获取到第二标识的值。浏览器再次向后台服务器发送判断JS文件是否过期的请求时,可以将第二标识的值作为第一标识的值。如果第一标识的值与第二标识的值相同,则表示JS文件没有被修改。如果第一标识的值与第二标识的值不相同,则表示JS文件已经被修改。如果JS没有被修改,则后台服务器向浏览器返回状态码。状态码的内容可以为空,由此能减少网络传输的数据量。
步骤108,进一步判断第一标识对应的临时文件是否存在,临时文件包括了用于动态打包的URL中的多个JS文件,若是,则向浏览器返回临时文件,否则进入步骤110。
用于动态打包的URL是在运行期利用业务特性包和界面特性包来生成的。业务特性包是指在设计期将相似页面中所包含的公用JS文件(即公用模块)进行打包。例如,列表界面包含有公用模块有查询模块、列表模块、工具栏模块和按钮模块等,那么可以将这些公用模块进行打包,形成列表界面的业务特性包。在运行期时,多个业务特性包在浏览器只会下载一次,充分利用了浏览器缓存,减少了网络传输的数据量。
界面特性包中包括了多种界面特性包,例如,列表特性包、查询特性包、凭证核算特性包、凭证摘要特性包等。业务特性包中也可以包括多种业务特性包,例如,列表特性包、查询特性包等。界面特性包通过引用业务特性包来实现功能。利用业务特性包和界面特性包生成的用于动态打包的URL中包括了多个JS文件,这些合并后的JS文件可以统称为临时文件。
步骤110,若第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件,并将修改后的临时文件返回至浏览器。
如果界面特性包和/或业务特性包中有JS文件被修改,则第一标识对应的临时文件则发生了变化,第一标识对应的临时文件则不存在了。需要利用修改后的JS文件进行合并,得到修改后的临时文件,并将修改后的临时文件返回至浏览器。
本实施例中,在接收浏览器发送的判断JS文件是否被修改的请求之后,通过将根据该请求中携带的JS文件集合计算得到的请求对应的第二标识的值与该请求中携带的第一标识的值进行比较,如果第一标识的值与第二标识的值不相等,并且第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件,并将修改后的临时文件返回至所述浏览器。由于临时文件中包括了用于动态打包的URL在的多个JS文件,由此能够在运行期时,能够有效克服同一个模块在类似页面被频繁下载的问题,只需下载一次临时文件即可,充分利用了浏览器缓存,有效减少了网络传输的数据量。
在一个实施例中,在接收浏览器发送的判断JS文件是否被修改的请求的步骤之前,还包括:根据配置文件对业务特性包进行打包;利用界面特性包与业务特性包进行过滤,生成用于动态打包的URL。
本实施例中,配置文件中包括多个模块以及业务特性包。业务特性包可以有多种,例如,列表特性包,编辑特性包等。每个业务特性包中包括多个顶级模块。根据配置文件可以获取业务特性包对应的顶级模块所依赖的所有依赖模块。
在一个实施例中,如图2所示,根据配置文件对业务特性包进行打包的步骤包括:
步骤202,读取配置文件,配置文件中包括多个业务特性包。
步骤204,获取业务特性包所依赖的顶级模块。
步骤206,根据业务特性包所依赖的顶级模块获取业务特性包对应的所有依赖模块,得到所有的业务特性包模块。
步骤208,对业务特性包模块进行排序。
步骤210,将排序后的业务特性包模块打包为一个文件。
读取配置文件,将配置文件中的模块进行分组。具体的,可以根据模块之间的关联性进行分组。通过对模块进行分组形成多个变量。获取业务特性包所依赖的顶级模块(又称为一级模块)。根据业务特性包所依赖的顶级模块,利用通过对模块进行分组所形成的多个变量来获取所有的依赖模块,得到所有的业务特性包模块。
以列表特性包为例来说明得到所有业务特性包模块的过程。列表特性包中包括多个顶级模块,如“msgbox(消息框)”、“window(窗口)”、“toolbar(工具栏)”和“menubutton(菜单按钮)”等。在配置文件中也包括了多个模块。其中“msgbox”依赖了“base(基本功能)”、“dialog(对话)”和“waf(框架模块)”等模块。而配置文件中的“dialog”依赖了“base”,“wafall”依赖了“base”和“map(映射)”等模块。“base”和“map”没有依赖其他模块,是配置文件中的顶级模块。依赖顶级模块的模块又称为依赖模块。
对所有的业务特性包模块进行排序,也就是对业务特性包所依赖的所有顶级模块和依赖模块进行排序。具体的,按照业务特性包所依赖的顶级模块和依赖模块对应的计数器的值进行排序,计数器的值越大,排序越靠前,反之,排序靠后。将业务特性包模块按照排序的顺序进行拼接合并,打包为一个文件。在运行期时,多个业务特性包在浏览器只会下载一次,充分利用了浏览器缓存,减少了网络传输的数据量。进一步的,将打包后的文件进行压缩处理,由此使得浏览器下载压缩处理的打包文件,进一步减少了网络传输的数据量。
在一个实施例中,如图3所示,利用界面特性包与业务特性包进行过滤,生成用于动态打包的URL的步骤包括:
步骤302,获取界面元数据。
步骤304,判断缓存中是否存在用于动态打包的URL;若是,结束;若否,进入步骤306。
步骤306,获取界面特性包。
步骤308,从界面特性包中解析界面特性包对应的顶级模块和依赖模块,得到所有的界面特性包模块。
步骤310,利用界面特性包模块过滤掉业务特性包模块。
步骤312,利用过滤后的模块生成用于动态打包的URL。
本实施例中,界面元数据是描述界面对象的一种方式。界面元数据中包括有关界面布局的信息。判断后台服务器的缓存中是否存在用于动态打包的URL。如过不存在,则需要生成用于动态打包的URL。从界面特性包中解析出界面特性包所依赖的模块。具体的,获取界面特性包所依赖的顶级模块,根据界面特性包所依赖的顶级模块获取界面特性包所有的依赖模块,得到所有的界面特性包模块。由于在业务特性包中包括了列表特性包和查询特性包,因此界面特征包中与业务特性包中存在相同的模块。利用界面特性包模块过滤掉业务特性包模块,也就是在界面特性包模块中去掉与业务特性包模块相同的模块。利用过滤后的模块进行合并,生成用于动态打包的URL。利用过滤后的模块进行合并时,可以采用上述实施例中提供的方式,利用过滤后的模块对应的计数器的值进行排序。计算器的值越大,排序越靠前,反之,排序靠后。提取过滤后的模块,将过滤后的模块按照排序的顺序进行拼接合并,由此生成用于动态打包的URL。继而在该URL中包括了需要动态打包的所有模块,也就是包括需要动态打包的所有JS文件。该URL中包括的所有JS文件,也统称为临时文件。
进一步的,将生成的用于动态打包的临时文件存入后台服务器的缓存中。在动态打包的过程中,如果临时文件中有某个JS文件发生了改变,只需要对临时文件进行修改,并不需要对该URL进行修改。也就是说在动态打包的过程中,该URL是不会发生变化的。
在一个实施例中,对业务特性包模块进行排序的步骤包括:对业务特性包所依赖的顶级模块和依赖模块分别设置对应的计数器;以业务特性包所依赖的顶级模块对应的计数器的值为基准,按照依赖层级将依赖模块对应的计数器逐层累加,分别得到每个依赖模块对应的计数器的值;按照计数器的值的大小对业务特性包所依赖的顶级模块和依赖模块进行排序。
本实施例中,业务特性包模块包括业务特性包所依赖的顶级模块和依赖模块。对每个业务特性包所依赖的顶级模块和依赖模块分别设置对应的计数器。其中,以业务特性包所依赖的顶级模块对应的计数器的值为基准。业务特性包所依赖的顶级模块如果有多个,则每个业务特性包所依赖的顶级模块的计数器的值都相等。假设业务特性包所依赖的顶级模块为A,其对应的计数器的值为a,A所依赖的依赖模块为B,B对应的计数器的值为b,则b=a+1。B所依赖的依赖模块为C,C对应的计数器的值为c,则c=b+1,也就是c=a+2。由此根据依赖层级将依赖模块对应的计数器逐层累加,得到每个依赖模块对应的计数器的值。按照计数器的值的大小对业务特性包所依赖的顶级模块和依赖模块进行排序。计数器的值越大,排序越靠前,反之,排序靠后。根据这个排序来对业务特性包模块进行打包,由此能够确保浏览器加载业务特性包后能够准确的渲染出页面。
在一个实施例中,该方法还包括:判断JS文件是否被修改;若是,则根据修改后的JS文件修改JS文件集合;根据修改后的JS文件集合对临时文件进行修改,并利用更新后的临时文件对URL资源集合进行更新。
本实施例中,后台服务器会利用线程扫描JS文件是否被修改,如果扫描发现有JS被修改,则根据修改后的JS文件来修改JS文件集合。可以采用上述实施例中提供的方式,对修改后的JS文件集合中的多个JS文件进行合并,由此对临时文件进行更新。
URL资源集合包括了多个用于动态打包的URL。具体的,URL资源集合可以采用URL资源列表的形式。在URL资源列表中包括了多个用于动态打包的URL及其对应的第二标识的值。由于在动态打包的过程中URL保持不变,如果临时文件发生变化,则根据临时文件中的多个JS文件所计算出的第二标识的值会相应发生变化。在更新临时文件之后,在URL资源集合中更新对应的第二标识的值。由此在JS文件被修改后,及时根据修改后的JS文件来修改临时文件,确保了动态打包的过程顺利进行。
在一个实施例中,根据修改后的JS文件集合对临时文件进行更新的步骤包括:根据URL资源集合和修改后的JS文件集合计算所需的线程任务;将多个线程任务形成队列;利用队列对多个临时文件进行更新。
本实施例中,如果线程扫描发现有多个JS文件被修改,而且这些JS文件分布于更多个用于动态打包的URL中时,例如,线程扫描发现有50个JS文件被修改,而且这些JS文件分布于200个用于动态打包的URL中时,后台服务器可以采用队列的方式对临时文件进行更新。
具体的,后台服务器根据URL资源集合和修改后的JS文件集合计算所需的线程任务,将多个线程任务形成队列;利用队列对对修改后的JS文件集合中的多个JS文件进行合并,以此对多个临时文件进行更新。由于采用了队列的形式对临时文件进行更新,由此能够批量对用于动态打包的URL所对应的临时文件进行快速更新。
如图4所示,在一个实施例中,一种动态打包装置,该装置包括:接收模块402、计算模块404、判断模块406、合并模块408和返回模块410,其中:
接收模块402,用于接收浏览器发送的判断JS文件是否被修改的请求,请求中携带了JS文件集合和第一标识。
计算模块404,用于根据JS文件集合计算请求对应的第二标识的值。
判断模块406,用于判断第一标识的值与第二标识的值是否相等。
判断模块406还用于若第一标识的值与第二标识的值不相等,则进一步判断第一标识对应的临时文件是否存在,临时文件包括了用于动态打包的URL中的多个JS文件。
合并模块408,用于若第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件。
返回模块410,用于将修改后的临时文件返回至浏览器。
在一个实施例中,如图5所示,该装置还包括:打包模块412和URL生成模块414,其中:
打包模块412,用于根据配置文件对业务特性包进行打包。
URL生成模块414,用于利用界面特性包与业务特性包进行过滤,生成用于动态打包的URL。
在一个实施例中,如图6所示,打包模块412包括:第一获取单元412a、第一解析单元412b、排序单元412c和打包单元412d,其中:
第一获取单元412a,用于读取配置文件,配置文件中包括多个业务特性包;获取业务特性包所依赖的顶级模块。
第一解析单元412b,用于根据业务特性包所依赖的顶级模块获取业务特性包对应的所有依赖模块,得到所有的业务特性包模块。
排序单元412c,用于对业务特性包模块进行排序。
打包单元412d,用于将排序后的业务特性包模块打包为一个文件。
在一个实施例中,如图7所示,URL生成模块414包括:第二获取单元414a、第二解析单元414b、过滤单元414c和生成单元414d,其中:
第二获取单元414a,用于获取界面特性包。
第二解析单元414b,用于从界面特性包中解析界面特性包对应的顶级模块和依赖模块,得到所有的界面特性包模块。
过滤单元414c,用于利用界面特性包模块过滤掉业务特性包模块。
生成单元414d,用于利用过滤后的模块生成用于动态打包的URL。
在一个实施例中,排序单元412c还用于对业务特性包所依赖的顶级模块和依赖模块分别设置对应的计数器;以业务特性包所依赖的顶级模块对应的计数器的值为基准,按照依赖层级将依赖模块对应的计数器逐层累加,分别得到每个依赖模块对应的计数器的值;按照计数器的值的大小对业务特性包所依赖的顶级模块和依赖模块进行排序。
在一个实施例中,判断模块406还用于判断JS文件是否被修改;如图8所示,该装置还包括:更新模块416,用于若JS文件被修改,则根据修改后的JS文件修改JS文件集合;根据修改后的JS文件集合对临时文件进行更新,并利用更新后的临时文件对URL资源集合进行更新。
在一个实施例中,更新模块416包括:任务计算单元416a、队列单元416b和更新单元416c,其中:
任务计算单元416a,用于根据URL资源集合和修改后的JS文件集合计算所需的线程任务。
队列单元416b,用于将多个线程任务形成队列。
更新单元416c,用于利用队列对多个临时文件进行更新。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种动态打包方法,所述方法包括:
接收浏览器发送的判断JS文件是否被修改的请求,所述请求中携带了JS文件集合和第一标识;
根据所述JS文件集合计算所述请求对应的第二标识的值;
判断所述第一标识的值与所述第二标识的值是否相等;
若否,则进一步判断所述第一标识对应的临时文件是否存在,所述临时文件包括了用于动态打包的URL中的多个JS文件;
若所述第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件,并将修改后的临时文件返回至所述浏览器;
所述浏览器访问运行期的页面,所述用于动态打包的URL是在运行期利用业务特性包和界面特性包生成的,在运行期时,多个业务特性包在浏览器只下载一次;
在所述接收浏览器发送的判断JS文件是否被修改的请求的步骤之前,还包括:
根据配置文件对业务特性包进行打包;
利用界面特性包与所述业务特性包进行过滤,生成用于动态打包的URL;
所述根据配置文件对业务特性包进行打包的步骤包括:
读取配置文件,所述配置文件中包括多个业务特性包;
获取所述业务特性包所依赖的顶级模块;
根据所述业务特性包所依赖的顶级模块获取所述业务特性包对应的所有依赖模块,得到所有的业务特性包模块;
对所述业务特性包模块进行排序;
将排序后的业务特性包模块打包为一个文件。
2.根据权利要求1所述的方法,其特征在于,所述利用界面特性包与所述业务特性包进行过滤,生成用于动态打包的URL的步骤包括:
获取界面特性包;
从所述界面特性包中解析所述界面特性包对应的顶级模块和依赖模块,得到所有的界面特性包模块;
利用所述界面特性包模块过滤掉所述业务特性包模块;
利用过滤后的模块生成用于动态打包的URL。
3.根据权利要求1所述的方法,其特征在于,所述对所述业务特性包模块进行排序的步骤包括:
对所述业务特性包所依赖的顶级模块和依赖模块分别设置对应的计数器;
以所述业务特性包所依赖的顶级模块对应的计数器的值为基准,按照依赖层级将依赖模块对应的计数器逐层累加,分别得到每个依赖模块对应的计数器的值;
按照计数器的值的大小对所述业务特性包所依赖的顶级模块和依赖模块进行排序。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
判断JS文件是否被修改;
若是,则根据修改后的JS文件修改JS文件集合;
根据修改后的JS文件集合对临时文件进行更新,并利用更新后的临时文件对URL资源集合进行更新。
5.根据权利要求1所述的方法,其特征在于,所述根据修改后的JS文件集合对临时文件进行更新的步骤包括:
根据URL资源集合和修改后的JS文件集合计算所需的线程任务;
将多个线程任务形成队列;
利用所述队列对多个临时文件进行更新。
6.一种动态打包装置,其特征在于,所述装置包括:
接收模块,用于接收浏览器发送的判断JS文件是否被修改的请求,所述请求中携带了JS文件集合和第一标识;
计算模块,用于根据所述JS文件集合计算所述请求对应的第二标识的值;
判断模块,用于判断所述第一标识的值与所述第二标识的值是否相等;
所述判断模块还用于若所述第一标识的值与所述第二标识的值不相等,则进一步判断所述第一标识对应的临时文件是否存在,所述临时文件包括了用于动态打包的URL中的多个JS文件;
合并模块,用于若所述第一标识对应的临时文件不存在,则利用修改后的JS文件进行合并,得到修改后的临时文件;
返回模块,用于将修改后的临时文件返回至所述浏览器;
所述浏览器访问运行期的页面,所述用于动态打包的URL是在运行期利用业务特性包和界面特性包生成的,在运行期时,多个业务特性包在浏览器只下载一次;
所述装置还包括:
打包模块,用于根据配置文件对业务特性包进行打包;
URL生成模块,用于利用界面特性包与所述业务特性包进行过滤,生成用于动态打包的URL;
所述打包模块包括:
第一获取单元,用于读取配置文件,所述配置文件中包括多个业务特性包;获取所述业务特性包所依赖的顶级模块;
第一解析单元,用于根据所述业务特性包所依赖的顶级模块获取所述业务特性包对应的所有依赖模块,得到所有的业务特性包模块;
排序单元,用于对所述业务特性包模块进行排序;
打包单元,用于将排序后的业务特性包模块打包为一个文件。
7.根据权利要求6所述的装置,其特征在于,所述URL生成模块包括:
第二获取单元,用于获取界面特性包;
第二解析单元,用于从所述界面特性包中解析所述界面特性包对应的顶级模块和依赖模块,得到所有的界面特性包模块;
过滤单元,用于利用所述界面特性包模块过滤掉所述业务特性包模块;
生成单元,用于利用过滤后的模块生成用于动态打包的URL。
8.根据权利要求6所述的装置,其特征在于,所述排序单元还用于对所述业务特性包所依赖的顶级模块和依赖模块分别设置对应的计数器;以所述业务特性包所依赖的顶级模块对应的计数器的值为基准,按照依赖层级将依赖模块对应的计数器逐层累加,分别得到每个依赖模块对应的计数器的值;按照计数器的值的大小对所述业务特性包所依赖的顶级模块和依赖模块进行排序。
9.根据权利要求6所述的装置,其特征在于,所述判断模块还用于判断JS文件是否被修改;
所述装置还包括:
更新模块,用于若JS文件被修改,则根据修改后的JS文件修改JS文件集合;根据修改后的JS文件集合对临时文件进行更新,并利用更新后的临时文件对URL资源集合进行更新。
10.根据权利要求9所述的装置,其特征在于,所述更新模块包括:
任务计算单元,用于根据URL资源集合和修改后的JS文件集合计算所需的线程任务;
队列单元,用于将多个线程任务形成队列;
更新单元,用于利用所述队列对多个临时文件进行更新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510844403.9A CN105468412B (zh) | 2015-11-26 | 2015-11-26 | 动态打包方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510844403.9A CN105468412B (zh) | 2015-11-26 | 2015-11-26 | 动态打包方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105468412A CN105468412A (zh) | 2016-04-06 |
CN105468412B true CN105468412B (zh) | 2020-09-08 |
Family
ID=55606150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510844403.9A Active CN105468412B (zh) | 2015-11-26 | 2015-11-26 | 动态打包方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105468412B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108804130B (zh) * | 2017-05-03 | 2020-12-01 | 腾讯科技(深圳)有限公司 | 程序安装包生成方法及装置 |
CN107450927A (zh) * | 2017-08-02 | 2017-12-08 | 郑州云海信息技术有限公司 | 一种前端业务提供方法和装置 |
CN108733448B (zh) * | 2018-05-28 | 2023-04-07 | 北京小米移动软件有限公司 | 主题处理方法、装置、设备、系统及存储介质 |
CN110531983A (zh) * | 2019-08-08 | 2019-12-03 | 国云科技股份有限公司 | 一种基于多项目构建的前端页面按需打包方法 |
CN113741951B (zh) * | 2020-05-29 | 2024-06-18 | 北京沃东天骏信息技术有限公司 | 本地打包方法和装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101201827B (zh) * | 2006-12-14 | 2013-02-20 | 阿里巴巴集团控股有限公司 | 一种网页显示的方法和系统 |
CN102340704B (zh) * | 2010-07-16 | 2013-04-10 | 中国联合网络通信集团有限公司 | 异步动态页面切换方法和系统以及服务器 |
CN102487403B (zh) * | 2010-12-03 | 2014-06-11 | 腾讯科技(深圳)有限公司 | 由服务器端执行js的方法和装置 |
CN102141914A (zh) * | 2010-12-16 | 2011-08-03 | 华为技术有限公司 | 提升移动微件Widget应用性能的方法及装置 |
CN102882991B (zh) * | 2012-09-29 | 2016-03-30 | 北京奇虎科技有限公司 | 一种浏览器及其进行域名解析的方法 |
CN104484383B (zh) * | 2014-12-10 | 2017-11-14 | 北京国双科技有限公司 | Js文件处理方法和装置 |
CN105049532B (zh) * | 2015-08-28 | 2018-07-13 | 北京奇艺世纪科技有限公司 | 一种sdk包的打包方法及装置和下载方法及装置 |
-
2015
- 2015-11-26 CN CN201510844403.9A patent/CN105468412B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN105468412A (zh) | 2016-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105468412B (zh) | 动态打包方法和装置 | |
EP3508977A1 (en) | Partitioning based migration of systems to container and microservice based platforms | |
CN108628751B (zh) | 一种无用依赖项检测方法及装置 | |
US20150106663A1 (en) | Hash labeling of logging messages | |
CN112527459B (zh) | 一种基于Kubernetes集群的日志分析方法及装置 | |
CN104320312A (zh) | 网络应用安全测试工具及模糊测试用例生成方法和系统 | |
US20140298107A1 (en) | Dynamic Near Real-Time Diagnostic Data Capture | |
US8341212B2 (en) | Service description refinement based on actual service use | |
CN111078276B (zh) | 应用程序的冗余资源处理方法、装置、设备及存储介质 | |
CN111813739A (zh) | 数据迁移方法、装置、计算机设备及存储介质 | |
CN113900907B (zh) | 一种映射构建方法和系统 | |
CN113568604B (zh) | 风控策略的更新方法、装置及计算机可读存储介质 | |
CN103684823A (zh) | 网络日志记录方法、网络访问路径确定方法及相关装置 | |
CN113360300B (zh) | 接口调用链路生成方法、装置、设备及可读存储介质 | |
CN104503983A (zh) | 为搜索引擎提供网站认证数据的方法及装置 | |
CN116304458B (zh) | 一种web页面实时通知更新方法、装置、设备及介质 | |
CN110505294B (zh) | 一种试飞数据文件自动分发的方法 | |
CN111966718A (zh) | 用于应用系统的数据传播追踪的系统及方法 | |
CN115396159A (zh) | 一种容器镜像的检测方法及客户端、服务端 | |
CN114281549A (zh) | 数据的处理方法及装置 | |
CN112114870A (zh) | 一种打包代码的方法、装置、终端设备和存储介质 | |
CN110362595A (zh) | 一种sql语句动态解析方法 | |
CN112948332B (zh) | 一种点云文件封装、解析方法及装置 | |
CN111276246B (zh) | 一种基于v8引擎的人体生理数据分析方法及装置 | |
CN113626739B (zh) | 一种网站渲染路径加速优化方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |