一种代码压缩方法及系统的制作方法

文档序号:6636529阅读:170来源:国知局
一种代码压缩方法及系统的制作方法
【专利摘要】本发明公开了一种代码压缩方法及系统,应用于预先构建完成的压缩环境中,所述方法包括:依据预设的压缩规则,对开发代码文件中的开发代码进行分包,得到多个原始代码包,每个原始代码包分别对应其包配置文件,包配置文件中包含有其所属原始代码包的压缩方式;为引用每个原始代码包的代码文件设置开关变量;依据压缩规则确定压缩配置文件,压缩配置文件中包含有压缩属性;执行压缩配置文件,以使得分别以每个包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包,压缩代码包组成压缩代码文件,压缩代码文件中压缩代码包的压缩结构与压缩属性相对应,压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
【专利说明】一种代码压缩方法及系统

【技术领域】
[0001]本发明涉及软件开发【技术领域】,特别涉及一种代码压缩方法及系统。

【背景技术】
[0002]在软件应用开发中,为了能够让代码文件更小,执行效率更高,并且出于保护代码的目的,一般会对进入实际使用中的代码进行压缩。
[0003]在现有的javascript压缩方案中,通常开发与压缩分开,也就是说,在基本开发完成后,通过一次性将代码进行压缩的方式得到压缩代码,再经过多次反复的进行源代码与压缩代码的效果对比之后,以得到压缩成功的压缩代码,将压缩包更新到实际的应用系统中。
[0004]其中,在现有的压缩方案中,将压缩代码和开发代码完全隔开,且通常是多种功能或类型的代码模块合并在一个代码文件中,因此,在测试或效果比对出现问题时无法准确定位到出现问题的代码模块,需要依次对每个模块进行检测,由此,明显降低代码开发效率。


【发明内容】

