一種數(shù)據(jù)壓縮方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本申請涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)壓縮方法和一種數(shù)據(jù)壓縮裝 置。
【背景技術(shù)】
[0002] 級聯(lián)樣式表(Cascading St^e Sheets, CS巧用來表現(xiàn)HTML (標(biāo)準(zhǔn)通用標(biāo)記語言 的一個應(yīng)用)或XML (標(biāo)準(zhǔn)通用標(biāo)記語言的一個子集)等文件樣式。CSS文件在網(wǎng)絡(luò)瀏覽器 中W表現(xiàn)樣式而存在,它定義了網(wǎng)頁展現(xiàn)的規(guī)則,是一種文本格式。CSS能夠真正做到網(wǎng)頁 表現(xiàn)與內(nèi)容分離,相對于傳統(tǒng)HTML的表現(xiàn)而言,它能夠?qū)W(wǎng)頁中對象的位置排版進(jìn)行像素 級的精確控制,支持幾乎所有的字體字號樣式,擁有對網(wǎng)頁對象和模型樣式編輯的能力,并 能夠進(jìn)行初步交互設(shè)計,是目前基于文本展示最優(yōu)秀的表現(xiàn)設(shè)計語言。基于上述優(yōu)勢,CSS 得到了廣泛應(yīng)用。
[0003] 為了使CSS文件擁有更小的體積W在網(wǎng)絡(luò)傳輸時更加快速,通常會對CSS文件進(jìn) 行壓縮。目前,可W采用YUICompress、clean-css等壓縮方法進(jìn)行壓縮,送些壓縮方法通過 去除CSS文件中的空白、注釋字符、無效字符等來縮短其長度。然而,送些壓縮方法無法去 除CSS文件中大量的兀余代碼,對CSS文件的壓縮非常有限,仍然會存在白白浪費帶寬,影 響網(wǎng)絡(luò)傳輸速度的問題。
【發(fā)明內(nèi)容】
[0004] 本申請實施例所要解決的技術(shù)問題是提供一種數(shù)據(jù)壓縮方法,能夠更有效的縮短 CSS文件的長度,節(jié)省其占用的帶寬。
[0005] 相應(yīng)的,本申請實施例還提供了一種數(shù)據(jù)壓縮裝置,用W保證上述方法的實現(xiàn)及 應(yīng)用。
[0006] 為了解決上述問題,本申請公開了一種數(shù)據(jù)壓縮方法,包括:
[0007] 確定級聯(lián)樣式表CSS文件中的合并參量,所述合并參量至少包括相同的選擇器、 同一選擇器中相同的樣式名、不同選擇器中的相同樣式中的一種;
[0008] 判斷所述合并參量是否滿足合并條件;
[0009] 當(dāng)所述合并參量滿足合并條件時,將所述CSS文件中的合并參量進(jìn)行合并,獲得 CSS壓縮文件。
[0010] 進(jìn)一步,當(dāng)所述合并參量為相同的選擇器時,所述判斷所述合并參量是否滿足合 并條件,包括:
[0011] 判斷第一選擇器與第二選擇器是否緊鄰;其中,所述第一選擇器與所述第二選擇 器是在所述CSS文件中先后排列的相同的選擇器;
[0012] 若是,則滿足合并條件;若否,則判斷中間選擇器與所述第二選擇器和所述第H選 擇器中是否包含相同的樣式名;其中,所述中間選擇器是位于所述第一選擇器與所述第二 選擇器之間的選擇器;
[0013] 若否,則滿足合并條件;若是,則判斷所述中間選擇器與所述第一選擇器或所述第 二選擇器所包含的相同的樣式名的值是否相同;
[0014] 若是,則滿足合并條件;若否,則判斷所述中間選擇器與所述第一選擇器或所述第 二選擇器相比,所包含的相同樣式名的值是否具有不同的優(yōu)先級;
[0015] 若是,則滿足合并條件。
[0016] 進(jìn)一步,所述當(dāng)所述合并參量滿足合并條件時,將所述CSS文件中的合并參量進(jìn) 行合并,獲得CSS壓縮文件,包括:
[0017] 當(dāng)所述合并參量滿足合并條件時,將所述相同選擇器中的樣式合并至同一選擇器 中。
[0018] 進(jìn)一步,當(dāng)所述合并參量為同一選擇器中相同的樣式名時,所述判斷所述合并參 量是否滿足合并條件,包括:
[0019] 判斷所述同一選擇器中相同的樣式名的值是否相同;
[0020] 若是,則滿足合并條件;若否,則判斷所述同一選擇器中相同的樣式名之間是否存 在覆蓋與被覆蓋關(guān)系;
[0021] 若否,則滿足合并條件;若是,則當(dāng)所述相同樣式名中后者覆蓋前者時,判斷所述 前者的樣式名的值是否具有更高的優(yōu)先級,若否,則滿足合并條件;當(dāng)所述相同樣式名中 前者覆蓋后者時,判斷所述前者的樣式名的值是否具有更高的優(yōu)先級,若是,則滿足合并條 件。
[0022] 進(jìn)一步,所述當(dāng)所述合并參量滿足合并條件時,將所述CSS文件中的合并參量進(jìn) 行合并,獲得CSS壓縮文件,包括:
[0023] 當(dāng)所述合并參量滿足合并條件時,若所述相同樣式名的值之間具有相同的優(yōu)先 級,則由后者覆蓋前者,獲得CSS壓縮文件;若所述相同的樣式名的值之間具有不同的優(yōu)先 級,則由優(yōu)先級高者覆蓋優(yōu)先級低者,獲得CSS壓縮文件。
[0024] 進(jìn)一步,當(dāng)所述合并參量為不同選擇器中的相同樣式時,在所述將所述CSS文件 中的合并參量進(jìn)行合并,獲得CSS壓縮文件之前,還包括:
[0025] 預(yù)測將所述CSS文件中的合并參量進(jìn)行合并后獲得的CSS文件的長度是否小于合 并前的CSS文件的長度;
[0026] 若是,再將所述CSS文件中的合并參量進(jìn)行合并,獲得CSS壓縮文件。
[0027] 進(jìn)一步,所述預(yù)測將所述CSS文件中的合并參量進(jìn)行合并后獲得的CSS文件的長 度是否小于合并前的CSS文件的長度,包括:
[002引通過比較包含所述相同樣式的選擇器的名稱長度與所述相同樣式的長度,確定將 所述CSS文件中的合并參量進(jìn)行合并后獲得的CSS文件的長度是否小于合并前的CSS文件 的長度,其中,所述包含所述相同樣式的選擇器中還包含不同樣式。
[0029] 進(jìn)一步,所述將所述CSS文件中的合并參量進(jìn)行合并,獲得CSS壓縮文件,包括:
[0030] 提取所述CSS文件中各選擇器的相同樣式作為公因子;
[0031] 將包含所述相同樣式的選擇器作為所述公因子的共同選擇器進(jìn)行合并,獲得CSS 壓縮文件。
[0032] 進(jìn)一步,所述將所述CSS文件中的合并參量進(jìn)行合并,獲得CSS壓縮文件,還包 括:
[0033] 比較所獲得的所有CSS壓縮文件的長度;其中,在所述CSS文件中提取不同的公因 子對應(yīng)獲得不同的CSS壓縮文件;
[0034] 選擇長度最短的CSS壓縮文件作為最終的CSS壓縮文件。
[0035] 進(jìn)一步,所述提取所述CSS文件中各選擇器的相同樣式作為公因子,包括:
[0036] 對所述各選擇器中的樣式進(jìn)行排序;
[0037] 按照具有相同樣式的選擇器的數(shù)量,由大到小依次提取所述各選擇器的相同樣式 作為公因子。
[0038] 進(jìn)一步,所述判斷所述合并參量是否滿足合并條件,包括:
[0039] 判斷第H選擇器與第四選擇器是否緊鄰,其中所述第H選擇器與所述第四選擇器 是在所述CSS文件中先后排列的具有相同樣式的選擇器;
[0040] 若是,則滿足合并條件;若否,則判斷間隔選擇器中是否包含所述第H選擇器和所 述第四選擇器的所述相同樣式的樣式名,所述間隔選擇器是位于所述第H選擇器與所述第 四選擇器之間的選擇器;
[0041] 若否,則滿足合并條件;若是,則判斷所述間隔選擇器與所述第H選擇器或所述第 四選擇器相比,所包含的所述相同樣式的樣式名的值是否具有不同的優(yōu)先級;
[0042] 若是,則滿足合并條件。
[0043] 本申請還公開了一種數(shù)據(jù)壓縮裝置,包括:
[0044] 參量確定單元,被配置為確定級聯(lián)樣式表CSS文件中的合并參量,所述合并參量 至少包括相同的選擇器、同一選擇器中相同的樣式名、不同選擇器中的相同樣式中的一 種;
[0045] 判斷單元,被配置為判斷所述合并參量是否滿足合并條件;
[0046] 合并單元,被配置為當(dāng)所述判斷單元判斷所述合并參量滿足合并條件時,將所述 CSS文件中的合并參量進(jìn)行合并,獲得CSS壓縮文件。
[0047] 與現(xiàn)有技術(shù)相比,本申請實施例包括W下優(yōu)點:
[0048] 本申請實施例通過對CSS文件中的合并參量在滿足合并條件下進(jìn)行合并,從而在 保證安全壓縮的基礎(chǔ)上,提高了壓縮比,更有效的縮短了 CSS文件的長度,節(jié)省了其占用的 帶寬,更利于網(wǎng)絡(luò)傳輸。
【附圖說明】
[0049] 圖1是本申請的一種數(shù)據(jù)壓縮方法實施例的步驟流程圖;
[0050] 圖2是本申請的另一種數(shù)據(jù)壓縮方法實施例的步驟流程圖;
[0051] 圖3是本申請圖2所示實施例中判斷相同的選擇器是否滿足合并條件的步驟流程 圖;
[0052] 圖4是本申請的另一種數(shù)據(jù)壓縮方法實施例的步驟流程圖;
[0053] 圖5是本申請圖4所示實施例中判斷同一選擇器中相同樣式名是否滿足合并條件 的步驟流程圖;
[0054] 圖6是本申請的另一種數(shù)據(jù)壓縮方法實施例的步驟流程圖;
[0055] 圖7是本申請圖4所示實施例中判斷各選擇器中的相同樣式是否滿足合并條件的 步驟流程圖;
[0056] 圖8是本申請圖4所示實施例中將CSS文件中的合并參量進(jìn)行合并,獲得CSS壓 縮文件的步驟流程圖;
[0057] 圖9是本申請圖8所示實施例中提取CSS文件中各選擇器的相同樣式作為公因子 的步驟流程圖;
[0058] 圖10是本申請一種數(shù)據(jù)壓縮裝置實施例的結(jié)構(gòu)框圖。
【具體實施方式】
[0059] 為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實 施方式對本申請作進(jìn)一步詳細(xì)的說明。
[0060] 參照圖1,示出了本申請的一種數(shù)據(jù)壓縮方法實施例的步驟流程圖,具體可W包括 如下步驟:
[0061] 步驟101,確定CSS文件中的合并參量,該合并參量至少包括相同的選擇器、同一 選擇器中相同的樣式名、不同選擇器中的相同樣式中的一種。
[0062] 首先,該CSS文件可W是原始的未經(jīng)過任何壓縮處理的CSS文件,也可W是已經(jīng)通 過現(xiàn)有壓縮方式,例如YUICompress、clean-css等壓縮處理后的CSS文件,該CSS文件中的 空白、注釋字符、無效字符等可W已經(jīng)去除。
[0063] 本步驟中需要確定出CSS文件中可W進(jìn)行合并的合并參量。該合并參量為CSS文 件中重復(fù)出現(xiàn)的內(nèi)容,具體可W是CSS文件中相同的選擇器,也可W是同一選擇器中相同 的樣式名,還可W是相同的樣式,該相同的樣式是指樣式名及樣式名的值均相同,當(dāng)然還可 W是同時具有上述合并參量中的兩種或H種,下面分別舉例說明。
[0064] 例如;.a {margin ;0}. b {padding ;0}. a {padding ;0}中包含相同的選擇器 a, 在其它實例中相同的選擇器可能有多個;.almargin ;0 ;margin ;lpx}中在同一選擇器 a中包含相同的樣式名margin,在其它實例中同一選擇器可能包含有多個相同的樣式 名;.a {margin ;0 ;padding ;0}. b {margin ;0 ;padding ;1}中包含相同的樣式 margin ;0,在 其它實例中可能存在多個選擇器包含有相同的樣式。再如almargin ;0 ;padding ;0 scolor : #FFF ;padding : 1}. b {margin :0 ;padding : 1}. a {margin :0 ;padding : I ;color :#FFF}中包 含相同的選擇器a,同一選擇器a中包含相同的樣式名padding,且選擇器a、b中包含相同 白勺曰r邑in :0 ;p曰ddin邑:1。
[0065] 當(dāng)確定出CSS文件中包含的合并參量時,執(zhí)行步驟102。
[0066] 步驟102,判斷合并參量是否滿足合并條件。
[0067] 該合并條件用于判斷對合并參量進(jìn)行合并是否安全,也即合并后獲得的CSS壓縮 文件所展現(xiàn)的樣式與合并前是否一致,如果一致則滿足合并條件,合并安全,可W執(zhí)行步驟 103,如果不一致則不滿足合并條件,合并不安全,此時放棄合并操作。其中,不同的合并參 量對應(yīng)的合并條件可能不同,具體請參見后續(xù)實施例的描述。
[0068] 步驟103,將CSS文件中的合并參量進(jìn)行合并,獲得CSS壓縮文件。
[0069] 將CSS文件