2010-07-31
網(wǎng)頁(yè)優(yōu)化的基礎(chǔ)的部分應(yīng)該就是HTML的優(yōu)化,具體來(lái)說(shuō)首先就是標(biāo)記的清理,清理標(biāo)記不僅僅能縮減文檔的大小,而且能夠讓文檔更易于維護(hù)提高搜索引擎的可見度(Clean markup means better accessibility, easier maintenance, and good search engine visibility),但是即便是那些號(hào)稱高度優(yōu)化過(guò)的網(wǎng)頁(yè),如果仔細(xì)查看代碼,依舊可以發(fā)現(xiàn)很多可以刪減或者已經(jīng)過(guò)時(shí)的標(biāo)記用法:
1.script里的注釋符
除非是像95 Netscape 1.0這類幾乎絕跡的瀏覽器需要這樣的處理,在大部分主流瀏覽器里,往腳本塊里添加HTML注釋是完全不需要的。
2.
這是另外一個(gè)經(jīng)常在js代碼塊里添加的錯(cuò)誤預(yù)防措施,他是在處理真正的XHTML文檔(“application/xhtml+xml” content-type)時(shí)為了防止代碼將形如<號(hào)解析為標(biāo)簽開始,所有在CDATA內(nèi)包含的內(nèi)容,都會(huì)被當(dāng)成文本處理。但是實(shí)際情況是,目前幾乎所有的網(wǎng)頁(yè)的content-type都是text/html,也就是說(shuō)它們不是嚴(yán)格意義上的xml文檔,而是只是text文本,所以這個(gè)錯(cuò)誤預(yù)防處理措施是完全沒(méi)有必要的,即使你確定要支持xml的文檔,也要視情況合理的運(yùn)用CDATA。
3.onclick=”…”, onmouseover=”“等等。
將事件屬性寫在HTML標(biāo)簽內(nèi)是一種很不明智的做法,降低了代碼的可維護(hù)性,同時(shí)污染了標(biāo)簽,如果將事件屬性通過(guò)JS動(dòng)態(tài)添加,不僅可以靈活控制,還可以利用JS客戶端緩存的優(yōu)勢(shì),讓這些事件屬性不必每次跟隨文檔請(qǐng)求。
4.onclick=”javascript:…”
這是一個(gè)有趣的javascript混亂,偽協(xié)議和內(nèi)在的事件處理程序可以組成高達(dá)10W多種多余的組合,事實(shí)是事件屬性內(nèi)部的內(nèi)容在解析后成為body的一個(gè)fucution,這個(gè)function然后會(huì)作為事件處理程序,所以javascript:在此成為一個(gè)無(wú)用的多余標(biāo)簽。
5.href=”javascript:void(0)”
繼續(xù)javascript:偽協(xié)議,有一個(gè)臭名昭著的就是javascript:void(0),他是用來(lái)避免默認(rèn)的錨點(diǎn)動(dòng)作的,它在JS無(wú)法正常解析或者出錯(cuò)時(shí)(disabled/not available/errors)會(huì)使得錨點(diǎn)完全不可用,理想的解決方案是在href里填寫正確的URL,然后用JS去動(dòng)態(tài)改寫,這樣即使在JS未執(zhí)行的情況下也不會(huì)出現(xiàn)錨點(diǎn)不可用的狀況。HREF =“#”是一個(gè)精簡(jiǎn)和更快的替代方案。
6. style=”…”
沒(méi)有什么本質(zhì)性的錯(cuò)誤,只是后期維護(hù)麻煩,另外移到外聯(lián)的CSS文件中可以緩存起來(lái)提高頁(yè)面執(zhí)行效率。
7.
script標(biāo)簽的另一個(gè)容易被誤解的屬性,charset在HTML4.01里的描述:請(qǐng)注意,charset屬性是指字符的 src屬性所指定的腳本編碼,它不涉及的腳本元素的內(nèi)容。(Note that the charset attribute refers to the character encoding of the script designated by the src attribute; it does not concern the content of the SCRIPT element.),也就是說(shuō)他只在外聯(lián)腳本的時(shí)候指定腳本文件的編碼格式。不推薦使用。
上面說(shuō)的都是一些錯(cuò)誤或者不推薦的用法,下面是一些可以合理忽略以清理標(biāo)記的屬性:
1.
HTML 4.01規(guī)定的默認(rèn)媒體是“screen”,但是經(jīng)過(guò)測(cè)試發(fā)現(xiàn)幾乎所有瀏覽器并未按照規(guī)定執(zhí)行,而是用“all”替代,如果你要使用media=”all”,那建議可以省略此屬性。
2.
form的默認(rèn)method是get,所以如果要使用get可以不用再指明。
3.
在HTML 4.01和HTML5草案里規(guī)定了input的默認(rèn)屬性為text,所以可以忽略。
4.
指定文件的字符編碼一直都引起極大的混亂,Content-type的優(yōu)先級(jí)并不比HTTP HEADER高,當(dāng)兩者都存在時(shí),請(qǐng)求頭更優(yōu)先,所以如果你能控制好服務(wù)器響應(yīng),并且設(shè)置好HEADER,那MATE就可以安全的忽略,除非頁(yè)面需要本地瀏覽的時(shí)候。