網頁加載速度是衡量一個網頁好壞的重要標準,網頁遺棄率隨網頁加載時間的增長而增長。聽說近一半的用戶但願網頁加載時間不超過2s,超過3s通常就放棄該網頁。時間就是生命,乾等着,誰願意無緣無故地+1s呀,因此今天來整理下具體如何加快網頁javascript
壓縮 HTML: HTML代碼壓縮,將註釋、空格和新行從生產文件中刪除。css
爲何:html
刪除全部沒必要要的空格、註釋和中斷行將減小HTML的大小,加快網站的頁面加載時間,並顯著減小用戶的下載時間。
怎麼作:前端
大多數框架都有插件用來壓縮網頁的體積。你可使用一組能夠自動完成工做的NPM模塊。
刪除沒必要要的註釋: 確保從您的網頁中刪除註釋。java
爲何:git
註釋對用戶來講是沒有用的,應該從生產環境文件中刪除。可能須要保留註釋的一種狀況是:保留遠端代碼庫(keep the origin for a library)。
怎麼作:github
大多數狀況下,可使用HTML minify插件刪除註釋。
刪除沒必要要的屬性: 像 type="text/javascript"
or type="text/css"
這樣的屬性應該被移除。web
<!-- Before HTML5 --> <script type="text/javascript"> // Javascript code </script> <!-- Today --> <script> // Javascript code </script>
爲何npm
類型屬性不是必需的,由於HTML5把text/css和text/javascript做爲默認值。沒用的代碼應在網站或應用程序中刪除,由於它們會使網頁體積增大。
怎麼作:瀏覽器
⁃ 確保全部link和script標記都沒有任何type屬性。
在JavaScript引用以前引用CSS標記: 確保在使用JavaScript代碼以前加載CSS。
爲何:
在引用JavaScript以前引用CSS能夠實現更好地並行下載,從而加快瀏覽器的渲染速度。
怎麼作:
確保 head 中的 link 和 style 始終位於 script 以前。
DNS預取: 一次 DNS 查詢時間大概在60-120ms之間或者更長,提早解析網頁中可能的網絡鏈接域名
<link rel="dns-prefetch" href="http://example.com/">
壓縮: 全部CSS文件都須要被壓縮,從生產文件中刪除註釋,空格和空行。
爲何:
縮小CSS文件後,內容加載速度更快,而且將更少的數據發送到客戶端,因此在生產中縮小CSS文件是很是重要,這對用戶是有益的,就像任何企業想要下降帶寬成本和下降資源。
怎麼作:
使用工具在構建或部署以前自動壓縮文件。
Concatenation: CSS文件合併(對於HTTP/2效果不是很大)。
<!-- 不推薦 --> <link rel="stylesheet" href="foo.css"/> <link rel="stylesheet" href="bar.css"/> <!-- 推薦 --> <link rel="stylesheet" href="foobar.css"/>
爲何:
若是你還在使用HTTP/1,那麼你就須要合併你的文件。不過在使用HTTP/2的狀況下不用這樣(效果待測試)。
怎麼作:
在構建或部署以前使用在線工具或者其餘插件來合併文件。
固然,要確保合併文件後項目能夠正常運行。
非阻塞: CSS文件須要非阻塞引入,以防止DOM花費更多時間才能渲染完成。
<link rel="preload" href="global.min.css" as="style" onload="this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="global.min.css"></noscript>
爲何:
CSS文件能夠阻止頁面加載並延遲頁面呈現。使用
preload
實際上能夠在瀏覽器開始顯示頁面內容以前加載CSS文件。
怎麼作:
須要添加rel
屬性並賦值preload
,並在<link>
元素上添加as=「style」
。
CSS類(class)的長度: class的長度會對HTML和CSS文件產生(輕微)影響。
爲何:
甚至性能影響也是有爭議的,項目的命名策略會對樣式表的可維護性有重大影響。若是使用BEM,在某些狀況下可能會寫出比所須要的類名更長的字符。重要的是要明智的選擇名字和命名空間。
怎麼作:
可能有些人更關注類名的長度,可是網站按組件進行劃分的話能夠幫助減小類名的數量和長度。
不用的CSS: 刪除未使用的CSS選擇器。
爲何:
刪除未使用的CSS選擇器能夠減少文件的大小,提升資源的加載速度。
怎麼作:
⚠️ 檢查要使用的CSS框架是否已包含reset/normalize代碼,可能不須要用到reset/normalize文件中的內容。
JS 壓縮: 全部JavaScript文件都要被壓縮,生產環境中刪除註釋、空格和空行(在HTTP/2仍然有效果)。
爲何:
刪除全部沒必要要的空格、註釋和空行將減小JavaScript文件的大小,並加快網站的頁面加載時間,提高用戶體驗。
怎麼作:
建議使用下面的工具在構建或部署以前自動縮小文件。
非阻塞JavaScript: 使用defer屬性或使用async來異步加載JavaScript文件。
<!-- Defer Attribute --> <script defer src="foo.js"> <!-- Async Attribute --> <script async src="foo.js">
爲何:
JavaScript阻止HTML文檔的正常解析,所以當解析器到達script標記時(特別是在<head>內),它會中止解析而且執行腳本。若是您的腳本位於頁面頂部,則強烈建議添加async
和defer
,但若是在</body>標記以前加載,沒有太大影響。可是,使用這些屬性來避免性能問題是一種很好的作法。
怎麼作:
添加async
(若是腳本不依賴於其餘腳本)或defer
(若是腳本依賴或依賴於異步腳本)做爲script腳本標記的屬性。
若是有小腳本,能夠在異步腳本上方使用內聯腳本。
使用 tree shaking 技術減小 js 大小: 經過構建工具分析 JavaScript 代碼並移除生產環境中用不到的 js 模塊或方法
Reduce JavaScript Payloads with Tree Shaking](https://developers.google.com...
使用 code splitting 分包加載 js: 經過分包加載,減小首次加載所需時間
怎麼作:
Vendor splitting 根據庫文件拆分模塊,例如 React 或 lodash 單獨打包成一個文件
Entry point splitting 根據入口拆分模塊,例如經過多頁應用入口或者單頁應用路由進行拆分
Dynamic splitting 根據動態加載拆分模塊,使用動態加載語法import()
,實現模塊按需加載
圖像優化: 在保證壓縮後的圖片符合產品要求的狀況下將圖像進行優化。
爲何:
優化的圖像在瀏覽器中加載速度更快,消耗的數據更少。
怎麼作:
儘量嘗試使用CSS3效果(而不是用小圖像替代)
儘量使用字體圖片
使用 SVG
使用編譯工具並指定85如下的級別壓縮。
圖像格式: 適當選擇圖像格式。
爲何:
確保圖片不會減慢網站速度
怎麼作:
使用 Lighthouse識別哪些圖像可使用下一代圖片格式(如JPEG 2000m JPEG XR或WebP)。
比較不一樣的格式,有時使用PNG8比PNG16好,有時候不是。
使用矢量圖像 VS 柵格/位圖: 能夠的話,推薦使用矢量圖像而不是位圖圖像。
爲何:
矢量圖像(SVG)每每比圖像小,具備響應性和完美縮放功能。並且這些圖像能夠經過CSS進行動畫和修改操做。
圖像尺寸: 若是已知最終渲染圖像大小,請在<img>上設置寬度和高度屬性。
爲何:
若是設置了高度和寬度,則在加載頁面時會保留圖像所需的空間。若是沒有這些屬性,瀏覽器就不知道圖像的大小,也沒法爲其保留適當的空間,致使頁面佈局在加載期間發生變化。
避免使用Base64圖像: 你能夠將微小圖像轉換爲base64,但實際上並非最佳實踐。
懶加載: 圖像懶加載(始終提供noscript做爲後備方案)。
爲何:
它能改善當前頁面的響應時間,避免加載一些用戶可能不須要或沒必要要的圖像。
怎麼作:
使用 Lighthouse能夠識別屏幕外的圖像數量。
使用懶加載圖像的JavaScript插件。
響應式圖像: 確保提供接近設備顯示尺寸的圖像。
爲何:
小型設備不須要比視口大的圖像。建議在不一樣尺寸上使用一個圖像的多個版本。
怎麼作:
爲不一樣的設備設置不一樣大小的圖像。
使用srcset和picture爲每一個圖像提供多種變體(variants)。
* 📖 [Responsive images - Learn web development | MDN](https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images)
頁面大小 < 1500 KB: (理想狀況 < 500 KB) 儘量減小頁面和資源的大小。
爲何:
理想狀況下,應該嘗試讓頁面大小<500 KB,但Web頁面大小中位數大約爲1500 KB(即便在移動設備上)。根據你的目標用戶、鏈接速度、設備,儘量減小頁面大小以儘量得到最佳用戶體驗很是重要。
怎麼作:
前端性能清單中的全部規則將幫助你儘量地減小資源和代碼。
Cookie 大小: 若是您使用cookie,請確保每一個cookie不超過4096字節,而且一個域名下不超過20個cookie。
爲何:
cookie存在於HTTP頭中,在Web服務器和瀏覽器之間交換。保持cookie的大小盡量低是很是重要的,以儘可能減小對用戶響應時間的影響。
怎麼作:
消除沒必要要的cookie
使用CDN提供靜態文件: 使用CDN能夠更快地在全球範圍內獲取到你的靜態文件。
啓用GZIP壓縮
以上清單僅爲節選,來源 https://github.com/w3cay/Fron...
原文連接: Web加載速度優化清單-安望雲海