聯(lián)樣式表里的規(guī)則刪除。該冗余文件清理方法可以運行在計算機處理設備上。需要說明的是,本發(fā)明實施例所提供的冗余文件清理方法可以通過本發(fā)明實施例的冗余文件清理裝置來執(zhí)行,本發(fā)明實施例的冗余文件清理裝置也可以用于執(zhí)行本發(fā)明實施例的冗余文件清理方法。
[0093]圖3是根據(jù)本發(fā)明實施例的冗余文件清理方法的流程圖。
[0094]如圖3所示,該方法包括如下的步驟S302至步驟S308:
[0095]步驟S302,獲取級聯(lián)樣式表文件。
[0096]在本發(fā)明實施例中,可以通過客戶端獲取級聯(lián)樣式表CSS文件,例如,可以通過瀏覽器獲取級聯(lián)樣式表CSS文件。
[0097]具體地,瀏覽器可以通過執(zhí)行JS來獲取網(wǎng)頁的CSS文件,并且瀏覽器執(zhí)行不同的JS代碼可以獲取不同的網(wǎng)頁的CSS文件。級聯(lián)樣式表文件可以包括內聯(lián)的、外聯(lián)的和動態(tài)依賴的級聯(lián)樣式表文件。其中,動態(tài)依賴的級聯(lián)樣式表文件是指CSS文件引用的其它CSS文件,例如,CSS文件I在引用CSS文件2時,CSS文件2就是CSS文件I的動態(tài)依賴的級聯(lián)樣式表文件。需要說明的是,在有用戶訪問時,客戶端可以遞歸的獲取樣式文件列表,并通過樣式文件列表解析出所有的前述CSS文件。
[0098]步驟S304,判斷級聯(lián)樣式表文件是否滿足預設冗余匹配條件。
[0099]具體地,在獲取級聯(lián)樣式表CSS文件之后,可以對其進行解析,得到CSS選擇器,即CSS規(guī)則。判斷級聯(lián)樣式表文件是否滿足預設冗余匹配條件可以是CSS規(guī)則是否有用。如果CSS規(guī)則有用,則表明級聯(lián)樣式表文件滿足預設冗余匹配條件,從而級聯(lián)樣式表文件中的CSS規(guī)則為非冗余的代碼。如果CSS規(guī)則沒有用,則表明級聯(lián)樣式表文件不滿足預設冗余匹配條件,從而級聯(lián)樣式表文件中的CSS規(guī)則為冗余的代碼。
[0100]需要說明的是,CSS規(guī)則是否有用可以通過CSS規(guī)則與網(wǎng)頁的HTML DOM元素的匹配情況來判斷。如果CSS規(guī)則與網(wǎng)頁的HTML DOM元素匹配,則表明CSS規(guī)則有用,如果CSS規(guī)則與網(wǎng)頁的HTML DOM元素不匹配,則表明CSS規(guī)則沒有用。例如,CSS規(guī)則I與一個網(wǎng)頁中的圖片I匹配,則表明CSS規(guī)則有用,進而表明CSS規(guī)則的代碼為非冗余的代碼。前述的網(wǎng)頁可以為多個網(wǎng)頁。
[0101]具體地,可以通過眾包的方式,在用戶訪問網(wǎng)頁時,動態(tài)地分析CSS規(guī)則與網(wǎng)頁的HTML DOM元素匹配情況。由于網(wǎng)站開發(fā)的頁面是給用戶使用的,因此用戶訪問到的頁面會包含所有的HTML應用場景,這樣,可以使得用于和CSS規(guī)則進行匹配的HTML的覆蓋率達到100%,從而不會有遺漏。并且這種方式可以部署在所有頁面上,所以所有頁面的數(shù)據(jù)都可以通過用戶訪問得到,從整站或這個應用的角度,全面地進行分析。并且在頁面中的JavaScript腳本執(zhí)行之后進行分析,所有當前用戶訪問頁面的動態(tài)的CSS規(guī)則和HTML也都被覆蓋。這樣,可以避免由于HTML覆蓋面不全面而導致有用的CSS規(guī)則被當成冗余代碼刪掉,以及由此導致的部分用戶訪問的頁面里的某些區(qū)塊不能正常顯示。
[0102]步驟S306,獲取不滿足預設冗余匹配條件的級聯(lián)樣式表文件,并將不滿足預設冗余匹配條件的級聯(lián)樣式表文件作為冗余文件。
[0103]在本發(fā)明實施例中,每個客戶端可以獲取自身不滿足預設冗余匹配條件的級聯(lián)樣式表文件,并將不滿足預設冗余匹配條件的級聯(lián)樣式表文件作為冗余文件,這樣,可以得到多個客戶端的多個冗余文件。例如,客戶端可以包括客戶端A和客戶端B,其中,客戶端A可以得到冗余文件A,客戶端B可以得到冗余文件B,這樣,客戶端可以得到冗余文件A和冗余文件B。
[0104]優(yōu)選地,客戶端可以將冗余文件發(fā)送至服務器,由于冗余文件的數(shù)據(jù)較大,因此,可以通過推送的方式將冗余文件發(fā)送至服務器。
[0105]步驟S308,刪除冗余文件中的冗余代碼。
[0106]如果確定CSS規(guī)則為冗余文件,則可以將其刪除。具體地,在各個客戶端確定自身的CSS規(guī)則為冗余文件時,可以提醒用戶(例如程序員)將相應的客戶端的冗余文件刪除。或者服務器通過匯總所有客戶端確定的冗余文件,確定所有客戶端的冗余文件,并提醒用戶(例如程序員)將所有客戶端的冗余文件刪除。需要說明的是,在服務器端可以通過執(zhí)行任意后端語言(比如Ruby, NodeJS, PHP, Java等)來實現(xiàn)。
[0107]優(yōu)選地,在本發(fā)明實施例中,可以采用以下方式中的步驟獲取級聯(lián)樣式表文件:
[0108]S2,檢測目標網(wǎng)頁的訪問狀態(tài)。其中,目標網(wǎng)頁的訪問狀態(tài)可以包括目標網(wǎng)頁正在被訪問或者沒有正在被訪問。
[0109]S4,根據(jù)目標網(wǎng)頁的訪問狀態(tài)判斷目標網(wǎng)頁是否被訪問。具體地,可以根據(jù)目標網(wǎng)頁的訪問狀態(tài)判斷目標網(wǎng)頁是否正在被訪問。
[0110]S6,如果判斷出目標網(wǎng)頁被訪問,則獲取目標網(wǎng)頁的樣式文件列表。其中,如果判斷出目標網(wǎng)頁正在被訪問,則動態(tài)地遞歸地獲取目標網(wǎng)頁的樣式文件列表。例如,可以分別獲取內聯(lián)的、外聯(lián)的和動態(tài)依賴的樣式文件列表。
[0111]S8,從樣式文件列表中解析出級聯(lián)樣式表文件。其中,可以從內聯(lián)的樣式文件列表中解析出內聯(lián)的級聯(lián)樣式表文件、從外聯(lián)的樣式文件列表中解析出外聯(lián)的級聯(lián)樣式表文件、從動態(tài)依賴的樣式文件列表中解析出動態(tài)依賴的級聯(lián)樣式表文件。
[0112]這樣,可以找出所有的CSS文件,避免CSS文件覆蓋不全的情況。
[0113]優(yōu)選地,在本發(fā)明實施例中,可以通過以下方式從樣式文件列表中解析出級聯(lián)樣式表文件:
[0114]S10,從樣式文件列表中解析出內聯(lián)的級聯(lián)樣式表文件。具體地,可以解析Style標簽獲取內聯(lián)樣式文件列表,并從內聯(lián)樣式文件列表中解析出內聯(lián)的級聯(lián)樣式表文件。
[0115]S12,從樣式文件列表中解析出外聯(lián)的級聯(lián)樣式表文件。具體地,可以解析link標簽獲取外聯(lián)樣式文件列表,并從外聯(lián)樣式文件列表中解析出外聯(lián)的級聯(lián)樣式表文件。
[0116]S14,從樣式文件列表中解析出動態(tài)依賴的級聯(lián)樣式表文件。具體地,可以判斷級聯(lián)樣式表文件的內容中是否包含Oimport規(guī)則,如果判斷出級聯(lián)樣式表文件的內容中包含◎import規(guī)則,則獲取外聯(lián)樣式文件列表,并且加載外聯(lián)的級聯(lián)樣式表文件,獲取CSS的內容。
[0117]優(yōu)選地,在本發(fā)明實施例中,可以通過以下方式判斷級聯(lián)樣式表文件是否滿足預設冗余匹配條件:
[0118]S16,從級聯(lián)樣式表文件中解析出級聯(lián)樣式表選擇器列表。
[0119]S18,將級聯(lián)樣式表選擇器列表與預設網(wǎng)頁的HTML DOM元素進行匹配。
[0120]其中,如果級聯(lián)樣式表選擇器列表與預設網(wǎng)頁的HTML DOM元素匹配,則確定級聯(lián)樣式表選擇器列表對應的級聯(lián)樣式表文件滿足預設冗余匹配條件,如果級聯(lián)樣式表選擇器列表與預設網(wǎng)頁的HTML DOM元素不匹配,則確定級聯(lián)樣式表選擇器列表對應的級聯(lián)樣式表文件不滿足預設冗余匹配條件。
[0121]在本發(fā)明實施例中,可以通過分析CSS文件內容來解析CSS選擇器列表。具體地,可以通過正則匹配的分析方法來分析CSS文件內容。因為CSS的規(guī)則定義全部都是下面這樣的格式:選擇器{屬性:值;屬性:值;……},因此,可以通過正則/([~\{}+]\{[~\]+}\)/g來獲取到所有的CSS選擇器列表。
[0122]預設網(wǎng)頁可以為用戶正在訪問的所有的頁面。通過將級聯(lián)樣式表選擇器列表與現(xiàn)有頁面的HTML DOM元素進行匹配,得出不匹配的CSS選擇器列表。這里,可以使用每一個CSS選擇器在HTML里進行DOM元素查找,其中,查找方式可以是瀏覽器內置的查找方式,具體地,可以是:document.querySelector (CSS Selector)。
[0123]將級聯(lián)樣式表選擇器列表與預設網(wǎng)頁的HTML DOM元素進行匹配,可以分別得到與預設網(wǎng)頁的HTML DOM元素匹配的級聯(lián)樣式表選擇器列表和與預設網(wǎng)頁的HTML DOM元素不匹配的級聯(lián)樣式表選擇器列表。其中,對與預設網(wǎng)頁的HTML DOM元素匹配的級聯(lián)樣式表選擇器列表不做任何處理,即,保留與預設網(wǎng)頁的HTML DOM元素匹配的級聯(lián)樣式表選擇器列表的相應代碼。對與預設網(wǎng)頁的HTML DOM元素部匹配的級聯(lián)樣式表選擇器列表,可以將其作為冗余的級聯(lián)樣式表選擇器列表代碼,并將其刪除。
[0124]需要說明的是,在本發(fā)明實施例中,多個客戶端可以獲取與預設網(wǎng)頁的HTML DOM元素不匹配的級聯(lián)樣式表選擇器列表的數(shù)據(jù),并將該數(shù)據(jù)發(fā)送至服務器。由于級聯(lián)樣式表選擇器列表的數(shù)據(jù)量加大,因此可以通過post的方式將該數(shù)據(jù)發(fā)送至服務器。另外,多個客戶端除了將不匹配的級聯(lián)樣式表選擇器列表的數(shù)據(jù)post到服務器之外,還可將與不匹配的級聯(lián)樣式表選擇器列表相對應的CSS文件的URL地址發(fā)送至服務器。
[0125]優(yōu)選地,在本發(fā)明