專(zhuān)利名稱(chēng)::一種層疊樣式表處理方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及網(wǎng)頁(yè)信息處理領(lǐng)域,尤其涉及一種層疊樣式表處理方法和裝置。
背景技術(shù):
:層疊樣式表(CascadingStyleSheets,CSS)是一系列格式設(shè)置規(guī)則,比如規(guī)定字體的大小、顏色,在屏幕中的顯示位置等等,它們控制WEB頁(yè)面內(nèi)容的外觀。CSS解析是指將CSS文本轉(zhuǎn)換為結(jié)構(gòu)化形式存儲(chǔ)的過(guò)程,而CSS渲染則是為文檔對(duì)象模型(DocumentObjectModel,DOM)樹(shù)中的節(jié)點(diǎn)尋找匹配的CSS規(guī)則并賦值的過(guò)程。樹(shù)中的節(jié)點(diǎn)包括元素節(jié)點(diǎn)、內(nèi)容節(jié)點(diǎn)、文本節(jié)點(diǎn)。元素節(jié)點(diǎn)是DOM樹(shù)中,一些包含屬性但不包含子節(jié)點(diǎn)的結(jié)點(diǎn),此類(lèi)結(jié)點(diǎn)不需要關(guān)閉標(biāo)簽。如<img><br>〈frame〉等。內(nèi)容節(jié)點(diǎn)是DOM樹(shù)中,一些包含屬性且包含子節(jié)點(diǎn)的結(jié)點(diǎn),需要關(guān)閉標(biāo)簽,此類(lèi)節(jié)點(diǎn)是元素節(jié)點(diǎn)的子類(lèi)。如<a>〈/a><div></div>〈tableX/table〉等。文本節(jié)點(diǎn)是網(wǎng)頁(yè)中,每段被HTML標(biāo)簽分割的文字塊都作為DOM樹(shù)中的一個(gè)文字結(jié)點(diǎn),文字結(jié)點(diǎn)只能作為葉結(jié)點(diǎn)存在,不能有孩子。如“〈P〉文字節(jié)點(diǎn)l〈/p>”中的“文字節(jié)點(diǎn)I”。這樣,瀏覽器通過(guò)將解析出的CSS信息渲染到頁(yè)面,使網(wǎng)頁(yè)變得美觀、絢麗。搜索引擎則需要利用CSS提供的信息輔助頁(yè)面的分析,比如利用字體的大小分析頁(yè)面的實(shí)際標(biāo)題、利用頁(yè)面元素在屏幕上的位置信息抽取頁(yè)面主體內(nèi)容等等,這些結(jié)果都將成為網(wǎng)頁(yè)排序中的重要因子。此外,在搜索結(jié)果預(yù)覽和頁(yè)面轉(zhuǎn)碼等,需要展示頁(yè)面的功能上,CSS的解析渲染更是發(fā)揮了重要的作用。因此,如何準(zhǔn)確高效地解析渲染CSS,成為搜索引擎中一個(gè)很基本、也很重要的功能。目前的CSS解析采用的是尋找關(guān)鍵字符的方法,對(duì)關(guān)鍵字符中間的部分進(jìn)行解析,將解析結(jié)果存在相應(yīng)的哈希桶里,過(guò)濾掉“不認(rèn)識(shí)的部分”。在利用CSS渲染節(jié)點(diǎn)的時(shí)候,按照“只有標(biāo)簽選擇器”、“只有類(lèi)選擇器”、“只有id選擇器”、“有標(biāo)簽和類(lèi)選擇器”、“有標(biāo)簽和id選擇器”五個(gè)方案的順序?qū)ふ蚁鄳?yīng)的CSS規(guī)則,找到匹配的則渲染節(jié)點(diǎn),若規(guī)則中的聲明有重復(fù),后面的覆蓋前面的。但是,現(xiàn)有的CSS解析占用內(nèi)存過(guò)大,僅哈希桶就占28M,加上存儲(chǔ)輔助的指針,共計(jì)超過(guò)30M。
發(fā)明內(nèi)容本發(fā)明實(shí)施例所要解決的技術(shù)問(wèn)題在于,提供一種層疊樣式表處理方法和裝置,能夠減少CSS解析時(shí)占用的內(nèi)存空間。為了解決上述技術(shù)問(wèn)題,本發(fā)明實(shí)施例提供了一種層疊樣式表處理方法,包括判斷需要解析的CSS對(duì)象的CSS規(guī)則類(lèi)型,所述CSS規(guī)則類(lèi)型包括對(duì)所有標(biāo)簽都起效的第一類(lèi)規(guī)則類(lèi)型和對(duì)特定的標(biāo)簽起效的第二類(lèi)規(guī)則類(lèi)型,所述第一類(lèi)規(guī)則存儲(chǔ)在哈希鏈表中,所弟~■類(lèi)規(guī)則存儲(chǔ)在對(duì)應(yīng)的標(biāo)簽鏈表中;根據(jù)所述CSS規(guī)則類(lèi)型在相應(yīng)的鏈表中獲取對(duì)應(yīng)的CSS規(guī)則;根據(jù)所述CSS規(guī)則解析所述CSS對(duì)象,所述CSS規(guī)則包括選擇器和聲明。相應(yīng)地,本發(fā)明實(shí)施例還提供了一種層疊樣式表處理裝置,包括類(lèi)型判斷單元,用于判斷需要解析的CSS對(duì)象的CSS規(guī)則類(lèi)型,所述CSS規(guī)則類(lèi)型包括對(duì)所有標(biāo)簽都起效的第一類(lèi)規(guī)則類(lèi)型和對(duì)特定的標(biāo)簽起效的第二類(lèi)規(guī)則類(lèi)型,所述第一類(lèi)規(guī)則存儲(chǔ)在哈希鏈表中,所第二類(lèi)規(guī)則存儲(chǔ)在對(duì)應(yīng)的標(biāo)簽鏈表中;規(guī)則獲取單元,用于根據(jù)所述CSS規(guī)則類(lèi)型在相應(yīng)的鏈表中獲取對(duì)應(yīng)的CSS規(guī)則;解析單元,用于根據(jù)所述CSS規(guī)則解析所述CSS對(duì)象,所述CSS規(guī)則包括選擇器和聲明。實(shí)施本發(fā)明實(shí)施例,具有如下有益效果在本發(fā)明實(shí)施例中,將CSS規(guī)則分類(lèi)型進(jìn)行存儲(chǔ),并將網(wǎng)頁(yè)中所占比例較高的第一類(lèi)規(guī)則存儲(chǔ)在哈希鏈表中,一方面降低了存儲(chǔ)空間,另一方面,由于哈希鏈表的長(zhǎng)度大大下降,提高了后續(xù)渲染時(shí)的效率。為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明實(shí)施例中的層疊樣式表處理方法的一個(gè)具體流程示意圖2是本發(fā)明實(shí)施例中的一條CSS規(guī)則的解析結(jié)構(gòu)示意圖3是本發(fā)明實(shí)施例中的一種CSS規(guī)則分類(lèi)存儲(chǔ)結(jié)構(gòu)的部分示意圖4是本發(fā)明實(shí)施例中的CSS渲染方法的一個(gè)具體流程示意圖5是本發(fā)明實(shí)施例中的層疊樣式表處理裝置的一個(gè)具體組成示意圖。具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。在本發(fā)明實(shí)施例中,定義了CSS規(guī)則,并將CSS規(guī)則分為兩種類(lèi)型,即對(duì)所有標(biāo)簽都起效的第一類(lèi)規(guī)則類(lèi)型和對(duì)特定的標(biāo)簽起效的第二類(lèi)規(guī)則類(lèi)型。并將網(wǎng)頁(yè)中所占比重最大的第一類(lèi)規(guī)則存儲(chǔ)在一個(gè)哈希鏈表中,由于哈希鏈表(或稱(chēng)哈希桶,哈希桶是哈希索弓I組織中的存儲(chǔ)單位,可包含一個(gè)或多個(gè)索引記錄)的個(gè)數(shù)控制在64個(gè)左右,里面只存放指針,在64位機(jī)上只占用內(nèi)存O.5K。之后每添加一條規(guī)則便增加一個(gè)節(jié)點(diǎn),放入相應(yīng)的桶里,不必有輔助性的內(nèi)存申請(qǐng)。統(tǒng)計(jì)數(shù)據(jù)顯示,平均解析一個(gè)網(wǎng)頁(yè)需要4M(兆比特)左右的內(nèi)存,比原先的30M+下降了很多。這樣的存儲(chǔ)使得每條鏈表的長(zhǎng)度得到了有效控制,一方面節(jié)省了存儲(chǔ)資源,另一方面,則提高了CSS渲染對(duì)鏈表遍歷時(shí)的效率。如圖1所示,為本發(fā)明實(shí)施例中的層疊樣式表處理方法的一個(gè)具體流程示意圖。該方法包括如下流程。101、判斷需要解析的CSS對(duì)象的CSS規(guī)則類(lèi)型,所述CSS規(guī)則類(lèi)型包括對(duì)所有標(biāo)簽都起效的第一類(lèi)規(guī)則類(lèi)型和對(duì)特定的標(biāo)簽起效的第二類(lèi)規(guī)則類(lèi)型,所述第一類(lèi)規(guī)則存儲(chǔ)在哈希鏈表中,所弟二類(lèi)規(guī)則存儲(chǔ)在對(duì)應(yīng)的標(biāo)簽鏈表中。其中的CSS規(guī)則中包括選擇器和聲明。并且在CSS規(guī)則中可包括一個(gè)或多個(gè)聲明,用類(lèi)Selector表示所述選擇器,用類(lèi)StyleInfo表示所述聲明,用類(lèi)Attribute的鏈表表示所述選擇器的后代關(guān)系。若采用上述類(lèi)定義規(guī)則,則將所述CSS規(guī)則的選擇器的Attribute鏈表的首項(xiàng)作為所述CSS規(guī)則的類(lèi)型的分類(lèi)標(biāo)準(zhǔn),當(dāng)所述首項(xiàng)對(duì)所有標(biāo)簽都起效則所述CSS規(guī)則的類(lèi)型為第一類(lèi)規(guī)則類(lèi)型,當(dāng)所述首項(xiàng)已指定特定標(biāo)簽則所述CSS規(guī)則的類(lèi)型為第二類(lèi)規(guī)則類(lèi)型。如圖2所示,為一條CSS規(guī)則的解析結(jié)構(gòu)示意圖。同時(shí),在如圖2的示例中,為了便于CSS規(guī)則的存儲(chǔ)和渲染查找,Attribute鏈表的順序采用和CSS語(yǔ)法中相反的方向。即,Attribute鏈表的頭部是.class2,p.cl次之,div#dl排第三,.cs最后。如圖3所示,則為CSS規(guī)則分類(lèi)存儲(chǔ)結(jié)構(gòu)的部分示意圖。在本實(shí)施例中,第二類(lèi)規(guī)則類(lèi)型中針對(duì)div,table,p等標(biāo)簽的規(guī)則獨(dú)自存成各標(biāo)簽對(duì)應(yīng)的一個(gè)鏈中。對(duì)所有標(biāo)簽都起效的第一類(lèi)規(guī)則類(lèi)型的CSS規(guī)則,則與.class2落在同一個(gè)哈希桶里的形成一鏈。如圖2所示的CSS規(guī)則,它的選擇器由class2打頭,p.cl,div#dl,.cs依次掛在下方。其余的CSS規(guī)則也依此存儲(chǔ)。102、根據(jù)所述CSS規(guī)則類(lèi)型在相應(yīng)的鏈表中獲取對(duì)應(yīng)的CSS規(guī)則。103、根據(jù)所述CSS規(guī)則解析所述CSS對(duì)象。在上述方法的基礎(chǔ)上,本發(fā)明實(shí)施例還進(jìn)一步提供了CSS渲染的方法,即,DOM樹(shù)中的每一個(gè)節(jié)點(diǎn)具有一個(gè)聲明,所述聲明用于存儲(chǔ)所述節(jié)點(diǎn)的CSS信息,所述方法還包括為所述DOM樹(shù)中的節(jié)點(diǎn)渲染CSS信息。其中,所述為所述DOM樹(shù)中的節(jié)點(diǎn)渲染CSS信息包括根據(jù)CSS規(guī)則類(lèi)型層級(jí)獲得與節(jié)點(diǎn)匹配的CSS規(guī)則;將所述CSS規(guī)則的聲明渲染到節(jié)點(diǎn)上。在具體根據(jù)規(guī)則渲染時(shí),首先獲得所述DOM樹(shù)中的節(jié)點(diǎn)的class屬性和id屬性,節(jié)點(diǎn)中只有這兩個(gè)屬性是關(guān)系到CSS信息的,其余屬性可以忽略。class屬性和id屬性的區(qū)別在于,一個(gè)id屬性只能被所述DOM樹(shù)中的一個(gè)節(jié)點(diǎn)所擁有,而一個(gè)class屬性可以被所述多個(gè)DOM樹(shù)中的節(jié)點(diǎn)擁有。之后遍歷節(jié)點(diǎn)的所有匹配規(guī)則,防止遺漏造成的節(jié)點(diǎn)渲染不完全。如,圖4所示,為所述DOM樹(shù)中的節(jié)點(diǎn)渲染CSS信息包括以下步驟。201、判斷節(jié)點(diǎn)的屬性是否包括class屬性,當(dāng)判斷結(jié)果為包括時(shí),執(zhí)行步驟202,否則執(zhí)行步驟203。202、在所述class屬性對(duì)應(yīng)的哈希鏈表中查找匹配的CSS規(guī)則并將所述CSS規(guī)則的聲明渲染到節(jié)點(diǎn)上,并執(zhí)行步驟203。203、判斷所述節(jié)點(diǎn)的屬性是否包括id屬性,當(dāng)判斷結(jié)果為包括時(shí)執(zhí)行步驟204,否則執(zhí)行步驟205。204、在所述id屬性對(duì)應(yīng)的哈希鏈表中查找匹配的CSS規(guī)則并將所述CSS規(guī)則的聲明渲染到節(jié)點(diǎn)上,然后執(zhí)行步驟205。205、在所述節(jié)點(diǎn)對(duì)應(yīng)的標(biāo)簽鏈表中查找CSS規(guī)則并將所述CSS規(guī)則的聲明渲染到節(jié)點(diǎn)上。在按上述方法進(jìn)行渲染時(shí),需要為節(jié)點(diǎn)在鏈表中查找匹配的CSS規(guī)則,將節(jié)點(diǎn)和鏈表中的每個(gè)CSS規(guī)則作一次匹配比較。如果匹配成功,則將該規(guī)則的聲明渲染到節(jié)點(diǎn)上,并繼續(xù)下一個(gè)規(guī)則的匹配比較。必須要遍歷完鏈表,即在本發(fā)明實(shí)施例中不會(huì)只要有一個(gè)規(guī)則匹配成功就停止匹配和渲染的原因是因?yàn)?,后續(xù)的匹配成功的CSS規(guī)則可能定義了前面CSS規(guī)則沒(méi)有定義的聲明。比如div標(biāo)簽?zāi)艹晒ζヅ鋎iv{color:read}和div{font-szie:14px}兩條CSS規(guī)則,需要遍歷完整個(gè)div鏈表才能保證所有的匹配的CSS信息都成功渲染要該節(jié)點(diǎn)上。當(dāng)然,在本發(fā)明實(shí)施例中也存在一種可能性,即與節(jié)點(diǎn)匹配的兩個(gè)或兩個(gè)以上CSS規(guī)則中定義了同一個(gè)聲明,如果前后兩個(gè)匹配成功的CSS規(guī)則定義了同一個(gè)聲明,應(yīng)該選擇哪一個(gè)聲明進(jìn)行宣染?比如,〈divid=〃dl〃class=〃cl〃>〈pid=〃d2〃class="c2">正文〈/p>〈/div>中的p節(jié)點(diǎn),與CSS規(guī)則div.c2{color:green}和CSS規(guī)則div#dlp{color:red}都匹配,此時(shí)p節(jié)點(diǎn)的color值該取哪個(gè)呢?為此,在本發(fā)明實(shí)施例中定義了將與所述節(jié)點(diǎn)匹配程度較高的CSS規(guī)則的聲明渲染到所述節(jié)點(diǎn)上。而匹配程度可以根據(jù)優(yōu)先匹配規(guī)則進(jìn)行定義。該優(yōu)先匹配規(guī)則可包括下述規(guī)則中的一個(gè)或多個(gè)當(dāng)多個(gè)CSS規(guī)則匹配同一個(gè)標(biāo)簽時(shí),id選擇器匹配越多的,匹配程度越高;當(dāng)id選擇器匹配個(gè)數(shù)一樣時(shí),類(lèi)選擇器匹配越多的,匹配程度越高;當(dāng)id和類(lèi)選擇器匹配個(gè)數(shù)一樣時(shí),標(biāo)簽匹配越多的,匹配程度越高;當(dāng)id選擇器、類(lèi)選擇器、標(biāo)簽匹配個(gè)數(shù)都一樣時(shí),出現(xiàn)在后面的CSS規(guī)則優(yōu)先匹配。如上述例子中的P節(jié)點(diǎn)。它的CSS渲染過(guò)程如下I)有class屬性c2,在c2對(duì)應(yīng)的哈希鏈中找到匹配的規(guī)則div.c2{color:green},給自己渲染上css的color信息green。并記下該規(guī)則與節(jié)點(diǎn)匹配程度id匹配O個(gè),class匹配I個(gè),標(biāo)簽匹配I個(gè),CSS規(guī)則出現(xiàn)的次序?yàn)镃SS規(guī)則中的一個(gè)屬性,暫記為nl。2)有id屬性d2,在d2對(duì)應(yīng)的標(biāo)簽鏈中沒(méi)找到匹配的規(guī)則,跳過(guò)。3)在P標(biāo)簽對(duì)應(yīng)的標(biāo)簽鏈中找到對(duì)應(yīng)的規(guī)則div#dlp{color:red}。此時(shí),該規(guī)則定義的color在P標(biāo)簽中已被渲染,則查看該規(guī)則與標(biāo)簽的匹配程度id匹配I個(gè),class匹配O個(gè),標(biāo)簽匹配2個(gè)。與將P渲染成green的CSS規(guī)則比較。根據(jù)規(guī)則1,id匹配個(gè)數(shù)大1,所以覆蓋P節(jié)點(diǎn)的CSS信息,將其color值渲染成red。在本發(fā)明實(shí)施例中,在構(gòu)建DOM樹(shù)的過(guò)程中,能夠?yàn)镈OM樹(shù)的節(jié)點(diǎn)高效準(zhǔn)確地渲染上匹配的CSS信息,可以為后續(xù)的頁(yè)面分析提供強(qiáng)有力的支持。同時(shí),規(guī)則分類(lèi)存儲(chǔ)方案極大地縮小了使用的內(nèi)存空間,如,可從先前的30M+,縮減至的4M。相應(yīng)的,如圖5所示,為本發(fā)明實(shí)施例中的層疊樣式表處理裝置的具體組成示意圖。該裝置3包括類(lèi)型判斷單元30,用于判斷需要解析的CSS對(duì)象的CSS規(guī)則類(lèi)型,所述CSS規(guī)則類(lèi)型包括對(duì)所有標(biāo)簽都起效的第一類(lèi)規(guī)則類(lèi)型和對(duì)特定的標(biāo)簽起效的第二類(lèi)規(guī)則類(lèi)型,所述第一類(lèi)規(guī)則存儲(chǔ)在哈希鏈表中,所第二類(lèi)規(guī)則存儲(chǔ)在對(duì)應(yīng)的標(biāo)簽鏈表中;規(guī)則獲取單元32,用于根據(jù)所述CSS規(guī)則類(lèi)型在相應(yīng)的鏈表中獲取對(duì)應(yīng)的CSS規(guī)則;解析單元34,用于根據(jù)所述CSS規(guī)則解析所述CSS對(duì)象,所述CSS規(guī)則包括選擇器和聲明。其中,該裝置3還可以進(jìn)行CSS渲染,此時(shí),DOM樹(shù)中的每一個(gè)節(jié)點(diǎn)具有一個(gè)聲明,所述聲明用于存儲(chǔ)所述節(jié)點(diǎn)的CSS信息,裝置3還包括渲染單元36,用于為所述DOM樹(shù)中的節(jié)點(diǎn)渲染CSS信息。圖3中為都包括的情形。在進(jìn)行渲染時(shí),當(dāng)與節(jié)點(diǎn)匹配的兩個(gè)或兩個(gè)以上CSS規(guī)則中定義了同一個(gè)聲明時(shí),所述渲染單元36還用于將與所述節(jié)點(diǎn)匹配程度較高的CSS規(guī)則的聲明渲染到所述節(jié)點(diǎn)上。當(dāng)然,上述渲染單元36具體在進(jìn)行渲染時(shí)可采用前述方法中的過(guò)程,此處不做贅述。在本發(fā)明實(shí)施例中,將CSS規(guī)則分類(lèi)型進(jìn)行存儲(chǔ),并將網(wǎng)頁(yè)中所占比較較高的第一類(lèi)規(guī)則存儲(chǔ)在哈希鏈表中,一方面降低了存儲(chǔ)空間,另一方面,由于哈希鏈表的長(zhǎng)度大大下降,提高了后續(xù)渲染時(shí)的效率。而在進(jìn)行渲染時(shí),按不同的CSS規(guī)則類(lèi)型分別進(jìn)行匹配和渲染,保證了節(jié)點(diǎn)渲染時(shí)不會(huì)遺漏規(guī)則,節(jié)點(diǎn)可以正確的渲染。并當(dāng)渲染中出現(xiàn)聲明沖突時(shí),提出了沖突的解決機(jī)制。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤(pán)、只讀存儲(chǔ)記憶體(Read-OnlyMemory,ROM)或隨機(jī)存儲(chǔ)記憶體(RandomAccessMemory,RAM)等。以上所揭露的僅為本發(fā)明一種較佳實(shí)施例而已,當(dāng)然不能以此來(lái)限定本發(fā)明之權(quán)利范圍,因此依本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。權(quán)利要求1.一種層疊樣式表處理方法,其特征在于,所述方法包括判斷需要解析的層疊樣式表CSS對(duì)象的CSS規(guī)則類(lèi)型,所述CSS規(guī)則類(lèi)型包括對(duì)所有標(biāo)簽都起效的第一類(lèi)規(guī)則類(lèi)型和對(duì)特定的標(biāo)簽起效的第二類(lèi)規(guī)則類(lèi)型,所述第一類(lèi)規(guī)則存儲(chǔ)在哈希鏈表中,所弟_■類(lèi)規(guī)則存儲(chǔ)在對(duì)應(yīng)的標(biāo)簽鏈表中;根據(jù)所述CSS規(guī)則類(lèi)型在相應(yīng)的鏈表中獲取對(duì)應(yīng)的CSS規(guī)則;根據(jù)所述CSS規(guī)則解析所述CSS對(duì)象,所述CSS規(guī)則包括選擇器和聲明。2.如權(quán)利要求1所述的方法,其特征在于,所述CSS規(guī)則中包括多個(gè)聲明,用類(lèi)Selector表示所述選擇器,用類(lèi)StyleInfo表示所述聲明,用類(lèi)Attribute的鏈表表示所述選擇器的后代關(guān)系。3.如權(quán)利要求2所述的方法,其特征在于,所述類(lèi)Attribute的鏈表的順序與CSS語(yǔ)法中的相反。4.如權(quán)利要求2所述的方法,其特征在于,將所述CSS規(guī)則的選擇器的Attribute鏈表的首項(xiàng)作為所述CSS規(guī)則的類(lèi)型的分類(lèi)標(biāo)準(zhǔn),當(dāng)所述首項(xiàng)對(duì)所有標(biāo)簽都起效則所述CSS規(guī)則的類(lèi)型為第一類(lèi)規(guī)則類(lèi)型,當(dāng)所述首項(xiàng)已指定特定標(biāo)簽則所述CSS規(guī)則的類(lèi)型為第二類(lèi)規(guī)則類(lèi)型。5.如權(quán)利要求1至4中任一項(xiàng)所述的方法,其特征在于,文檔對(duì)象模型DOM樹(shù)中的每一個(gè)節(jié)點(diǎn)具有一個(gè)聲明,所述聲明用于存儲(chǔ)所述節(jié)點(diǎn)的CSS信息,所述方法還包括為所述DOM樹(shù)中的節(jié)點(diǎn)渲染CSS信息。6.如權(quán)利要求5所述的方法,其特征在于,所述為所述DOM樹(shù)中的節(jié)點(diǎn)渲染CSS信息包括根據(jù)CSS規(guī)則類(lèi)型層級(jí)獲得與節(jié)點(diǎn)匹配的CSS規(guī)則;將所述CSS規(guī)則的聲明渲染到節(jié)點(diǎn)上。7.如權(quán)利要求5所述的方法,其特征在于,所述為所述DOM樹(shù)中的節(jié)點(diǎn)渲染CSS信息包括判斷節(jié)點(diǎn)的屬性是否包括class屬性,當(dāng)判斷結(jié)果為包括class屬性時(shí),在所述class屬性對(duì)應(yīng)的哈希鏈表中查找匹配的CSS規(guī)則并將所述CSS規(guī)則的聲明渲染到節(jié)點(diǎn)上,并進(jìn)一步判斷所述節(jié)點(diǎn)的屬性是否包括id屬性,當(dāng)判斷結(jié)果為不包括class屬性時(shí)進(jìn)一步判斷所述節(jié)點(diǎn)的屬性是否包括id屬性;當(dāng)判斷所述節(jié)點(diǎn)的屬性包括id屬性時(shí),在所述id屬性對(duì)應(yīng)的哈希鏈表中查找匹配的CSS規(guī)則并將所述CSS規(guī)則的聲明渲染到節(jié)點(diǎn)上,然后在所述節(jié)點(diǎn)對(duì)應(yīng)的標(biāo)簽鏈表中查找CSS規(guī)則并將所述CSS規(guī)則的聲明渲染到節(jié)點(diǎn)上,當(dāng)判斷所述節(jié)點(diǎn)的屬性不包括id屬性時(shí),在所述節(jié)點(diǎn)對(duì)應(yīng)的標(biāo)簽鏈表中查找CSS規(guī)則并將所述CSS規(guī)則的聲明渲染到節(jié)點(diǎn)上。8.如權(quán)利要求6所述的方法,其特征在于,當(dāng)與節(jié)點(diǎn)匹配的兩個(gè)或兩個(gè)以上CSS規(guī)則中定義了同一個(gè)聲明時(shí),將與所述節(jié)點(diǎn)匹配程度較高的CSS規(guī)則的聲明渲染到所述節(jié)點(diǎn)上。9.如權(quán)利要求8所述的方法,其特征在于,所述將與所述節(jié)點(diǎn)匹配程度較高的CSS規(guī)則的聲明渲染到所述節(jié)點(diǎn)上包括,根據(jù)優(yōu)先匹配規(guī)則將與所述節(jié)點(diǎn)匹配程度較高的CSS規(guī)則的聲明渲染到所述節(jié)點(diǎn)上;其中,所述優(yōu)先匹配規(guī)則包括下述規(guī)則中的一個(gè)或多個(gè)當(dāng)多個(gè)CSS規(guī)則匹配同一個(gè)標(biāo)簽時(shí),id選擇器匹配越多的,匹配程度越高;當(dāng)id選擇器匹配個(gè)數(shù)一樣時(shí),類(lèi)選擇器匹配越多的,匹配程度越高;當(dāng)id和類(lèi)選擇器匹配個(gè)數(shù)一樣時(shí),標(biāo)簽匹配越多的,匹配程度越高;當(dāng)id選擇器、類(lèi)選擇器、標(biāo)簽匹配個(gè)數(shù)都一樣時(shí),出現(xiàn)在后面的CSS規(guī)則優(yōu)先匹配。10.一種層疊樣式表處理裝置,其特征在于,所述裝置包括類(lèi)型判斷單元,用于判斷需要解析的CSS對(duì)象的CSS規(guī)則類(lèi)型,所述CSS規(guī)則類(lèi)型包括對(duì)所有標(biāo)簽都起效的第一類(lèi)規(guī)則類(lèi)型和對(duì)特定的標(biāo)簽起效的第二類(lèi)規(guī)則類(lèi)型,所述第一類(lèi)規(guī)則存儲(chǔ)在哈希鏈表中,所第二類(lèi)規(guī)則存儲(chǔ)在對(duì)應(yīng)的標(biāo)簽鏈表中;規(guī)則獲取單元,用于根據(jù)所述CSS規(guī)則類(lèi)型在相應(yīng)的鏈表中獲取對(duì)應(yīng)的CSS規(guī)則;解析單元,用于根據(jù)所述CSS規(guī)則解析所述CSS對(duì)象,所述CSS規(guī)則包括選擇器和聲明。11.如權(quán)利要求10所述的裝置,其特征在于,DOM樹(shù)中的每一個(gè)節(jié)點(diǎn)具有一個(gè)用于存儲(chǔ)所述節(jié)點(diǎn)的CSS信息的聲明,所述裝置還包括渲染單元,用于為所述DOM樹(shù)中的節(jié)點(diǎn)渲染CSS信息。12.如權(quán)利要求11所述的裝置,其特征在于,當(dāng)與節(jié)點(diǎn)匹配的兩個(gè)或兩個(gè)以上CSS規(guī)則中定義了同一個(gè)聲明時(shí),所述渲染單元還用于將與所述節(jié)點(diǎn)匹配程度較高的CSS規(guī)則的聲明渲染到所述節(jié)點(diǎn)上。全文摘要本發(fā)明實(shí)施例公開(kāi)了一種層疊樣式表處理方法和裝置,該方法包括判斷需要解析的CSS對(duì)象的CSS規(guī)則類(lèi)型,所述CSS規(guī)則類(lèi)型包括對(duì)所有標(biāo)簽都起效的第一類(lèi)規(guī)則類(lèi)型和對(duì)特定的標(biāo)簽起效的第二類(lèi)規(guī)則類(lèi)型,所述第一類(lèi)規(guī)則存儲(chǔ)在哈希鏈表中,所第二類(lèi)規(guī)則存儲(chǔ)在對(duì)應(yīng)的標(biāo)簽鏈表中;根據(jù)所述CSS規(guī)則類(lèi)型在相應(yīng)的鏈表中獲取對(duì)應(yīng)的CSS規(guī)則;根據(jù)所述CSS規(guī)則解析所述CSS對(duì)象,所述CSS規(guī)則包括選擇器和聲明。采用本發(fā)明,可極大的減少CSS解析時(shí)的內(nèi)存空間。文檔編號(hào)G06F17/30GK103064849SQ20111032030公開(kāi)日2013年4月24日申請(qǐng)日期2011年10月19日優(yōu)先權(quán)日2011年10月19日發(fā)明者呂磊,林世飛,張立明申請(qǐng)人:騰訊科技(深圳)有限公司