濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > CSS樣式表的背景渲染效率

CSS樣式表的背景渲染效率

熱門標(biāo)簽:南寧外呼電銷系統(tǒng)招商 石家莊電話機(jī)器人電話 北京銷售外呼系統(tǒng)線路 南通電話外呼系統(tǒng)開發(fā) 沸思外呼線路 電銷智能機(jī)器人靠譜么 400電話辦理安徽 電銷機(jī)器人的宣傳語(yǔ) 江西防封卡外呼系統(tǒng)怎么安裝
我的MzTreeView1.0樹控件發(fā)布至今,得到了不少意見反饋,很多網(wǎng)友給了我很多的中肯的建議,也指出了這個(gè)控件里的諸多BUG和不足之處,所以我準(zhǔn)備寫一個(gè)新版本的樹,將大家的建議都整合進(jìn)來實(shí)現(xiàn)。這幾天我就一直在寫新版的樹,樹控件最重要的是效率,特別是大節(jié)點(diǎn)量的時(shí)候,效率稍微差點(diǎn)的模式就會(huì)拖垮瀏覽器,所以新版的樹我首要的還是提高效率,比如增加異步數(shù)據(jù)加載的支持等,另外我還有一個(gè)設(shè)想,就是樹的樹型結(jié)構(gòu)豎線用樣式表(背景圖)來實(shí)現(xiàn),樣式表背景圖片只需要加載一次,而現(xiàn)在這個(gè)模式(用多個(gè)img>)圖片雖然有緩存機(jī)制,但還是有可以每張小圖片都請(qǐng)求一次服務(wù)器的,所以我想用樣式表來實(shí)現(xiàn)有多么的好呀,代碼又精簡(jiǎn),結(jié)構(gòu)又清晰,效果又酷,但是結(jié)果我將近一個(gè)星期的測(cè)試,我這種設(shè)想徹底失敗,原因就是樣式表的渲染效率太差。新的構(gòu)想沒能實(shí)現(xiàn),心情有些沮喪,但我想也應(yīng)該讓大家分享一下這個(gè)測(cè)試成果。

    這里我再解釋一下樹型里的豎線,樹的左邊都有 ┌ ├ └ │ 這些豎線圖表示樹層次,我的1.0版里是用一張張的小圖片堆積起來的,而這種使用樣式表的是用div class="l2">/div> 這種代碼來實(shí)現(xiàn)的,樣式表負(fù)責(zé)填充背景圖。

    #mtvroot div td{width:20px;height:20px;}
    #mtvroot .l0{background:url(line0.gif) no-repeat center}
    #mtvroot .l1{background:url(line1.gif) no-repeat center}
    #mtvroot .l2{background:url(line2.gif) no-repeat center}
    #mtvroot .l3{background:url(line3.gif) no-repeat center}
    #mtvroot .l4{background:url(line4.gif) no-repeat center}
    #mtvroot .ll{background:url(line5.gif) no-repeat center}
    #mtvroot .pm0{background:url(plus0.gif) no-repeat center}
    #mtvroot .pm1{background:url(plus1.gif) no-repeat center}
    #mtvroot .pm2{background:url(plus2.gif) no-repeat center}
    #mtvroot .pm3{background:url(plus3.gif) no-repeat center}
    #mtvroot .expand .pm0{background:url(minus0.gif) no-repeat center}
    #mtvroot .expand .pm1{background:url(minus1.gif) no-repeat center}
    #mtvroot .expand .pm2{background:url(minus2.gif) no-repeat center}
    #mtvroot .expand .pm3{background:url(minus3.gif) no-repeat center}

    上面這段CSS是我在腳本里動(dòng)態(tài)生成的一段樣式的片段,我把它貼上來,有助于后面的講解。運(yùn)用樣式表之后,果真精簡(jiǎn)了許多,每個(gè)節(jié)點(diǎn)的生成也夠快,但我發(fā)現(xiàn),當(dāng)我的樹節(jié)點(diǎn)量達(dá)到,比如說300-500個(gè)節(jié)點(diǎn)之后,節(jié)點(diǎn)生成的效率沒有影響什么,但每個(gè)節(jié)點(diǎn)的展開/收縮很慢很慢,需要幾秒鐘以上甚至10秒,且這個(gè)期間的CPU占用率是100%。說明一下,樹型的展開/收縮是設(shè)置父節(jié)點(diǎn)的 style.display = none|block 來實(shí)現(xiàn)的。我的電腦配置是:AMD2800+ 1GDDR400內(nèi)存,配置不太差的。

    我首先的反應(yīng)是:是不是用了太多的table>影響了效率?因?yàn)槲颐恳粋€(gè)節(jié)點(diǎn)都用了一個(gè)table>,但是我把table>換成了div>、span>等,效率沒有什么改善,說明這個(gè)CPU占用率100%的問題不是HTML標(biāo)簽的問題,那么剩下來的問題就是這里使用了樣式表。

    以一個(gè)500節(jié)點(diǎn)的量來說吧,1.0里左邊大概要堆積2000個(gè)左右的小圖片。這種情況在瀏覽器端設(shè)置本地不緩存的時(shí)候會(huì)存在很大的問題,要加載這些多的小圖片需要消耗不少的時(shí)間和服務(wù)器資源,所以我才會(huì)有這種新的用樣式表來解決的想法,現(xiàn)在換成樣式表法,也就是大概有2000個(gè)地方需要用樣式表來渲染出背景圖。我測(cè)試了各種情況,再對(duì)比1.0版的代碼得出的結(jié)論是:CPU的點(diǎn)用率如此之高,唯一的原因也就只有這種渲染的耗時(shí)了。驗(yàn)證也非常簡(jiǎn)單,我把上面的樣式表的左邊 #mtvroot 這部分去掉,也就是去掉樣式表的依托關(guān)系,測(cè)試的結(jié)果發(fā)現(xiàn)效率改善了很多,但耗時(shí)依然是可觀的,有3-5秒之多。

    另外我換了不同的瀏覽器,測(cè)試的結(jié)果也不太一樣,在IE里最為惡心,比如說我在某個(gè)節(jié)點(diǎn)有500子節(jié)點(diǎn),我將它收起(CPU100%,等待3-5秒),也就是display="none",這時(shí)候若我去收起這個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn)(這個(gè)節(jié)點(diǎn)沒有其它的同級(jí)節(jié)點(diǎn),即它的父節(jié)點(diǎn)只有它這么一個(gè)子節(jié)點(diǎn)),照理說只有一個(gè)節(jié)點(diǎn),收起應(yīng)該是即時(shí)的事,但結(jié)果不然,結(jié)果又是3-5秒的CPU100%,這個(gè)讓我狂郁悶,也就是說即使HTML對(duì)象被display="none"隱藏掉了,但是對(duì)它的父級(jí)進(jìn)行任何操作的時(shí)候,IE會(huì)對(duì)這些被隱藏的對(duì)象用樣式表重新渲染一遍,真是搞不懂IE的開發(fā)者當(dāng)初是怎么想的。

    我又到FIREFOX里測(cè)試了一下,在收起的時(shí)候(display=none)是瞬間的,可以肯定,F(xiàn)F對(duì)待被隱藏的對(duì)象不會(huì)再消耗精力。當(dāng)然展開的時(shí)候所有的瀏覽器都一樣:3-5秒的CPU100%,不過FF稍微要快些。

    通過上面的這些現(xiàn)象我得出這么一個(gè)結(jié)論:樣式表在動(dòng)態(tài)渲染的時(shí)候效率并不高;在父容器發(fā)現(xiàn)狀態(tài)變化的時(shí)候會(huì)引起它的所以子孫對(duì)象的樣式表重新渲染;FireFox 對(duì)待被display=none隱藏的對(duì)象不會(huì)重新渲染而IE會(huì)。

    那么這種樣式表的渲染效率問題以前為什么一直沒有被發(fā)現(xiàn)呢?嘿嘿,大家做網(wǎng)頁(yè)的時(shí)候難得會(huì)做到這種極端的時(shí)候,一個(gè)頁(yè)面里有幾千個(gè)需要樣式表渲染背景圖。通常也就幾個(gè)地方或者幾十個(gè)地方了,所以感覺不出來渲染的效率,也感覺不出這方面在不同的瀏覽器之間的差別。但是在做樹這些的控件的時(shí)候必定會(huì)碰到各種極端的問題,比如大數(shù)據(jù)量的數(shù)組,生成的HTML對(duì)象的多少等等,象這種渲染的效率差別也只是我在寫JS腳本時(shí)碰到的問題之一而已。今天我把這個(gè)測(cè)試結(jié)果共享出來是希望對(duì)大家以后寫程序的時(shí)候有所借薦,在做設(shè)計(jì)的時(shí)候有所考慮。

    最后多謝大家對(duì)我寫的控件的肯定與支持,謝謝了!

標(biāo)簽:云南 北海 寧夏 晉中 衢州 陽(yáng)泉 來賓 鹽城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《CSS樣式表的背景渲染效率》,本文關(guān)鍵詞  CSS,樣式,表,的,背景,渲染,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《CSS樣式表的背景渲染效率》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于CSS樣式表的背景渲染效率的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    建平县| 北川| 青河县| 南江县| 襄汾县| 海安县| 武宁县| 正阳县| 高密市| 康马县| 金寨县| 哈密市| 阳朔县| 高青县| 汉寿县| 合作市| 白山市| 宁国市| 金沙县| 和林格尔县| 灵山县| 安西县| 望谟县| 嘉峪关市| 武邑县| 化隆| 湟中县| 天柱县| 武鸣县| 张掖市| 雷波县| 乐业县| 定远县| 景宁| 三亚市| 东宁县| 益阳市| 昭苏县| 三门县| 天门市| 临澧县|