[0005]本发明的目的在于,提供一种代码压缩方法及系统,用以解决现有技术中的代码压缩方案,将压缩代码和开发代码完全隔开,且通常是多种功能或类型的代码模块合并在一个代码文件中,在测试或效果比对出现问题时无法准确定位到出现问题的代码模块,需要依次对每个模块进行检测,由此,明显降低代码开发效率的技术问题。
[0006]本发明提供了一种代码压缩方法,应用于预先构建完成的压缩环境中,所述方法包括:
[0007]依据预设的压缩规则,对开发代码文件中的开发代码进行分包,得到多个原始代码包,每个所述原始代码包分别对应其包配置文件,所述包配置文件中包含有其所属原始代码包的压缩方式;
[0008]为引用每个所述原始代码包的代码文件设置开关变量;
[0009]依据所述压缩规则确定压缩配置文件,所述压缩配置文件中包含有压缩属性;
[0010]执行所述压缩配置文件,以使得分别以每个所述包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包,所述压缩代码包组成压缩代码文件,所述压缩代码文件中压缩代码包的压缩结构与所述压缩属性相对应,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
[0011]上述方法,优选的,所述压缩规则包括:按照预设的代码功能类别对代码进行分包;
[0012]相应的,所述依据预设的压缩规则,对开发代码文件中的开发代码进行分包,得到多个原始代码包,包括:
[0013]对开发代码文件中的开发代码依据预设的代码功能类别进行分类;
[0014]将属于同一类别的开发代码组成一个原始代码包;
[0015]依据预设的包压缩规则,生成包说明文件及每个所述原始代码包的包配置文件,所述包说明文件中包括有每个原始代码包的包信息及其包配置文件的位置信息,每个所述包配置文件中包含有其所属原始代码包的压缩方式。
[0016]上述方法,优选的,所述执行所述压缩配置文件,以使得分别以每个所述包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包,包括:
[0017]读取所述包说明文件,以获取所述包说明文件中每个包配置文件的位置信息;
[0018]以所述位置信息读取到每个所述包配置文件;
[0019]获取每个所述包配置文件中的压缩方式;
[0020]以所述压缩方式对其所属原始代码包进行代码压缩,得到每个原始代码包各自对应的压缩代码包;
[0021]以所述压缩配置文件中的压缩属性,将所有所述压缩代码包进行结构合并,得到压缩代码文件,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
[0022]上述方法,优选的,在得到多个压缩代码包之后,所述方法还包括:
[0023]依据接收到的调用请求,确定与所述调用请求相对应的压缩代码包所对应的第一开关变量;
[0024]依据所述第一开关变量,生成调用代码;
[0025]执行所述调用代码,以调用与所述第一开关变量相对应的压缩代码包。
[0026]上述方法,优选的,在执行所述第一调用代码,以调用与所述第一开关变量相对应的压缩代码包之后,所述方法还包括:
[0027]依据接收到的调试请求,确定与所述调试请求相对应的压缩代码包所对应的第二开关变量;
[0028]依据所述第二开关变量,生成调试代码;
[0029]执行所述调试代码,以调用与所述第二开关变量相对应的原始代码包。
[0030]本发明还提供了一种代码压缩系统,应用于预先构建完成的压缩环境中,所述系统包括:
[0031]代码分包单元,用于依据预设的压缩规则,对开发代码文件中的开发代码进行分包,得到多个原始代码包,每个所述原始代码包分别对应其包配置文件,所述包配置文件中包含有其所属原始代码包的压缩方式;
[0032]开关设置单元,用于为引用每个所述原始代码包的代码文件设置开关变量;
[0033]配置确定单元,用于依据所述压缩规则确定压缩配置文件,所述压缩配置文件中包含有压缩属性;
[0034]文件执行单元,用于执行所述压缩配置文件,以使得分别以每个所述包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包,所述压缩代码包组成压缩代码文件,所述压缩代码文件中压缩代码包的压缩结构与所述压缩属性相对应,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
[0035]上述系统,优选的,所述压缩规则包括:按照预设的代码功能类别对代码进行分包;
[0036]相应的,所述代码分包单元包括:
[0037]代码分类子单元,用于对开发代码文件中的开发代码依据预设的代码功能类别进行分类;
[0038]包组成子单元,用于将属于同一类别的开发代码组成一个原始代码包;
[0039]文件生成子单元,用于依据预设的包压缩规则,生成包说明文件及每个所述原始代码包的包配置文件,所述包说明文件中包括有每个原始代码包的包信息及其包配置文件的位置信息,每个所述包配置文件中包含有其所属原始代码包的压缩方式。
[0040]上述系统,优选的,所述文件执行单元包括:
[0041]第一文件读取子单元,用于读取所述包说明文件,以获取所述包说明文件中每个包配置文件的位置信息;
[0042]第二文件读取子单元,用于以所述位置信息读取到每个所述包配置文件;
[0043]压缩方式获取子单元,用于获取每个所述包配置文件中的压缩方式;
[0044]代码压缩子单元,用于以所述压缩方式对其所属原始代码包进行代码压缩,得到每个原始代码包各自对应的压缩代码包;
[0045]压缩包合并子单元,用于以所述压缩配置文件中的压缩属性,将所有所述压缩代码包进行结构合并,得到压缩代码文件,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
[0046]上述系统,优选的,还包括:
[0047]第一变量确定单元,用于在所述文件执行单元执行所述压缩配置文件以得到多个压缩代码包之后,依据接收到的调用请求,确定与所述调用请求相对应的压缩代码包所对应的第一开关变量;
[0048]调用代码生成单元,用于依据所述第一开关变量,生成调用代码;
[0049]调用代码执行单元,用于执行所述调用代码,以调用与所述第一开关变量相对应的压缩代码包。
[0050]上述系统,优选的,还包括:
[0051]第二变量确定单元,用于依据接收到的调试请求,确定与所述调试请求相对应的压缩代码包所对应的第二开关变量;
[0052]调试代码生成单元,用于依据所述第二开关变量,生成调试代码;
[0053]调试代码执行单元,用于执行所述调试代码,以条用与所述第二开关变量相对应的原始代码包。
[0054]由上述方案可知,本发明提供的一种代码压缩方法及系统,应用于预先构建完成的压缩环境如Java环境中,在进行代码压缩时,首先按照预设的压缩规则对开发代码进行分包,以得到多个原始代码包,这些原始代码包都有一个含有相应压缩方式信息的包配置文件,之后,对引用每个原始代码包的代码文件均设置开关变量,并依据前文中的压缩规则确定包含有压缩属性的压缩配置文件,进而通过执行该压缩配置文件,以使得分别以每个压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包组成压缩代码文件,而此时的压缩代码文件中压缩代码包的压缩结构与压缩配置文件中的压缩属性相对应,同时,每个压缩代码包分别通过开关变量与其对应的原始代码包相关联,因此,在后续应用中,开发人员只需控制引用原始代码包的代码文件所对应的开关变量来实现压缩代码与开发代码之间的切换,也就是压缩代码的调用及开发代码的调试之间的切换。本发明中,在压缩代码和开发代码之间通过设置开关变量进行关联,并非将两种代码完全隔开,而且在代码压缩时将功能或类型不同的代码进行分开压缩再组合,因此,通过本发明压缩得到的代码在测试或效果比对出现问题时可以通过开关变量准确定位到出现问题的代码包(即代码模块),无线需要再依次对每个包进行检测,由此,明显提高代码开发效率。

【专利附图】

【附图说明】
[0055]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0056]图1为本发明提供的一种代码压缩方法实施例一的流程图;
[0057]图2为本发明提供的一种代码压缩方法实施例二的部分流程图;
[0058]图3为本发明实施例的应用示例图;
[0059]图4为本发明提供的一种代码压缩方法实施例二的部分流程图;
[0060]图5为本发明提供的一种代码压缩方法实施例三的流程图;
[0061]图6为本发明提供的一种代码压缩方法实施例五的部分流程图;
[0062]图7为本发明实施例的另一应用示例图;
[0063]图8为本发明提供的一种代码压缩系统实施例六的结构示意图;
[0064]图9为本发明提供的一种代码压缩系统实施例七的部分结构示意图;
[0065]图10为本发明提供的一种代码压缩系统实施例八的部分结构示意图;
[0066]图11为本发明提供的一种代码压缩系统实施例九的结构示意图;
[0067]图12为本发明提供的一种代码压缩系统实施例十的结构示意图。

