具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参照图1,示出了本申请的一种数据压缩方法实施例的步骤流程图,具体可以包括如下步骤:
步骤101,确定CSS文件中的合并参量,该合并参量至少包括相同的选择器、同一选择器中相同的样式名、不同选择器中的相同样式中的一种。
首先,该CSS文件可以是原始的未经过任何压缩处理的CSS文件,也可以是已经通过现有压缩方式,例如YUICompress、clean-css等压缩处理后的CSS文件,该CSS文件中的空白、注释字符、无效字符等可以已经去除。
本步骤中需要确定出CSS文件中可以进行合并的合并参量。该合并参量为CSS文件中重复出现的内容,具体可以是CSS文件中相同的选择器,也可以是同一选择器中相同的样式名,还可以是相同的样式,该相同的样式是指样式名及样式名的值均相同,当然还可以是同时具有上述合并参量中的两种或三种,下面分别举例说明。
例如:.a{margin:0}.b{padding:0}.a{padding:0}中包含相同的选择器a,在其它实例中相同的选择器可能有多个;.a{margin:0;margin:1px}中在同一选择器a中包含相同的样式名margin,在其它实例中同一选择器可能包含有多个相同的样式名;.a{margin:0;padding:0}.b{margin:0;padding:1}中包含相同的样式margin:0,在其它实例中可能存在多个选择器包含有相同的样式。再如a{margin:0;padding:0;color:#FFF;padding:1}.b{margin:0;padding:1}.a{margin:0;padding:1;color:#FFF}中包含相同的选择器a,同一选择器a中包含相同的样式名padding,且选择器a、b中包含相同的样式margin:0;padding:1。
当确定出CSS文件中包含的合并参量时,执行步骤102。
步骤102,判断合并参量是否满足合并条件。
该合并条件用于判断对合并参量进行合并是否安全,也即合并后获得的CSS压缩文件所展现的样式与合并前是否一致,如果一致则满足合并条件,合并安全,可以执行步骤103,如果不一致则不满足合并条件,合并不安全,此时放弃合并操作。其中,不同的合并参量对应的合并条件可能不同,具体请参见后续实施例的描述。
步骤103,将CSS文件中的合并参量进行合并,获得CSS压缩文件。
将CSS文件中的合并参量进行合并具体可以是合并相同选择器中的样式,也可以是对同一选择器中相同样式名的值进行覆盖或删除,还可以是提取各选择器中相同的样式作为公因子,当合并参量有多种时,可以按照一定的顺序进行多次合并,例如先合并相同的选择器,然后合并同一选择器中相同的样式名,最后再合并各选择器中相同的样式等。总之,将CSS文件中重复出现的内容在满足合并条件的前提下尽可能合并以避免重复,从而可以去除冗余的CSS代码,达到压缩CSS文件的效果。
上述步骤也可以循环执行,直至获得最小的CSS压缩文件。
本申请实施例通过对CSS文件中的合并参量在满足合并条件下进行合并,从而在保证安全压缩的基础上,提高了压缩比,更有效的缩短了CSS文件的长度,节省了其占用的带宽,更利于网络传输。
参照图2,示出了本申请的另一种数据压缩方法实施例的步骤流程图,具体可以包括如下步骤:
步骤201,确定CSS文件中的合并参量为相同的选择器。
例如,CSS文件中包含.a{margin:0}.a{padding:0},则合并参量为相同的选择器a。再如CSS文件中包含.a{margin:0}.b{padding:1px}.a{padding:0},合并参量也为相同的选择器a。
步骤202,判断该相同的选择器是否满足合并条件。
如图3所示,该判断相同的选择器是否满足合并条件的过程可以包括:
步骤301,判断第一选择器与第二选择器是否紧邻。
其中,第一选择器与第二选择器是在CSS文件中先后排列的相同的选择器,其中,“第一”、“第二”仅为区分前后两具有相同样式的选择器,并非特指或限定。例如上例中依次出现的选择器a。在.a{margin:0}.a{padding:0}中,两相同的选择器a紧邻,中间没有插入其他选择器。在.a{margin:0}.b{padding:1px}.a{padding:0}中,相同的选择器a不紧邻,其中插入了中间选择器b,此处将位于两相同选择器之间的选择器,也即位于上述第一选择器和第二选择器之间的选择器,记为中间选择器。
当第一选择器与第二选择器紧邻时,满足合并条件;若不紧邻,则执行步骤302。
也即上述.a{margin:0}.a{padding:0}满足合并条件,而对于.a{margin:0}.b{padding:1px}.a{padding:0}则继续执行步骤302。
步骤302,判断中间选择器与第二选择器和第三选择器中是否包含相同的样式名。
若中间选择器中包含的样式名与第一选择器和第二选择器中包含的样式名均不同,则第一选择器与第二选择器的合并不会影响到中间选择器的样式,此时满足合并条件;若中间选择器与第一选择器包含相同的样式名,但是与第二选择器不包含相同的样式名,则说明将第二选择器合并至第一选择器时不会影响到中间选择器的样式,若中间选择器与第二选择器包含相同的样式名,而与第一选择器不包含相同的样式名,则说明将第一选择器合并至第二选择器时也不会影响到中间选择器的样式,这两种情况下也显然是满足合并条件的。
例如.a{margin:0}.b{padding:1px}.a{padding:0},第二选择器a和中间选择器b中均包含样式名padding,但是中间选择器b中不包含第一选择器a的样式名margin,则第一选择器可以合并至第二选择器中,满足合并条件。
若中间选择器与第一选择器和第二选择器中均包含相同的样式名,则继续执行步骤303。
步骤303,判断中间选择器与第一选择器或第二选择器所包含的相同的样式名的值是否相同。
若中间选择器与第一选择器或第二选择器所包含的相同样式名的值是相同的,则第一选择器与第二选择器的合并同样不会影响到中间选择器,例如.a{margin:0;padding;1}.b{padding:0}.a{padding:0}由于选择器b和第二选择器的样式名padding的值相等,合并前后最终展现的样式结果一致,因此满足合并条件;若中间选择器与第一选择器及第二选择器所包含的相同样式名的值均不同,则进一步执行步骤304。
对于.a{margin:0;padding:1}.b{padding:1px}.a{padding:0},第一选择器、第二选择器和中间选择器中均包含样式名padding,但样式名的值分别为1,1px,0,显然不同,此时进一步执行步骤304。
步骤304,判断中间选择器与第一选择器或第二选择器相比,所包含的相同样式名的值是否具有不同的优先级。
若中间选择器与第一选择器和第二选择器所包含的相同样式名的值是不同的,则只要中间选择器中与第一选择器和第二选择器中的任一个相比,相同样式名的值具有不同的优先级,则第一选择器与第二选择器的合并都不会影响到中间选择器,此时满足合并条件;若三个选择器中相同样式名的值均没有优先级或优先级相同,则不满足合并条件,也就不能合并。
对于.a{margin:0;padding:1}.b{padding:1px}.a{padding:0},三个选择器中相同样式名padding的值均不同,且优先级相同,合并后会改变原CSS文件表现的样式,因此不满足合并条件,第一选择器与第二选择器不能合并。
而对于.a{margin:0;padding:1}.b{padding:1px!important}.a{padding:0},或.a{margin:0;padding:1}.b{padding:1px}.a{padding:0!important},或.a{margin:0;padding:1!important}.b{padding:1px}.a{padding:0},由于中间选择器b中padding的值的优先级要么第一选择器a的不同,要么与第二选择器a的不同,因此第一选择器和第二选择器均可以合并,此时满足合并条件。
在经过上述判断步骤后,若满足合并条件,则执行步骤203,若不满足,则不执行合并操作。
步骤203,将相同的选择器进行合并,获得CSS压缩文件。
该将相同的选择器进行合并的过程即将相同选择器中的样式合并至一个选择器中。
其中,若上述步骤302中,中间选择器与第一选择器包含相同的样式名,但是与第二选择器不包含相同的样式名,则将第二选择器中的样式向前合并至第一选择器,若中间选择器与第二选择器包含相同的样式名,而与第一选择器不包含相同的样式名,则将第一选择器中的样式向后合并至第二选择器。对于上述步骤304中,若中间选择器与第一选择器或第二选择器相比,所包含的相同样式名的值具有不同的优先级,则,既可以将第一选择器中的样式向后合并至第二选择器中也可以将第二选择器中的样式向前合并至第一选择器中。
合并之后即可获得CSS压缩文件,显然CSS压缩文件的长度要小于合并前的CSS文件。
本实施例通过对相同的选择器进行合并,有效的缩短了CSS文件的长度,节省了其占用的带宽,更利于网络传输。
在另一实施例中,若相同的选择器进行合并后,在同一选择器中包含有相同的样式或相同的样式名,则可以继续以该相同的样式或样式名作为合并参量,循环执行步骤101~103或后续实施例中的步骤401~403对CSS文件进行压缩。
参照图4,示出了本申请的另一种数据压缩方法实施例的步骤流程图,具体可以包括如下步骤:
步骤401,确定CSS文件中的合并参量为同一选择器中相同的样式名。
在经过其它合并操作,例如合并相同的选择器之后,或者由于误写等情况,可能会在CSS文件中在同一个选择器包含有相同的样式名,此时可确定该CSS文件中的合并参量为该相同的样式名。该相同样式名的值可能相同也可能不同。
例如:a{margin:0;margin:1px},选择器a中包含相同的样式名margin。
步骤402,判断同一选择器中相同样式名是否满足合并条件。
如图5所示,该判断同一选择器中相同样式名是否满足合并条件的过程可以包括:
步骤501,判断同一选择器中相同的样式名的值是否相同。
若相同,则实际为重复样式,满足合并条件。若不同,则执行步骤502。
步骤502,判断同一选择器中相同的样式名之间是否存在覆盖与被覆盖关系。
CSS文件中可能出现缩写的样式名,例如样式名background是一种缩写,其实际的样式名包括了background-color、background-image、background-repeat等等。
本实施例中,若CSS文件中同时包含缩写和非缩写的样式名,例如:.a{background-color:#FFF;background:#000url(xxx.jpg)},此时认为background-color与background两样式名相同,只是存在覆盖与被覆盖的关系,即样式名background覆盖样式名background-color。
若相同的样式名之间不存在覆盖与被覆盖关系,则满足合并条件,可以直接合并,若存在覆盖与被覆盖关系,则执行步骤503~504。
步骤503,当相同样式名中后者覆盖前者时,判断前者的样式名的值是否具有更高的优先级。
对于相同样式名中后者覆盖前者的情况,例如:
.a{background-color:#FFF;background:#000url(xxx.jpg)}
可以进一步判断前者的样式名的值是否具有更高的优先级,若否,则满足合并条件。若是,则前者的样式名的值不能被覆盖,也就不满足合并条件。例如:.a{background-color:#FFF!important;background:#000url(xxx.jpg)}。
步骤504,当相同样式名中前者覆盖后者时,判断前者的样式名的值是否具有更高的优先级。
对于相同样式名中前者覆盖后者的情况,例如:
.a{background:#000url(xxx.jpg);background-color:#FFF}
可以进一步判断前者的样式名的值是否具有更高的优先级,若是,则满足合并条件。若否,则前者的样式名的值不能被覆盖,也就不满足合并条件。
在经过上述判断步骤后,若满足合并条件,则执行步骤403进行合并,若不满足,则不执行合并操作。
步骤403,若相同样式名的值之间具有相同的优先级,则由后者覆盖前者,获得CSS压缩文件;若相同的样式名的值之间具有不同的优先级,则由优先级高者覆盖优先级低者,获得CSS压缩文件。
对于同一选择器中相同的样式(样式名及其值均相同),均满足合并条件,无论是否有优先级,可直接保留一个删除其它相同样式。
对于同一选择器中相同的样式名,当不存在覆盖于被覆盖的关系时也即不存在缩写的样式名时,均满足合并条件,如果相同样式名的值之间的优先级相同,则可以直接由后者覆盖前者,例如a{margin:0;margin:1px},可以直接合并为.a{margin:1px}。如果相同样式名的值之间具有不同的优先级,可以由优先级高者覆盖优先级低者,例如.a{margin:0!important;margin:1px},合并之后为.a{margin:0!important},或者.a{margin:0;margin:1px!important},合并之后为.a{margin:1px!important}。
对于同一选择器中相同的样式名,当存在覆盖于被覆盖的关系时,若相同样式名中后者覆盖前者,且前者与后者相比样式名的值具有相同的优先级或后者具有较高的优先级,则满足合并条件,此时由后者覆盖前者进行合并,例如:.a{background-color:#FFF;background:#000url(xxx.jpg)}合并为.a{background:#000url(xxx.jpg)}。
对于同一选择器中相同的样式名,当存在覆盖于被覆盖的关系时,若相同样式名中前者覆盖后者,且前者与后者相比样式名的值具有更高的优先级,则满足合并条件,此时由优先级高的前者覆盖优先级低的后者进行合并,例如:.a{background:#000url(xxx.jpg)!important;background-color:#FFF}合并为.a{background:#000url(xxx.jpg)!important}。
本实施例通过对同一选择器中相同的样式名进行合并,有效的缩短了CSS文件的长度,节省了其占用的带宽,更利于网络传输。
在另一实施例中,若同一选择器内的相同样式名进行合并后,不同选择器之间还包含有相同的样式,则可以继续以该相同的样式作为合并参量,循环执行步骤101~103或后续实施例中的步骤601~604对CSS文件进行压缩。
参照图6,示出了本申请的另一种数据压缩方法实施例的步骤流程图,具体可以包括如下步骤:
步骤601,确定CSS文件中的合并参量为不同选择器中的相同样式。
其中,相同的样式指样式名及样式名的值均相同,本实施例中所指的相同样式是指不同选择器中的相同样式,对于同一选择器的相同样式可以按照前述步骤401~403执行。
例如,CSS文件.a{margin:0;color:#000}.b{margin:0;color:#000}中,选择器a、b包含相同的样式margin:0及color:#000。
再例如,在另一CSS文件.a{margin:0;padding:0}.b{margin:0;padding:1}中,选择器a、b包含相同的样式margin:0。
选择器中所包含的相同样式可能是某一个或某几个选择器中全部的或部分的样式,此处不做限定。
步骤602,判断各选择器中的相同样式是否满足合并条件。
如图7所示,该判断各选择器中的相同样式是否满足合并条件的过程可以包括:
步骤701,判断第三选择器与第四选择器是否紧邻。
其中,第三选择器与第四选择器是在CSS文件中先后排列的选择器,第三选择器和第四选择器中具有相同的样式。“第三”、“第四”仅为区分前后两具有相同样式的选择器,并非特指或限定。
例如:.a{margin:0;padding:0}.b{margin:0;padding:1}中选择器a、b具有相同的样式margin:0,且选择器a、b紧邻,中间没有插入其他的选择器。再例如:.a{margin:0;padding:0}.b{margin:1;padding:1}c{margin:0}中,选择器a、c具有相同的样式margin:0,但是选择器a、c不紧邻,其中插入了间隔选择器b,此处将位于具有相同样式的两选择器之间的选择器,也即位于上述第三选择器和第四选择器之间的选择器记为间隔选择器。
当上述第三选择器和第四选择器紧邻时满足合并条件,可以进行合并;当不紧邻时,则执行步骤702。
也即上述.a{margin:0;padding:0}.b{margin:0;padding:1}中选择器a、b之间的相同样式margin:0满足合并条件,可以合并,但是,.a{margin:0;padding:0}.b{margin:1;padding:1}c{margin:0}中选择器a、c之间虽具有相同样式margin:0,但a、c不紧邻,需要进一步执行步骤702。
步骤702,判断间隔选择器中是否包含第三选择器和第四选择器中的相同样式的样式名。
若间隔选择器中不包含第三选择器和第四选择器中的相同样式的样式名,例如.a{margin:0;padding:0}.b{padding:1}.c{margin:0}中,第三选择器a和第四选择器c中包含相同的样式margin:0,而间隔选择器b中不包含样式名margin,此时满足合并条件。
若间隔选择器中包含了第三选择器和第四选择器中的相同样式的样式名,例如.a{margin:0;padding:0}.b{margin:1;padding:1}c{margin:0},间隔选择器中包含了样式名margin,则继续执行步骤703。
步骤703,判断间隔选择器与第三选择器或第四选择器相比,所包含的相同的样式名的值是否具有不同的优先级。
只要间隔选择器中与第三选择器和第四选择器中的任一个相比,相同样式名的值具有不同的优先级,则第三选择器与第四选择器的合并都不会影响到间隔选择器,此时满足合并条件;若三个选择器中相同样式名的值均没有优先级或优先级相同,则不满足合并条件,也就不能合并。本步骤中的相同的样式名是指第三选择器与第四选择器中的相同样式的样式名。
例如:.a{margin:0;padding:0}.b{margin:1;padding:1}c{margin:0}中,间隔选择器b包含的margin:1与选择器a、c中的相同样式margin:0具有相同的优先级,此时不能对选择器a、c中的相同样式margin:0进行合并,否则表现样式会与原CSS文件的表现样式不一致。
若间隔选择器b包含的margin:1具有较高优先级,例如a{margin:0;padding:0}.b{margin:1!important;padding:1}c{margin:0},则此时选择器a、c中的相同样式margin:0满足合并条件,可以进行合并。
若第三选择器a中的样式margin:0具有较高的优先级,如.a{margin:0!important;padding:0}.b{margin:1;padding:1}c{margin:0},此时选择器a、c中的相同样式margin:0满足合并条件,可以进行合并。
若第四选择器c中的样式margin:0具有较高的优先级,如.a{margin:0;padding:0}.b{margin:1;padding:1}c{margin:0!important},此时选择器a、c中的相同样式margin:0满足合并条件,可以进行合并。
在经过上述判断步骤后,若不满足合并条件,则不执行合并操作;若满足合并条件,则可以直接执行步骤604进行合并,也可以再执行步骤604之前,首先执行步骤603判断是否进行合并。
步骤603,预测将CSS文件中的合并参量进行合并后获得的CSS文件的长度是否小于合并前的CSS文件的长度。
在某些情况下由于选择器的名称比较长等原因,有可能存在合并之后获得的CSS压缩文件的长度反而比压缩前的还长。
例如:.aaaaaaaaa{margin:0;padding:0}.bbbbbbbbbb{margin:0;padding:1}
合并相同的样式margin:0后为:
.aaaaaaaaa,.bbbbbbbbbb{margin:0}.aaaaaaaaa{padding:0}.bbbbbbbbbb{padding:1},该压缩后的CSS文件比压缩前还长。为了防止这种情况的发生,可以在合并之前执行本步骤操作。
具体的,其中一种预测方式可以是:
通过比较包含相同样式的选择器的名称长度与相同样式的长度,确定将CSS文件中的合并参量进行合并后获得的CSS文件的长度是否小于合并前的CSS文件的长度,其中,包含相同样式的选择器中还包含不同样式。
以两选择器包含相同样式为例,若两选择器中除了包含相同样式外,还均包含其它不同样式,例如:
.aa……a{margin:0;padding:0}.bb……b{margin:0;padding:1}
则需要判断两选择器aa……a和bb……b的名称长度之和是否大于相同样式margin:0的长度,若是,则不能合并,若否,则可以合并。
若两选择器中只有一个选择器除了包含相同样式外,还包含其它不同样式,例如:
.aa……a{margin:0;padding:0}.bb……b{margin:0}
则需要判断该包含其它样式的选择器aa……a的名称长度是否大于相同样式margin:0的长度,若是,则不能合并,若否,则可以合并。
如果相同样式的选择器中所包含的样式完全相同,也即包含相同样式的选择器中不再包含其它不同样式,例如:
.a.…..a{margin:0;color:#000}.b……b{margin:0;color:#000}
则无论选择器的名称长度如何,合并后的CSS压缩文件的长度必然小于原CSS文件,因此可以直接执行步骤604进行合并。
在预测合并后获得的CSS文件的长度小于合并前的CSS文件的长度后,即可执行步骤604。
步骤604,将CSS文件中的合并参量进行合并,获得CSS压缩文件。
该合并过程具体可以如图8所示,可以包括以下步骤:
步骤801,提取CSS文件中各选择器的相同样式作为公因子。
例如:.a{margin:0;padding:0}.b{margin:0;padding:1},可以提取公因子margin:0。
步骤802,将包含相同样式的选择器作为公因子的共同选择器,将各选择器的相同样式放在共同选择器中,获得CSS压缩文件。
上例中可以获得共同选择器为a,b,将相同样式也即公因子放在共同选择器后,合并结果为.a,.b{margin:0}.a{padding:0}.b{padding:1}。
然而,在CSS文件中极有可能存在多个选择器之间分别具有多组相同的样式,例如:
.a{margin:0;padding:0;color:#FFF}.b{margin:0;padding:1;color:#FFF}.c{margin:0;padding:1;color:#000}
为了尽可能的获得最小的CSS压缩文件,还可以进一步包括以下步骤:
步骤803,比较所获得的所有CSS压缩文件的长度。
其中,在CSS文件中提取不同的公因子会对应获得不同的CSS压缩文件。上例中,所提取的公因子可以是margin:0、padding:1、color:#FFF中的任一个或任意组合,这样给予提取公因子的不同就会获得不同的CSS压缩文件。
步骤804,选择长度最短的CSS压缩文件作为最终的CSS压缩文件。
理想情况下应该遍历所有提取公因子的可能性,比较所有可能的CSS压缩文件的长度,选择最短的CSS压缩文件作为最终的CSS压缩文件。
然而,当CSS文件较为复杂时,例如有n条选择器,m种样式,最坏情况下可能性有n!m!个,计算结果的复杂度现实根本无法接受,基于此,本步骤在按照步骤801-802进行合并时,可以采用最大图形化选择算法进行合并,具体的,提取CSS文件中各选择器的相同样式作为公因子的过程可以如图9所示,包括:
步骤901,对各选择器中的样式进行排序。
可以对各选择器中的样式按照字母顺序进行排序。
假设有n个选择器,m种样式名,为了便于查找相同的样式,可以将排序后的选择器和样式名构成一个二维数组表格,纵列为n,横行为m。以.a{margin:0;padding:0;color:#FFF}.b{margin:0;padding:1;color:#FFF}.c{margin:0;padding:1;color:#000}为例:
|
M1 |
M2 |
M3 |
… |
N1 |
Margin:0 |
Padding:0 |
Color:#FFF |
|
N2 |
Margin:0 |
Padding:1 |
Color:#FFF |
|
N3 |
Margin:0 |
Padding:1 |
Color:#000 |
|
步骤902,按照具有相同样式的选择器的数量,由大到小依次提取各选择器的相同样式作为公因子。
最大图形化选择实际为按照具有相同样式的选择器的数量,由大到小依次提取各选择器的相同样式作为公因子。即首先选择可以被合并数目最多的相同样式,当数目最多时表格中被选择的格数也最多,图形面积也最大。
上例中M1列的3个样式相同,且满足合并条件,合并的图形面积为3;M2列的N2和N3可以安全合并,面积为2;M3的N1和N2可以安全合并,面积为2。最大图形选择首先选择公因子对应的选择器为3个的,其次选择两个为2的进行合并。如果面积相同则随便选择一个。当格子被合并后,下次计算面积时也即提取公因子时将被排除在外。
在按照具有相同样式的选择器的数量,由大到小依次提取各选择器的相同样式作为公因子后,即可将包含相同样式的选择器作为公因子的共同选择器,将各选择器的相同样式放在共同选择器中,获得CSS压缩文件。上例的CSS压缩文件为:
.a,.b,.c{margin:0}.a,.b{color:#FFF}.a{padding:0}.b,.c{padding:1}.c{color:#000}
CSS压缩文件的长度相较于原CSS文件减少了21个字符。
该步骤604中只提取满足合并条件的公因子,可以预先在步骤602中一次性判断哪些相同样式满足合并条件可以提取公因子,也可以在执行步骤604时,每提取一个公因子时即判断一下该相同样式是否满足合并条件,若满足再提取。
本实施例通过对各选择器中相同的样式进行合并,有效的缩短了CSS文件的长度,节省了其占用的带宽,更利于网络传输。
在另一实施例中,如果所确定的CSS文件中的合并参量为两个或三个,例如合并参量为相同选择器和不同选择器的相同样式,则依次按照前述实施例的步骤首先合并相同选择器再合并不同选择器的相同样式,直至获得最终的CSS压缩文件;若合并参量为同一选择器中的相同样式名和不同选择器的相同样式,则依次按照前述实施例的步骤首先合并同一选择器中的相同样式名再合并不同选择器的相同样式,直至获得最终的CSS压缩文件。若合并参量为三个,分别为相同选择器、同一选择器中的相同样式名和不同选择器的相同样式,则依次按照前述实施例的步骤首先合并相同选择器,再合并不同选择器的相同样式,最后合并不同选择器的相同样式,直至获得最终的CSS压缩文件。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
参照图10,示出了本申请一种数据压缩装置实施例的结构框图,具体可以包括如下模块:
参量确定单元1001,被配置为确定级联样式表CSS文件中的合并参量,所述合并参量至少包括相同的选择器、同一选择器中相同的样式名、不同选择器中的相同样式中的一种;
判断单元1002,被配置为判断所述合并参量是否满足合并条件;
合并单元1003,被配置为当所述判断单元判断所述合并参量满足合并条件时,将所述CSS文件中的合并参量进行合并,获得CSS压缩文件。
本申请实施例通过上述单元对CSS文件中的合并参量在满足合并条件下进行合并,从而在保证安全压缩的基础上,提高了压缩比,更有效的缩短了CSS文件的长度,节省了其占用的带宽,更利于网络传输。
在另一实施例中,当参量确定单元1001确定出的合并参量为相同的选择器时,判断单元1002可以进一步包括:
第一判断子单元,被配置为判断第一选择器与第二选择器是否紧邻;其中,所述第一选择器与所述第二选择器是在所述CSS文件中先后排列的相同的选择器;若是,则满足合并条件;
第二判断子单元,被配置为当第一选择器与第二选择器不紧邻时,判断中间选择器与所述第二选择器和所述第三选择器中是否包含相同的样式名;其中,所述中间选择器是位于所述第一选择器与所述第二选择器之间的选择器;若否,则满足合并条件;
第三判断子单元,被配置为当第二判断子单元判断第二选择器与中间选择器中包含相同的样式名时,判断所述中间选择器与所述第一选择器或所述第二选择器所包含的相同的样式名的值是否相同;若是,则满足合并条件;
第四判断子单元,被配置为当第三判断子单元判断所述中间选择器与所述第二选择器所包含的相同的样式名的值不相同时,判断所述中间选择器与所述第一选择器或所述第二选择器相比,所包含的相同样式名的值是否具有不同的优先级;若是,则满足合并条件。
此时,合并单元1003具体被配置为当所述合并参量满足合并条件时,将所述相同选择器中的样式合并至同一选择器中。
本实施例通过上述单元对相同的选择器进行合并,有效的缩短了CSS文件的长度,节省了其占用的带宽,更利于网络传输。
在另一实施例中,当参量确定单元1001确定出的合并参量为同一选择器中相同的样式名时,判断单元1002进一步包括:
第五判断子单元,被配置为判断所述同一选择器中相同的样式名的值是否相同;若是,则满足合并条件;
第六判断子单元,被配置为当第五判断子单元判断同一选择器中相同的样式名的值不同时,判断所述同一选择器中相同的样式名之间是否存在覆盖与被覆盖关系;若否,则满足合并条件;
第七判断子单元,被配置为当第六判断子单元判断同一选择器中相同的样式名之间存在覆盖与被覆盖关系时,当所述相同样式名中后者覆盖前者时,判断所述前者的样式名的值是否具有更高的优先级,若否,则满足合并条件;当所述相同样式名中前者覆盖后者时,判断所述前者的样式名的值是否具有更高的优先级,若是,则满足合并条件。
此时,合并单元1003具体被配置为当所述合并参量满足合并条件时,若所述相同样式名的值之间具有相同的优先级,则由后者覆盖前者,获得CSS压缩文件;若所述相同的样式名的值之间具有不同的优先级,则由优先级高者覆盖优先级低者,获得CSS压缩文件。
本实施例通过上述单元对同一选择器中相同的样式名进行合并,有效的缩短了CSS文件的长度,节省了其占用的带宽,更利于网络传输。
在另一实施例中,当参量确定单元1003确定出合并参量为不同选择器中的相同样式时,该装置还包括:
预测单元,被配置为在合并单元将所述CSS文件中的合并参量进行合并,获得CSS压缩文件之前,预测将所述CSS文件中的合并参量进行合并后获得的CSS文件的长度是否小于合并前的CSS文件的长度;
合并单元1003,具体在预测单元预测合并后获得的CSS文件的长度小于合并前的CSS文件的长度时,再将所述CSS文件中的合并参量进行合并,获得CSS压缩文件。
该预测单元,具体被配置为通过比较包含所述相同样式的选择器的名称长度与所述相同样式的长度,确定将所述CSS文件中的合并参量进行合并后获得的CSS文件的长度是否小于合并前的CSS文件的长度,其中,所述包含所述相同样式的选择器中还包含不同样式。
此时,合并单元1003可进一步包括:
提取子单元,被配置为提取所述CSS文件中各选择器的相同样式作为公因子;
合并子单元,被配置为将包含所述相同样式的选择器作为所述公因子的共同选择器进行合并,获得CSS压缩文件。
另一实例中,合并单元1003还可以进一步包括:
比较子单元,被配置为比较所获得的所有CSS压缩文件的长度;其中,在所述CSS文件中提取不同的公因子对应获得不同的CSS压缩文件;
选择子单元,被配置为选择长度最短的CSS压缩文件作为最终的CSS压缩文件。
另一实例中,提取子单元还可以进一步包括:
排序子单元,被配置为对所述各选择器中的样式进行排序;
提取子单元,被配置为按照具有相同样式的选择器的数量,由大到小依次提取所述各选择器的相同样式作为公因子。
在另一实例中,判断单元1002可以包括:
第八判断子单元,被配置为判断第三选择器与第四选择器是否紧邻,其中所述第三选择器与所述第四选择器是在所述CSS文件中先后排列的具有相同样式的选择器;若是,则满足合并条件;
第九判断子单元,被配置为当第八判断子单元判断第三选择器与第四选择器不紧邻时,判断间隔选择器中是否包含所述第三选择器和所述第四选择器的所述相同样式的样式名,所述间隔选择器是位于所述第三选择器与所述第四选择器之间的选择器;若否,则满足合并条件;
第十判断子单元,被配置为当第九判断子单元判断第四选择器与间隔选择器中包含相同的样式名时,判断所述间隔选择器与所述第三选择器或所述第四选择器相比,所包含的所述相同样式的样式名的值是否具有不同的优先级;若是,则满足合并条件。
本实施例通过上述单元对各选择器中相同的样式进行合并,有效的缩短了CSS文件的长度,节省了其占用的带宽,更利于网络传输。
本申请还公开了一种电子设备,包括数据总线,存储器和处理器,其中,存储器中存储有一段运行程序代码,处理器通过数据总线获取存储器中的程序代码,并执行以下步骤:
确定级联样式表CSS文件中的合并参量,所述合并参量至少包括相同的选择器、同一选择器中相同的样式名、不同选择器中的相同样式中的一种;
判断所述合并参量是否满足合并条件;
当所述合并参量满足合并条件时,将所述CSS文件中的合并参量进行合并,获得CSS压缩文件。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
在一个典型的配置中,所述计算机设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非持续性的电脑可读媒体(transitorymedia),如调制的数据信号和载波。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种数据压缩方法和一种数据压缩装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。