你不可不知的HTML優(yōu)化技巧

作者:葡萄城控件技術(shù)團隊
原文地址:http://www.cnblogs.com/powertoolsteam/p/5125229.html

如何提升Web頁面的性能,很多開發(fā)人員從多個方面來下手如JavaScript、圖像優(yōu)化、服務(wù)器配置,文件壓縮或是調(diào)整CSS。

很顯然 HTML 已經(jīng)達到了一個瓶頸,盡管它是開發(fā)Web 界面必備的核心語言。HTML頁面的負載也是越來越重。大多數(shù)頁面平均需要40K的空間,像一些大型網(wǎng)站會包含數(shù)以千計的 HTML 元素,頁面Size會更大。

如何有效的降低 HTML 代碼的復(fù)雜度和頁面元素的數(shù)量,本文主要解決了這個問題,從多個方面介紹了如何編寫簡練,清晰的 HTML 代碼,能夠使得頁面加載更為迅速,且能在多種設(shè)備中運行良好。

在設(shè)計和開發(fā)過程中需要遵循以下原則:

  • 結(jié)構(gòu)分離:使用 HTML 增加結(jié)構(gòu),而不是樣式內(nèi)容;
  • 保持整潔:為工作流添加代碼驗證工具;使用工具或樣式向?qū)ЬS護代碼結(jié)構(gòu)和格式;
  • 學(xué)習(xí)新語言:獲取元素結(jié)構(gòu)和語義標(biāo)記;
  • 確??稍L問: 使用ARIA 屬性和Fallback 屬性等;
  • 測試: 使網(wǎng)站在多種設(shè)備中能夠良好運行,可使用emulators和性能工具。

HTML,CSS 和JavaScript三者的關(guān)系

HTML 是用于調(diào)整頁面結(jié)構(gòu)和內(nèi)容的標(biāo)記語言。HTML 不能用于修飾樣式內(nèi)容,也不能在頭標(biāo)簽中輸入文本內(nèi)容,使代碼變得冗長和復(fù)雜,相反使用CSS 來修飾布局元素和外觀比較合適。HTML元素默認的外觀是由瀏覽器默認的樣式表定義的,如在Chrome中h1標(biāo)簽元素會渲染成32px的Times 粗體。

三條通用設(shè)計規(guī)則:

  1. 使用HTML 來構(gòu)造頁面結(jié)構(gòu),CSS修飾頁面呈現(xiàn),JavaScript實現(xiàn)頁面功能。CSS ZenGarden 很好地展示了行為分離。
  2. 如果能用CSS或JavaScript實現(xiàn)就少用HTML代碼。
  3. 將CSS和JavaScript文件與HTML 分開存放。這可有助于緩存和調(diào)試。

文檔結(jié)構(gòu)方面也可以做優(yōu)化,如下:

  • 使用HTML5 文檔類型,以下是空文件:
<!DOCTYPE html>
<html>

<head>
 <title>Recipes: pesto</title>
</head>

<body>

  <h1>Pesto</h1>

  <p>Pesto is good!</p>

</body>
</html>

在文檔起始位置引用CSS文件,如下:

<head>
  <title>My pesto recipe</title>

  <link rel="stylesheet" href="/css/global.css">
  <link rel="stylesheet" href="css/local.css">

</head>

使用這兩種方法,瀏覽器會在解析HTML代碼之前將CSS信息準備好。因此有助于提升頁面加載性能。

在頁面底部body結(jié)束標(biāo)簽之前輸入JavaScript代碼,這樣有助于提升頁面加載的速度,因為瀏覽器在解析JavaScript代碼之前將頁面加載完成,使用JavaScript會對頁面元素產(chǎn)生積極的影響。

<body>

  ...

  <script src="/js/global.js">
  <script src="js/local.js">

</body>

使用Deferasync屬性,腳本元素具有async 屬性無法保證會按順序執(zhí)行。

可在JavaScript代碼中添加Handlers。千萬別加到HTML內(nèi)聯(lián)代碼中,比如下面的代碼則容易導(dǎo)致錯誤且不易于維護:

index.html:

<head>

  ...

  <script src="js/local.js">

</head>

<body onload="init()">

  ...

  <button onclick="handleFoo()">Foo</button>

  ...

</body>

下面的寫法比較好:

index.html:

<head>

  ...

</head>

<body>

  ...

  <button id="foo">Foo</button>

  ...

  <script src="js/local.js">

</body>

js/local.js:

init();
var fooButton =
    document.querySelector('#foo');
fooButton.onclick = handleFoo();

驗證