【具体实施方式】
[0068]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0069]参考图1,为本发明提供的一种代码压缩方法实施例一的流程图,其中,所述方法应用于预先构建完成的压缩环境中,所述压缩环境可以理解为:在正常的开发环境的代码结构下,将压缩构建所需要的环境进行配置,以得到压缩环境,在本实施例中,可以以Java环境为例,也就是说,在进行本实施例中的实现方案时,需要保证Java环境已经安装完成。
[0070]在本实施例中,所述方法可以通过以下步骤实现对代码的压缩:
[0071]步骤101:依据预设的压缩规则,对开发代码文件中的开发代码进行分包,得到多个原始代码包。
[0072]其中,每个所述原始代码包分别对应其包配置文件,所述包配置文件中包含有其所属原始代码包的压缩方式。
[0073]需要说明的是,所述压缩规则是指开发人员根据其实际需要预先设置的对原始代码如何进行压缩的规则,如整体压缩或分块压缩及采用何种方式进行压缩的规则。而每个所述原始代码包中各自的包配置文件中包含对其原始代码包中原始代码的压缩方式,例如,对哪些代码进行压缩对哪些代码进行直接复制等压缩方式。
[0074]步骤102:为引用每个所述原始代码包的代码文件设置开关变量。
[0075]需要说明的是,本实施例中的开关变量只有一个,但其分布在所有引用每个所述原始代码包的代码文件的位置上,也就是说,可以通过对引用代码文件上开关变量的控制,以实现在该开关变量对应代码文件的所引用的原始代码包上的跳转或调用等。
[0076]步骤103:依据所述压缩规则确定压缩配置文件,所述压缩配置文件中包含有压缩属性。
[0077]其中,所述压缩属性可以理解为,每个所述原始代码包中的代码被压缩之后进行组合排列的结构等属性及对所有包采用何种压缩方式进行代码压缩的属性,如一行或多行排列等压缩结构属性及对js及CSS等代码如何进行压缩的属性。
[0078]步骤104:执行所述压缩配置文件,以使得分别以每个所述包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包。
[0079]其中,所述压缩代码包组成压缩代码文件,所述压缩代码文件中压缩代码包的压缩结构与所述压缩属性相对应,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
[0080]需要说明的是,所述压缩配置文件即为执行文件,执行该压缩配置文件的过程即为:分别以每个所述包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包,以使得所述压缩代码包组成压缩代码文件,而所述压缩代码文件中压缩代码包的压缩结构与所述压缩属性相对应。
[0081]在本实施例中,所述压缩代码文件中每个压缩代码包与其对应原始代码包的引用代码文件上的开关变量相关联,开发人员可以通过控制引用代码文件上的开关变量以达到在所引用的原始代码与压缩代码之间的切换。
[0082]由上述方案可知,本发明提供的一种代码压缩方法实施例一,应用于预先构建完成的压缩环境如Java环境中,在进行代码压缩时,首先按照预设的压缩规则对开发代码进行分包,以得到多个原始代码包,这些原始代码包都有一个含有相应压缩方式信息的包配置文件,之后,对引用每个原始代码包的代码文件均设置开关变量,并依据前文中的压缩规则确定包含有压缩属性的压缩配置文件,进而通过执行该压缩配置文件,以使得分别以每个压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包组成压缩代码文件,而此时的压缩代码文件中压缩代码包的压缩结构与压缩配置文件中的压缩属性相对应,同时,每个压缩代码包分别通过开关变量与其对应的原始代码包相关联,因此,在后续应用中,开发人员只需控制引用代码文件上的开关变量即可实现引用代码文件所引用的压缩代码与开发代码之间的切换,也就是压缩代码的调用及开发代码的调试之间的切换。本实施例中,在压缩代码和开发代码之间通过在引用该压缩代码的代码文件上设置开关变量进行关联,并非将两种代码完全隔开,而且在代码压缩时将功能或类型不同的代码进行分开压缩再组合,因此,通过本发明压缩得到的代码在测试或效果比对出现问题时可以通过开关变量准确定位到出现问题的代码包(即代码模块),无线需要再依次对每个包进行检测,由此,明显提高代码开发效率。
[0083]需要说明的是,本实施例可以通过Dojo实现,其中,Dojo是一个用JavaScript实现的开源DHTML工具包。Dojo的目标是解决DHTML应用程序遇到的那些,长期存在、历史问题以及DHTML跨浏览器问题。
[0084]在上述实施例中,所述压缩规则包括:按照预设的代码功能类别对代码进行分包。例如,对于JavaScript的代码有着三种分类:组件代码、插件代码、页面代码等功能分类:
[0085]组件代码:组件通常是一个具有一定复用性的代码体。组件代码会根据其用途进行分类,最后组成组件的代码包。根据本系统的压缩策略,同种功能的组件会被定为一个功能组件包,这样的组件包内会在压缩过程中,会被压缩为一个“功能层”,在使用时,只需要调用相应的功能层就可以找到对应的组件;
[0086]插件代码:插件主要是指第三方开发的能够应用于当前系统的一组功能模块对应的代码。这样的代码通常是有自己的压缩要求,按其要求将压缩所需配置加入当前的压缩配置即可;
[0087]页面代码:页面代码是指HTML或JSP所需的操作功能代码。这样的代码具有一个页面对应一个代码文件,因此,在压缩时,不会对此类代码进行合并,而只是页面代码进行压缩。
[0088]在本实施例中,相应的,参考图2,为本发明提供的一种代码压缩方法实施例二中所述步骤101的实现流程图,其中,所述步骤101中,在依据预设的压缩规则,对开发代码文件中的开发代码进行分包,得到多个原始代码包时,可以通过以下步骤实现:
[0089]步骤111:对开发代码文件中的开发代码依据预设的代码功能类别进行分类。
[0090]如前文中提到的组件代码、插件代码及页面代码等。
[0091]步骤112:将属于同一类别的开发代码组成一个原始代码包。
[0092]步骤113:依据预设的包压缩规则,生成包说明文件及每个所述原始代码包的包配置文件。
[0093]其中,所述包说明文件中包括有每个原始代码包的包信息及其包配置文件的位置信息,每个所述包配置文件中包含有其所属原始代码包的压缩方式。
[0094]需要说明的是,所述包信息中包括有每个所述原始代码包的基本信息,如描述信息、名称及代码功能信息等。
[0095]相应的,在后续对每个所述原始代码包设置开关变量并对每个原始代码包进行压缩之后,可以通过对相应开关变量的控制,以达到分块引用某个压缩代码包的目的。以前文中组件代码、插件代码及页面代码的分块压缩为例,相应的开关变量及页面引用的逻辑关系可以如图3中所示,也就是说,在代码分包之后,分块进行压缩,形成各自的压缩代码包,进而通过设置的开关变量,被独立调用实现各自分块的页面引用。
[0096]基于前一实施例中的实现方案,参考图4,为本发明提供的一种代码压缩方法实施例二中所述104的实现流程图,其中,所述步骤104可以包括以下步骤:
[0097]步骤141:读取所述包说明文件,以获取所述包说明文件中每个包配置文件的位置信息。
[0098]步骤142:以所述位置信息读取到每个所述包配置文件。
[0099]也就是说,通过读取所述包说明文件中每个包配置文件的位置信息,依次来读取相应的包配置文件。
[0100]步骤143:获取每个所述包配置文件中的压缩方式。
[0101]步骤144:以所述压缩方式对其所属原始代码包进行代码压缩,得到每个原始代码包各自对应的压缩代码包。
[0102]其中,所述压缩方式是指,对所述原始代码包中的哪些代码进行压缩,对哪些代码直接进行复制等方式,区别于所述压缩配置文件中的压缩属性。
[0103]步骤145:以所述压缩配置文件中的压缩属性,将所有所述压缩代码包进行结构合并,得到压缩代码文件,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
[0104]其中,所述压缩属性的内容可以参考前文中所描述的内容,即为:每个所述原始代码包中的代码被压缩之后进行组合排列的结构等属性及对所有包采用何种压缩方式进行代码压缩的属性,如一行或多行排列等压缩结构属性及对js及css等代码如何进行压缩的属性。
[0105]参考图5,为本发明提供的一种代码压缩方法实施例三的流程图,其中,在所述步骤104之后,所述方法还可以包括以下步骤:
[0106]步骤105:依据接收到的调用请求,确定与所述调用请求相对应的压缩代码包所对应的第一开关变量。
[0107]其中,所述第一开关变量是指设置在于所述调用请求所对应的压缩代码包的引用代码文件上的开关变量。
[0108]也就是说,在开发代码文件完成其代码的分块压缩及开关变量设置之后,能够进行压缩代码的调用时,通过对调用请求中开关变量的位置进行分析,以确定需要调用的压缩代码包所对应的位置,通过后续操作之后,才能完成相应独立压缩代码包的分块引用。
[0109]步骤106:依据所述第一开关变量,生成调用代码。
[0110]其中,所述调用代码是指:能够将与所述调用请求相对应的压缩代码包进行页面引用的执行代码。
[0111]步骤107:执行所述调用代码,以调用与所述第一开关变量相对应的压缩代码包。
[0112]由此,在执行所述步骤107之后,能够将与所述调用请求相对应的压缩代码包引用到相应的应用页面中,实现分块引用的目的,节省代码空间,并提高引用效率。
[0113]参考图6,为本发明提供的一种代码压缩方法实施例五的部分流程图,其中,在所述步骤107之后,所述方法还可以包括以下步骤:
[0114]步骤108:依据接收到的调试请求,确定与所述调试请求相对应的压缩代码包所对应的第二开关变量。
[0115]其中,所述第二开关变量是指设置在于所述调试请求所对应的压缩代码包的引用代码文件上的开关变量。
[0116]也就是说,在压缩代码完成页面引用之后,可能存在出现问题的地方,或者开发人员需要对压缩代码及其对应原始代码进行效果比对,此时,需要返回到开发代码文件中需要调试的原始代码包的位置,因此,本实施例中,通过对调试请求中的开关变量的所在引用代码文件的位置进行分析,以确定需要调试的压缩代码包所对应的原始代码包的位置,通过后续操作之后,通过引用代码文件才能完成相应原始代码包位置的切换。
[0117]步骤109:依据所述第二开关变量,生成调试代码;
[0118]其中,所述调试代码是指:能够利用该第二开关变量切换至与所述调试请求相对应的压缩代码包所对应的原始代码包的位置上,以便开发人员对原始代码包进行修改或者效果比对。
[0119]步骤110:执行所述调试代码,以调用与所述第二开关变量相对应的原始代码包。
[0120]由此,在执行所述步骤110之后,能够将所述压缩环境切换至与所述调试请求相对应的压缩代码包所对应的原始代码包的代码位置,实现代码切换的目的,无需再逐行进行寻找,明显提高调试效率及开发效率。
[0121]本实施例中,通过对开关变量的控制,可以控制页面引用的代码。这样功能的实现需要在压缩时,进行特殊的配置,即将压缩后的文件与源文件的物理地址进行对应,并且所有的引用地址,均可以通过一个变量的添加和去除,来将地址正确的切换到对应的代码。
[0122]如图7中所示,其中resourcePath表示的是本地资源路径变量,buildRelease变量既是开关变量。在左侧的资源管理器示意图中,可以看出对应原有的“页面代码”在scripts路径下,下面有“home” “sms” “affairs”等子文件夹,通过压缩后产生了对应页面代码的压缩后页面代码,在release路径下。
[0123]在页面使用中,通过加入了 “开关变量”的引用语句,例如图7中,想要使用home目录下的home, js文件,则需通过图中的语句引入。这样的话,如果页面想要使用压缩后的变量,可以将开关变量设置为“release/”;如果压缩代码使用有问题,需要进行调整,则可以通过buildRelease设置,切回开发环境进行修改。
[0124]同时,在压缩进行时,则需要根据压缩策略,在压缩配置时,将所压缩的文件进行对应的分布,例如上图中的“页面代码”,则将压缩文件分布在scripts同级目录下,并且由release的压缩路径标识。
[0125]参考图8,为本发明提供的一种代码压缩系统实施例六的结构示意图,其中,所述系统应用于预先构建完成的压缩环境中,所述压缩环境可以理解为:在正常的开发环境的代码结构下,将压缩构建所需要的环境进行配置,以得到压缩环境,在本实施例中,可以以Java环境为例,也就是说,在进行本实施例中的实现方案时,需要保证Java环境已经安装完成。
[0126]在本实施例中,所述系统可以通过以下结构单元实现对代码的压缩:
[0127]代码分包单元801,用于依据预设的压缩规则,对开发代码文件中的开发代码进行分包,得到多个原始代码包。
[0128]其中,每个所述原始代码包分别对应其包配置文件,所述包配置文件中包含有其所属原始代码包的压缩方式。
[0129]需要说明的是,所述压缩规则是指开发人员根据其实际需要预先设置的对原始代码如何进行压缩的规则,如整体压缩或分块压缩及采用何种方式进行压缩的规则。而每个所述原始代码包中各自的包配置文件中包含对其原始代码包中原始代码的压缩方式,例如,对哪些代码进行压缩对哪些代码进行直接复制等压缩方式。
[0130]开关设置单元802,用于为引用每个所述原始代码包的代码文件设置开关变量。
[0131]需要说明的是,本实施例中的开关变量只有一个,但其分布在所有引用每个所述原始代码包的代码文件的位置上,也就是说,可以通过对引用代码文件上开关变量的控制,以实现在该开关变量对应代码文件的所引用的原始代码包上的跳转或调用等。
[0132]配置确定单元803,用于依据所述压缩规则确定压缩配置文件,所述压缩配置文件中包含有压缩属性。
[0133]其中,所述压缩属性可以理解为,每个所述原始代码包中的代码被压缩之后进行组合排列的结构等属性及对所有包采用何种压缩方式进行代码压缩的属性,如一行或多行排列等压缩结构属性及对js及CSS等代码如何进行压缩的属性。
[0134]文件执行单元804,用于执行所述压缩配置文件,以使得分别以每个所述包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包。
[0135]其中,所述压缩代码包组成压缩代码文件,所述压缩代码文件中压缩代码包的压缩结构与所述压缩属性相对应,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
[0136]需要说明的是,所述压缩配置文件即为执行文件,执行该压缩配置文件的过程即为:分别以每个所述包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包,以使得所述压缩代码包组成压缩代码文件,而所述压缩代码文件中压缩代码包的压缩结构与所述压缩属性相对应。
[0137]在本实施例中,所述压缩代码文件中每个压缩代码包与其对应原始代码包的引用代码文件上的开关变量相关联,开发人员可以通过控制引用代码文件上的开关变量以达到所引用的在原始代码与压缩代码之间的切换。
[0138]由上述方案可知,本发明提供的一种代码压缩系统实施例六,应用于预先构建完成的压缩环境如Java环境中,在进行代码压缩时,首先按照预设的压缩规则对开发代码进行分包,以得到多个原始代码包,这些原始代码包都有一个含有相应压缩方式信息的包配置文件,之后,对引用每个原始代码包的代码文件均设置开关变量,并依据前文中的压缩规则确定包含有压缩属性的压缩配置文件,进而通过执行该压缩配置文件,以使得分别以每个压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包组成压缩代码文件,而此时的压缩代码文件中压缩代码包的压缩结构与压缩配置文件中的压缩属性相对应,同时,每个压缩代码包分别通过开关变量与其对应的原始代码包相关联,因此,在后续应用中,开发人员只需控制引用代码文件上的开关变量即可实现引用代码文件锁引用的压缩代码与开发代码之间的切换,也就是压缩代码的调用及开发代码的调试之间的切换。本实施例中,在压缩代码和开发代码之间通过在引用该压缩代码的代码文件上设置开关变量进行关联,并非将两种代码完全隔开,而且在代码压缩时将功能或类型不同的代码进行分开压缩再组合,因此,通过本发明压缩得到的代码在测试或效果比对出现问题时可以通过开关变量准确定位到出现问题的代码包(即代码模块),无线需要再依次对每个包进行检测,由此,明显提高代码开发效率。
[0139]需要说明的是,本实施例可以通过Dojo实现,其中,Dojo是一个用JavaScript实现的开源DHTML工具包。Dojo的目标是解决DHTML应用程序遇到的那些,长期存在、历史问题以及DHTML跨浏览器问题。
[0140]上述实施例中,所述压缩规则可以为:按照预设的代码功能类别对代码进行分包,相应的,参考图9,为本发明提供的一种代码压缩系统实施例七中所述代码分包单元801的结构示意图,其中,所述代码分包单元801可以包括以下结构实现:
[0141]代码分类子单元811,用于对开发代码文件中的开发代码依据预设的代码功能类别进行分类。
[0142]如前文中提到的组件代码、插件代码及页面代码等。
[0143]包组成子单元812,用于将属于同一类别的开发代码组成一个原始代码包。
[0144]文件生成子单元813,用于依据预设的包压缩规则,生成包说明文件及每个所述原始代码包的包配置文件。
[0145]其中,所述包说明文件中包括有每个原始代码包的包信息及其包配置文件的位置信息,每个所述包配置文件中包含有其所属原始代码包的压缩方式。
[0146]需要说明的是,所述包信息中包括有每个所述原始代码包的基本信息,如描述信息、名称及代码功能信息等。
[0147]相应的,在后续对每个所述原始代码包设置开关变量并对每个原始代码包进行压缩之后,可以通过对相应开关变量的控制,以达到分块引用某个压缩代码包的目的。以前文中组件代码、插件代码及页面代码的分块压缩为例,相应的开关变量及页面引用的逻辑关系可以如图3中所示,也就是说,在代码分包之后,分块进行压缩,形成各自的压缩代码包,进而通过设置的开关变量,被独立调用实现各自分块的页面引用。
[0148]基于前一实施例中的实现方案,参考图10,为本发明提供的一种代码压缩系统实施例八中所述文件执行单元804的结构示意图,其中,所述文件执行单元804可以通过以下结构实现:
[0149]第一文件读取子单元841,用于读取所述包说明文件,以获取所述包说明文件中每个包配置文件的位置信息。
[0150]第二文件读取子单元842,用于以所述位置信息读取到每个所述包配置文件。
[0151]也就是说,通过读取所述包说明文件中每个包配置文件的位置信息,依次来读取相应的包配置文件。
[0152]压缩方式获取子单元843,用于获取每个所述包配置文件中的压缩方式。
[0153]代码压缩子单元844,用于以所述压缩方式对其所属原始代码包进行代码压缩,得到每个原始代码包各自对应的压缩代码包。
[0154]其中,所述压缩方式是指,对所述原始代码包中的哪些代码进行压缩,对哪些代码直接进行复制等方式,区别于所述压缩配置文件中的压缩属性。
[0155]压缩包合并子单元845,用于以所述压缩配置文件中的压缩属性,将所有所述压缩代码包进行结构合并,得到压缩代码文件,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
[0156]其中,所述压缩属性的内容可以参考前文中所描述的内容,即为:每个所述原始代码包中的代码被压缩之后进行组合排列的结构等属性及对所有包采用何种压缩方式进行代码压缩的属性,如一行或多行排列等压缩结构属性及对js及CSS等代码如何进行压缩的属性。
[0157]参考图11,为本发明提供的一种代码压缩系统实施例九的结构示意图,其中,所述系统还可以包括以下结构单元:
[0158]第一变量确定单元805,用于在所述文件执行单元804执行所述压缩配置文件以得到多个压缩代码包之后,依据接收到的调用请求,确定与所述调用请求相对应的压缩代码包所对应的第一开关变量。
[0159]其中,所述第一开关变量是指设置在于所述调用请求所对应的压缩代码包的引用代码文件上的开关变量。
[0160]也就是说,在开发代码文件完成其代码的分块压缩及开关变量设置之后,能够进行压缩代码的调用时,通过对调用请求中开关变量的位置进行分析,以确定需要调用的压缩代码包所对应的位置,通过后续操作之后,才能完成相应独立压缩代码包的分块引用。
[0161]调用代码生成单元806,用于依据所述第一开关变量,生成调用代码。
[0162]其中,所述调用代码是指:能够将与所述调用请求相对应的压缩代码包进行页面引用的执行代码。
[0163]调用代码执行单元807,用于执行所述调用代码,以调用与所述第一开关变量相对应的压缩代码包。
[0164]由此,在运行所述调用代码执行单元807之后,能够将与所述调用请求相对应的压缩代码包引用到相应的应用页面中,实现分块引用的目的,节省代码空间,并提高引用效率。
[0165]参考图12,为本发明提供的一种代码压缩系统实施例十的结构示意图,其中,所述系统还可以包括以下结构:
[0166]第二变量确定单元808,用于依据接收到的调试请求,确定与所述调试请求相对应的压缩代码包所对应的第二开关变量。
[0167]其中,所述第二开关变量是指设置在于所述调试请求所对应的压缩代码包的引用代码文件上的开关变量。
[0168]也就是说,在压缩代码完成页面引用之后,可能存在出现问题的地方,或者开发人员需要对压缩代码及其对应原始代码进行效果比对,此时,需要返回到开发代码文件中需要调试的原始代码包的位置,因此,本实施例中,通过对调试请求中的开关变量的所在引用代码文件的位置进行分析,以确定需要调试的压缩代码包所对应的原始代码包的位置,通过后续操作之后,通过引用代码文件才能完成相应原始代码包位置的切换。
[0169]调试代码生成单元809,用于依据所述第二开关变量,生成调试代码。
[0170]其中,所述调试代码是指:能够利用该第二开关变量切换至与所述调试请求相对应的压缩代码包所对应的原始代码包的位置上,以便开发人员对原始代码包进行修改或者效果比对。
[0171]调试代码执行单元810,用于执行所述调试代码,以条用与所述第二开关变量相对应的原始代码包。
[0172]由此,在运行所述调试代码执行单元810之后,能够将所述压缩环境切换至与所述调试请求相对应的压缩代码包所对应的原始代码包的代码位置,实现代码切换的目的,无需再逐行进行寻找,明显提高调试效率及开发效率。
[0173]本实施例中,通过对开关变量的控制,可以控制页面引用的代码。这样功能的实现需要在压缩时,进行特殊的配置,即将压缩后的文件与源文件的物理地址进行对应,并且所有的引用地址,均可以通过一个变量的添加和去除,来将地址正确的切换到对应的代码。
[0174]如图7中所示,其中resourcePath表示的是本地资源路径变量,buildRelease变量既是开关变量。在左侧的资源管理器示意图中,可以看出对应原有的“页面代码”在scripts路径下,下面有“home” “sms” “affairs”等子文件夹,通过压缩后产生了对应页面代码的压缩后页面代码,在release路径下。
[0175]在页面使用中,通过加入了 “开关变量”的引用语句,例如图7中,想要使用home目录下的home, js文件,则需通过图中的语句引入。这样的话,如果页面想要使用压缩后的变量,可以将开关变量设置为“release/”;如果压缩代码使用有问题,需要进行调整,则可以通过buildRelease设置,切回开发环境进行修改。
[0176]同时,在压缩进行时,则需要根据压缩策略,在压缩配置时,将所压缩的文件进行对应的分布,例如上图中的“页面代码”,则将压缩文件分布在scripts同级目录下,并且由release的压缩路径标识。
[0177]需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0178]最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0179]以上对本申请所提供的一种代码压缩方法及系统进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
【权利要求】
1.一种代码压缩方法,其特征在于,应用于预先构建完成的压缩环境中,所述方法包括: 依据预设的压缩规则,对开发代码文件中的开发代码进行分包,得到多个原始代码包,每个所述原始代码包分别对应其包配置文件,所述包配置文件中包含有其所属原始代码包的压缩方式; 为引用每个所述原始代码包的代码文件设置开关变量; 依据所述压缩规则确定压缩配置文件,所述压缩配置文件中包含有压缩属性; 执行所述压缩配置文件,以使得分别以每个所述包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包,所述压缩代码包组成压缩代码文件,所述压缩代码文件中压缩代码包的压缩结构与所述压缩属性相对应,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
2.根据权利要求1所述的方法,其特征在于,所述压缩规则包括:按照预设的代码功能类别对代码进行分包; 相应的,所述依据预设的压缩规则,对开发代码文件中的开发代码进行分包,得到多个原始代码包,包括: 对开发代码文件中的开发代码依据预设的代码功能类别进行分类; 将属于同一类别的开发代码组成一个原始代码包; 依据预设的包压缩规则,生成包说明文件及每个所述原始代码包的包配置文件,所述包说明文件中包括有每个原始代码包的包信息及其包配置文件的位置信息,每个所述包配置文件中包含有其所属原始代码包的压缩方式。
3.根据权利要求2所述的方法,其特征在于,所述执行所述压缩配置文件,以使得分别以每个所述包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包,包括: 读取所述包说明文件,以获取所述包说明文件中每个包配置文件的位置信息; 以所述位置信息读取到每个所述包配置文件; 获取每个所述包配置文件中的压缩方式; 以所述压缩方式对其所属原始代码包进行代码压缩,得到每个原始代码包各自对应的压缩代码包; 以所述压缩配置文件中的压缩属性,将所有所述压缩代码包进行结构合并,得到压缩代码文件,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
4.根据权利要求1、2或3所述的方法,其特征在于,在得到多个压缩代码包之后,所述方法还包括: 依据接收到的调用请求,确定与所述调用请求相对应的压缩代码包所对应的第一开关变量; 依据所述第一开关变量,生成调用代码; 执行所述调用代码,以调用与所述第一开关变量相对应的压缩代码包。
5.根据权利要求4所述的方法,其特征在于,在执行所述第一调用代码,以调用与所述第一开关变量相对应的压缩代码包之后,所述方法还包括: 依据接收到的调试请求,确定与所述调试请求相对应的压缩代码包所对应的第二开关变量; 依据所述第二开关变量,生成调试代码; 执行所述调试代码,以调用与所述第二开关变量相对应的原始代码包。
6.一种代码压缩系统,其特征在于,应用于预先构建完成的压缩环境中,所述系统包括: 代码分包单元,用于依据预设的压缩规则,对开发代码文件中的开发代码进行分包,得到多个原始代码包,每个所述原始代码包分别对应其包配置文件,所述包配置文件中包含有其所属原始代码包的压缩方式; 开关设置单元,用于为引用每个所述原始代码包的代码文件设置开关变量; 配置确定单元,用于依据所述压缩规则确定压缩配置文件,所述压缩配置文件中包含有压缩属性; 文件执行单元,用于执行所述压缩配置文件,以使得分别以每个所述包配置文件中的压缩方式对其对应的原始代码包进行压缩处理,得到多个压缩代码包,所述压缩代码包组成压缩代码文件,所述压缩代码文件中压缩代码包的压缩结构与所述压缩属性相对应,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
7.根据权利要求6所述的系统,其特征在于,所述压缩规则包括:按照预设的代码功能类别对代码进行分包; 相应的,所述代码分包单元包括: 代码分类子单元,用于对开发代码文件中的开发代码依据预设的代码功能类别进行分类; 包组成子单元,用于将属于同一类别的开发代码组成一个原始代码包; 文件生成子单元,用于依据预设的包压缩规则,生成包说明文件及每个所述原始代码包的包配置文件,所述包说明文件中包括有每个原始代码包的包信息及其包配置文件的位置信息,每个所述包配置文件中包含有其所属原始代码包的压缩方式。
8.根据权利要求7所述的系统,其特征在于,所述文件执行单元包括: 第一文件读取子单元,用于读取所述包说明文件,以获取所述包说明文件中每个包配置文件的位置信息; 第二文件读取子单元,用于以所述位置信息读取到每个所述包配置文件; 压缩方式获取子单元,用于获取每个所述包配置文件中的压缩方式; 代码压缩子单元,用于以所述压缩方式对其所属原始代码包进行代码压缩,得到每个原始代码包各自对应的压缩代码包; 压缩包合并子单元,用于以所述压缩配置文件中的压缩属性,将所有所述压缩代码包进行结构合并,得到压缩代码文件,所述压缩代码文件中每个压缩代码包与其对应原始代码包的开关变量相关联。
9.根据权利要求6、7或8所述的系统,其特征在于,还包括: 第一变量确定单元,用于在所述文件执行单元执行所述压缩配置文件以得到多个压缩代码包之后,依据接收到的调用请求,确定与所述调用请求相对应的压缩代码包所对应的第一开关变量; 调用代码生成单元,用于依据所述第一开关变量,生成调用代码; 调用代码执行单元,用于执行所述调用代码,以调用与所述第一开关变量相对应的压缩代码包。
10.根据权利要求9所述的系统,其特征在于,还包括: 第二变量确定单元,用于依据接收到的调试请求,确定与所述调试请求相对应的压缩代码包所对应的第二开关变量; 调试代码生成单元,用于依据所述第二开关变量,生成调试代码; 调试代码执行单元,用于执行所述调试代码,以条用与所述第二开关变量相对应的原始代码包。
【文档编号】G06F9/45GK104331316SQ201410709985
【公开日】2015年2月4日 申请日期:2014年11月28日 优先权日:2014年11月28日
【发明者】李宸, 赵佳国, 范建刚, 王浩远, 金鑫 申请人:中国农业银行股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1