簡單介紹html的歷史、html文檔的結構,同時也拓展了其餘前端知識點,如樣式腳本的異步加載、頁面渲染原理及優化!
html誕生於1993年,應用最普遍的爲html4和xhtml,如今最新版本爲html5。html全稱超文本標記語言(英語:HyperText Markup Language),它是一種用於建立網頁的標準標記語言,頁面內能夠包含圖片、連接,甚至音樂、程序等非文字元素。若是頁面須要考慮兼容性(如需兼容至ie8),提出幾條具體建議:javascript
html控制結構,css控制樣式,js控制行爲,如何組織代碼結構?提升首屏渲染速度?進行seo優化?下述規範來自於網易NEC規範~
<!DOCTYPE html> <html> <head> <!--定義網頁編碼信息--> <meta charset="utf-8"/> <!--定義網頁標題--> <title>html基本介紹</title> <!--定義網頁信息,方便搜索引擎自動收集網站信息--> <!--定義網頁關鍵詞--> <meta name="keywords" content=""/> <!--定義網頁描述內容--> <meta name="description" content=""/> <!--/定義網頁信息,方便搜索引擎自動收集網站信息--> <!--優化網頁在移動設備上的顯示效果--> <meta name="viewport" content="width=device-width"/> <!--定義頁面2秒後跳轉指定連接。http-equiv還能夠對cache、cookie等進行控制!--> <meta http-equiv="refresh" content="2;URL=#"> <!--導入css樣式表--> <link rel="stylesheet" href="./css/01/style.css"/> <!--設置網頁的小圖標--> <link rel="shortcut icon" href="../source/img/favicon.ico"/> <link rel="apple-touch-icon" href="../source/img/touchicon.png"/> <!--設置css樣式--> <style> .g-doc { margin: 10px; padding: 10px; border: 1px solid #ddd; box-shadow: 1px 1px 5px #aaa; } </style> <!--設置或者導入js腳本--> <script> window.onload = function () { alert('我是js腳本!') } </script> </head> <body> <!--主要編輯區域--> <div class="g-doc"> <p>hello world!</p> </div> <!--/主要編輯區域--> <!--導入外部js腳本--> <script src="./js/01/index.js"></script> </body> </html>
瀏覽器發送請求獲取嵌入在 HTML 中的資源(如圖片、音頻、視頻、CSS、JS等等)
靜態文件會容許瀏覽器對其進行緩存。有的文件可能會不須要與服務器通信,而從緩存中直接讀取css
渲染引擎首先經過網絡得到所請求文檔的內容,接着對html文檔進行渲染,渲染流程爲:html
解析html以構建dom樹和css樹 -> 構建render樹(dom和css整合生成) -> 佈局render樹(根據信息計算元素的位置) -> 繪製render樹(在屏幕繪製)
瞭解渲染流程,首先理解幾個基本概念:前端
注意:上述過程是逐步完成的,可是渲染引擎會盡量早的將內容呈現到屏幕!html5
重排和重繪會迫使瀏覽器從新計算刷新頁面,消耗計算機性能!良好的設計必須減小重排和重繪!具體規則以下:java
display:none會觸發重排!visibility: hidden會觸發重繪! 改變元素定位方式position、浮動float、盒模型等均可能觸發重排! 改變元素的背景色等會觸發重繪!
優化的重點在於,如何減小重排重繪對頁面的影響,爲此有如下幾點建議ajax
減小修改html結構的次數,如文檔片斷、innerHtml等技術,對html只修改一次! 避免在設置元素css屬性後當即獲取元素信息(如經過getComputedStyle獲取寬高等信息),避免瀏覽器強制渲染頁面!(現代瀏覽器對重排重繪進行了優化!)
經過link加載外部樣式文件,css文件會並行下載,等待解析!具體規則以下:segmentfault
外部樣式文件不會阻塞dom的解析,可是會阻塞頁面渲染! 外部樣式文件不會阻塞外部腳本的加載,但會阻塞外部腳本的執行(外部樣式必須加載完成後js纔會執行!)。
!(javascript)[https://image-static.segmentf...]瀏覽器
經過script加載外部腳本文件,會阻塞html解析和渲染,等待js執行完後接着渲染!具體規則以下:緩存
外部腳本文件默認會阻塞html解析! async屬性,指外部腳本文件異步加載,加載完後當即執行! defer屬性,指外部腳本文件異步加載,加載完後等待html解析完後執行(DOMContentLoaded 事件以前)
傳統的前端優化要點,具體能夠參考「雅虎軍規35條」
經過在\<body/>以前加載外部樣式或腳本文件!(此時頁面所有解析完成!) 經過動態js代碼加載外部文件,如在window.onload事件中調用loadScript函數! 重要css樣式或js代碼能夠直接卸載html文檔當中!
瀏覽器緩存的分類?
如何設置緩存?
經過設置http頭部信息,如:Expires(強緩存)、Cache-control(強緩存)、Last-Modified/If-Modified-Since(協商緩存)、Etag/If-None-Match(協商緩存)
本地無緩存的流程:
本地有緩存的流程:
瀏覽器緩存行爲還與用戶行爲有關?