優(yōu)化網(wǎng)頁的一種方法就是瀏覽器可處理非法的HTML 代碼。合法的HTML代碼很容易調(diào)試,且占內(nèi)存少,耗費資源少,易于解析和渲染運行起來更快。非法的HTML代碼讓實現(xiàn)響應(yīng)式設(shè)計變得異常艱難。

當(dāng)使用模板時,合法的HTML代碼顯得異常重要,經(jīng)常會發(fā)生模板單獨運行良好,當(dāng)與其他模塊集成時就報各種各樣的錯誤,因此一定要保證HTML代碼的質(zhì)量,可采取以下措施:

  • 在工作流中添加驗證功能:使用驗證插件如HTMLHint或SublineLinter幫助你檢測代碼錯誤。
  • 使用HTML5文檔類型
  • 確保HTML的層次結(jié)構(gòu)易于維護,要避免元素嵌套處于左開狀態(tài)。
  • 保證添加各元素的結(jié)束標(biāo)簽。
  • 刪除不必要的代碼 ;沒有必要為自關(guān)閉的元素添加結(jié)束標(biāo)簽;Boolean 屬性不需要賦值,如果存在則為True;

代碼格式

格式一致性使得HTML代碼易于閱讀,理解,優(yōu)化,調(diào)試。

語義標(biāo)記

語義指意義相關(guān)的事物,HTML 可從頁面內(nèi)容中看出語義:元素和屬性的命名一定程度上表達了內(nèi)容的角色和功能。HTML5 引入了新的語義元素,如<header>,<footer><nav>。

選擇合適的元素來編寫代碼可保證代碼的易讀性:

  • 使用<h1>(<h2>,<h3>…)表示標(biāo)題,<ul><ol>實現(xiàn)列表;
  • 注意使用<article>標(biāo)簽之前應(yīng)添加<h1>標(biāo)簽;
  • 選擇合適的HTML5語義元素如<header><footer>,<nav><aside>;
  • 使用<p>描述Body 文本,HTML5 語義元素可以形成內(nèi)容,反之不成立。
  • 使用<em><strong>標(biāo)簽替代<i><b>標(biāo)簽。
  • 使用<label>元素,輸入類型,占位符及其他屬性來強制驗證。
  • 將文本和元素混合,并作為另一元素的子元素,會導(dǎo)致布局錯誤,

例如:

<div>Name: <input type="text" id="name"></div>

換種寫法會更好:

   <div>
       <label for="name">Name:</label><input type="text" id="name">
   </div>

布局

要提高HTML代碼的性能,要遵循HTML 代碼以實現(xiàn)功能和為目標(biāo),而不是樣式。

  • 使用<p>元素修飾文本,而不是布局;默認<p>是自動提供邊緣,而且其他樣式也是瀏覽器默認提供的;
  • 避免使用<br>分行,可以使用block元素或CSS顯示屬性來代替;
  • 避免使用<hr>來添加水平線,可使用CSS的border-bottom 來代替;
  • 不到關(guān)鍵時刻不要使用div標(biāo)簽;
  • 盡量少用Tables來布局;
  • 可以多使用Flex Box;
  • 使用CSS 來調(diào)整邊距等。

CSS

雖然本文講解的是如何優(yōu)化HTML,下面介紹了一些使用CSS的基本技能:

  • 避免內(nèi)聯(lián)CSS;
  • 最多使用ID類 一次;
  • 當(dāng)涉及多個元素時,可使用Class來實現(xiàn)。

以上就是本文介紹的優(yōu)化HTML代碼的技巧,一個高質(zhì)量高性能的網(wǎng)站,往往取決于對細節(jié)的處理,因此我們在日常開發(fā)中,能夠考慮到用戶體驗,后期維護等方面,則會產(chǎn)生更高效的開發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J的外補...
    _Yfling閱讀 13,776評論 1 92
  • 1. 瀏覽器頁面有哪三層構(gòu)成,分別是什么,作用是什么? 構(gòu)成:結(jié)構(gòu)層、表示層、行為層分別是:HTML、CSS、Ja...
    程序猿人王小賤閱讀 1,888評論 1 11
  • http://www.imooc.com/article/4307
    boriszhang閱讀 103評論 0 0
  • 一、用三十天去嘗試新事物 這個視頻我聽行動派的琦琦也介紹 了,三十天足夠時間讓我們?nèi)L試一些新事物,可以發(fā)現(xiàn)自己到...
    幻想家Melon閱讀 160評論 0 1
  • 總有人你不會喜歡, 總有人你會討厭他, 不知道,是我們自己的問題還是別人的問題。 別人做的,有不會喜歡的。 別人做...
    七條鯨閱讀 231評論 0 0