前端性能優化指南

来源:https://www.cnblogs.com/jing-tian/archive/2019/09/09/10995601.html
-Advertisement-
Play Games

前端需要性能優化麽? 性能優化一直以來都是前端工程領域中的一個重要部分。很多資料表明,網站應用的性能優化對於提高用戶留存、轉化率等都有積極影響。可以理解為,提升你的網站性能,就是提升你的業務數據(甚至是業務收入)。 性能優化廣義上包含前端優化和後端優化。後端優化的關註點更多的時候是在增加資源利用率、 ...


前端需要性能優化麽?

性能優化一直以來都是前端工程領域中的一個重要部分。很多資料表明,網站應用的性能優化對於提高用戶留存、轉化率等都有積極影響。可以理解為,提升你的網站性能,就是提升你的業務數據(甚至是業務收入)。

性能優化廣義上包含前端優化和後端優化。後端優化的關註點更多的時候是在增加資源利用率、降低資源成本以及提高穩定性上。相較於後端,前端的性能優化會更直接與用戶的體驗掛鉤。從用戶體驗側來說,前端服務 5s 的載入時間優化縮減 80%(1s) 與後端服務 50ms 的響應優化縮減 80%(10ms) 相比,用戶的體驗提升會更大。因此很多時候,與體驗相關的性能的瓶頸會出現在前端。

我和一些同學接觸的過程中,發現作為前端工程師,大家其實都具備一定的性能優化意識,同時也有自己的優化“武器庫”,例如懶載入、資源合併、避免 reflow 等等。雖然大家對性能優化都有自己的思路,不過大多是分散在某幾個點,較難形成一個完整的體系。業界也有很多優質的資料,例如雅虎的性能優化 35 條,但是性能優化作為一個系統性工程,大家想要系統性地去學習並不容易。

一、html文檔結構標簽語義化

1、首先什麼是語義化呢?

語義化是指用合理HTML標記以及其特有的屬性去格式化文檔內容。機器在需要更少的人類干預的情況下能夠研究和收集信息,讓網頁能夠被機器理解,最終讓人類受益。即用正確的標簽做正確的事

2、語義化的好處或者說存在的意義

① 有利於搜索引擎抓取

② 結構清晰的HTML在團隊合作中的作用:代碼可讀、便於維護、提高開發效率、快速達成共識、利於二次開發。

③ 有利於盲人屏幕閱讀器

二、css、js文件數量及大小

優化一般對於css、js是建議使用外聯式來進行導入。我們可以對css、js做相應的規劃也可以減少css、js的個數以減少http請求。同時也要註重減少重覆代碼,註重代碼重覆利用,以達到用最少的代碼乾最多的事。同時當項目要投入上線使用的時候,可以對css、js文件進行壓縮,文件的減小可以加速文件的鏈接導入,以便加速網頁的載入渲染。

通過線上網站對html,css,js文件壓縮可參考資料前端性能優化(一)-- 文件的壓縮與合併

可通過使用webpack,gulp等工具對Js文件進行合併。

三、圖片的數量和大小

多個伺服器請求會對站點的性能產生顯著的影響。對一張圖片進行導入又是一個http請求,因此我們應該減少圖片的導入數量以便減少http請求。此處,我們必須提到一個名詞“css精靈spirit。css精靈是指包含多個不同的圖標、按鈕或圖形的單個圖像。因此我們可以把多張背景圖片合併為一張然後對背景圖片進行相應的定位。同時使用PNG8格式的圖片相對於GIF來說比較少。而對於內容圖片,可以對其進行適當的壓縮,可以加快文檔內容載入,或者如果是需要用戶下載的圖片,小的圖片可以加快用戶下載的速度。

使用較為廣泛的web圖片格式有:JPEG/JPG、PNG、WEBP、Base64、SVG

1.JPEG/JPG

特點是有損壓縮,體積小,載入快,不支持透明。

使用場景:JPG適合用於呈現熱菜豐富的圖片,在日常的開發中,JPG圖片經常作為大的背景圖、輪播圖或是Banner圖。比如兩大電商網站對大圖片的處理,就是對JPG圖片應用場景的最佳寫照。用JPG來呈現大圖片,既可以保留圖片的質量,又不會擔心圖片的體積,是一種比較廣泛使用的方案。

缺點:在處理一些矢量圖形和logo等這些線條感很強、顏色對比強烈的圖片時,認為壓縮就導致圖片模糊非常明顯。另外,JPG圖像不支持透明度處理,透明圖片只能用PNG來呈現了。

2.PNG-8和PNG-24

特點是無損壓縮、質量高、體積大、支持透明

優點:無損壓縮的高保真圖片格式。8和24都是二進位數的位數,8位的PNG支持256中顏色,24位的PNG可以支持1600萬種顏色。在不考慮文件大小隻在乎最佳的顯示效果時,推薦使用PNG-24。但是在適合使用PNG時會優先選擇PNG-8

應用場景:主要用PNG來呈現小的LOGO、顏色簡單對比強烈的圖片或是背景。

3.SVG

特點是文本文件,體積小,不失真,相容性好

優點:SVG是一種基於XML語法的圖像格式。SVG對圖像的處理不是基於像素,而是基於對圖像的形狀描述。

和JPG、PNG相比較,SVG文件體積更小,可壓縮性更強。SVG作為矢量圖最大的優點在於圖片可以無限放大還不失真,一張SVG圖片可以適配多種解析度。另外SVG是文本文件,可以像寫代碼一樣定義SVG,放在HTML中稱為DOM的一部分。也可以把對圖像的描述寫入以.svg為尾碼的文件中,在img標簽中引入即可。<img src="文件名.svg" alt="">

4.WebP

優點:WebP是一款比JPG、PNG等在壓縮方面更加優越的圖片格式,同時也不會影響其圖片質量,使用該格式時最好將同名文件格式化,當檢測瀏覽器不相容時自動切換jpg格式

缺點:是一個相對較新的技術,所以對於目前市面上的瀏覽器能否完美的相容,其可用和實用性就變得很現實了,再好的東西如果沒有好的相容性,也是非常難以普及和被廣泛使用的

5.Base64

優點:減少請求,加快首屏數據顯示。對於jpg格式的圖片,每一個圖片相當於一次http請求,圖片多了的話,伺服器耗性能比較嚴重。而將jpg轉化成base64格式的圖片,則極大地減少了請求數,因為Base是文本格式。

缺點:base64格式圖片比原圖大,占用更多存儲空間,同時,瀏覽器不會對該資源緩存。

使用方法:background:url(data:image/png;base64,{img_data})

應用場景:一般對於小於10KB大小的圖片進行base64轉碼。

 

至於動態圖有GIF與APNG:後者APNG這東西是mozilla搞出來的, 它是24位的,而且也是動圖,可以容納1680萬種顏色,也是為了取代GIF,但是....也就火狐支持,IE10和chrome,safari全部不行, 如果說gif圖片是卡片機的話, APNG就是單反, 測試瀏覽器是否支持apng格式

四、有效性驗證

除了根據語義加標記之外,HTML文檔還需要用有效的代碼來編寫,如果代碼是無效的,瀏覽器會嘗試解釋標記本身,有時候會產生錯誤的結果。更糟的是,如果發送具有正確的MIME類型的XHTML文檔,理解XML的瀏覽器將不顯示無效的頁面。因為瀏覽器需要知道要使用什麼DTD(文檔類型定義)才能正確地處理頁面,所以對頁面進行有效性驗證要求有DOCTYPE聲明。

有效性驗證工具徑:
① W3C驗證器(bookmarklet),這是一小段可以存儲在瀏覽器的書簽或收藏夾中的Javascript。單擊這個書簽就會觸發Javascript動作。

②可以訪問http://validator.w3.org/,通過輸入自己的URL來對自己的站點來進行線上驗證。

③使用firefox瀏覽器的可以下載插件Firefox Web Developer Extension

五、雅虎的Web優化最佳實踐

1、內容優化

① 儘量減少HTTP請求:常見方法包括合併多個CSS文件和JavaScript文件,利用CSS Sprites整合圖像,Image map(圖像中不同的區域設置不同的鏈接),內聯圖象(使用 data: URL scheme 在實際的頁面嵌入圖像數據)等。
② 減少DNS查找,一般dns查找需要花費20-120ms,Windows的DNS緩存,可以通過ipconfig /displaydns 這個命令來查看。詳細資料http://www.chinaz.com/web/2015/0417/399728.shtml
③ 避免重定向
④ 使Ajax可緩存
⑤ 延遲載入組件:考慮哪些內容是頁面呈現時所必需首先載入的、哪些內容和結構可以稍後再載入,根據這個優先順序進行設定。
⑥ 預載入組件:預載入是在瀏覽器空閑時請求將來可能會用到的頁面內容(如圖像、樣式表和腳本)。當用戶要訪問下一個頁面時,頁面中的內容大部分已經載入到緩存中了,因此可以大大改善訪問速度。
⑦ 減少DOM元素數量:頁面中存在大量DOM 元素,會導致JavaScript遍歷DOM的效率變慢。
⑧根據功能變數名稱劃分頁面內容:把頁面內容劃分成若幹部分可以使你最大限度地實現平行下載。但要確保你使用的功能變數名稱數量在2個到4個之間(否則與第2條衝突)。
⑨ 最小化iframe的數量:iframes 提供了一個簡單的方式把一個網站的內容嵌入到另一個網站中。但其創建速度比其他包括JavaScript和CSS的DOM元素的創建慢了1-2個數量級。
⑩ 避免404:HTTP請求時間消耗是很大的,因此使用HTTP請求來獲得一個沒有用處的響應(例如404沒有找到頁面)是完全沒有必要的,它只會降低用戶體驗而不會有一點好處。

2、伺服器優化

① 使用內容分髮網絡(CDN):把你的網站內容分散到多個、處於不同地域位置的伺服器上可以加快下載速度。
添加Expires或Cache-Control信息頭:對於靜態內容,可設置文件頭過期時間Expires的值為“Never expire(永不過期)”;對於動態內容,可使用恰當的Cache-Control文件頭來幫助瀏覽器進行有條件的請求。
② Gzip壓縮
③ 設置ETag:ETags(Entity tags,實體標簽)是web伺服器和瀏覽器用於判斷瀏覽器緩存中的內容和伺服器中的原始內容是否匹配的一種機制。
④ 提前刷新緩衝區:當用戶請求一個頁面時,伺服器會花費200到500毫秒用於後臺組織HTML文件。在這期間,瀏覽器會一直空閑等待數據返回。在PHP中,可以使用flush()方法,它允許你把已經編譯的好的部分HTML響應文件先發送給瀏覽器,這時瀏覽器就會可以下載文件中的內容(腳本等)而後臺同⑤時處理剩餘的HTML頁面。
⑥ 對Ajax請求使用GET方法:當使用XMLHttpRequest時,瀏覽器中的POST方法會首先發送文件頭,然後才發送數據。因此使用GET最為恰當。
⑦ 避免空的圖像src

3、Cookie優化

① 減小cookie大小:去除不必要的coockie,並使coockie體積儘量小以減少對用戶響應的影響
② 針對Web組件使用功能變數名稱無關的Cookie:對靜態組件的Cookie讀取是一種浪費,使用另一個無Cookie的功能變數名稱來存放靜態組件是一個好方法,或者也可以在Cookie中只存放帶www的功能變數名稱。

4、CSS優化

① 將CSS代碼放在HTML頁面的頂部
② 避免使用CSS表達式:CSS表達式在執行時候的運算量非常大,會對頁面性能產生大的影響
③ 使用<link>來代替@import
④ 避免使用Filters:IE獨有屬性AlphaImageLoader用於修正IE 7以下版本中PNG圖片的半透明效果,但它的問題在於瀏覽器載入圖片時它會終止內容的呈現並且凍結瀏覽器。

5、JavaScript優化

① 將JavaScript腳本放在頁面的底部
② 將JavaScript和CSS作為外部文件來引用:在實際應用中使用外部文件可以提高頁面速度,因為JavaScript和CSS文件都能在瀏覽器中產生緩存。
③ 縮小JavaScript和CSS
④ 刪除重覆的腳本
⑤ 最小化DOM的訪問:使用JavaScript訪問DOM元素比較慢
⑥ 開發智能的事件處理程式

6、圖像優化

① 優化圖片大小
② 通過CSS Sprites優化圖片
③ 不要在HTML中使用縮放圖片
④ favicon.ico要小而且可緩存

7、針對移動優化

① 保持組件大小在25KB以下:主要是因為iPhone不能緩存大於25K的文件(註意這裡指的是解壓縮後的大小)。
② 將組件打包成為一個複合文檔:把頁面內容打包成複合文本就如同帶有多附件的Email,它能夠使你在一個HTTP請求中獲取多個組件。

 

 參考資料:

https://www.cnblogs.com/diligenceday/p/4472035.html

https://developer.yahoo.com/performance/rules.html

https://github.com/creeperyang/blog/issues/1

https://developer.yahoo.com/performance/rules.html

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.在本地項目中基於NPM/YARN安裝第三方模塊 package.json 2.安裝在本地和全局的區別 3.NODE入門 NODE本身是基於CommonJS模塊規範設計的,所以模塊是NODE的組成 內置模塊:NODE天生提供給JS調取使用的 第三方模塊:別人寫好的,我們可以基於NPM安裝使用 自定 ...
  • 對於目前的圖片懶載入,我們一般採用的是通過第三方庫或懶載入庫來實現,但是該方式的顯著問題就是,必須按順序執行: 1、載入初始的 HTML 響應內容 2、載入懶載入庫 3、載入圖片 假如瀏覽器能直接支持懶載入,那是最好的,這一想法也不是不可能哦!從Chrome 75開始,我們可以通過切換兩個開關來手動 ...
  • 日常後臺迭代開發,需要在瀏覽器刷新時記錄下當前tab和翻頁數,用的elementUI。 其實數據記錄倒是挺簡單的,localstorage或者sessionstorage都行,但在組件生命周期鉤子func:created中設置pagination的current-page時,不生效。 嘗試過vm.$ ...
  • 對於jQuery的調用,我們一般都會傳入參數 一、前置(DOM對象和jQuery對象) 1. DOM對象, 關於這個,應該是前端的基礎知識了,在文檔對象模型中,每個部分都是節點。 2. jQuery對象 這個是指通過jQuery構造函數創建出來的對象,可以通過jQuery選擇器獲取到,並以類數組的形 ...
  • HTML介紹 Web服務本質 瀏覽器發請求 HTTP協議 服務端接收請求 服務端返迴響應 服務端把HTML文件內容發給瀏覽器 瀏覽器渲染頁面 HTML是什麼? 超文本標記語言(Hypertext Markup Language, HTML)是一種用於創建網頁的標記語言。 本質上是瀏覽器可識別的規則, ...
  • 這是一款集截屏(支持自定義尺寸)、屏幕錄影機、屏幕拾色器、屏幕放大鏡、屏幕標尺、PDF圖片轉換、圖片編輯等等諸多實用功能於一身的小工具, 完全免費,極限輕量化,軟體總體積僅1.63 MB . 鏈接: https://pan.baidu.com/s/15Mii0BiLcD3Pr2_OXAkAWw 提取 ...
  • 基於layui框架製作精美的省市區下拉框三級聯動菜單選擇, 支持三級聯動城市選擇,點擊提交獲取選中值代碼。 示例圖如下: 資源鏈接: https://pan.baidu.com/s/1s6l8iDBEP1UOt28O-5jVLg 提取碼: y4d3 標簽:三級聯動 省市區 選擇 中值 城市 下拉框 ...
  • 摘要: 很有意思的操作... 原文: "web頁面錄屏實現" 譯者:frontdog "Fundebug" 經授權轉載,版權歸原作者所有。 寫在前面的話 在看到評論後,突然意識到自己沒有提前說明,本文可以說是一篇調研學習文,是我自己感覺可行的一套方案,後續會去讀讀已經開源的一些類似的代碼庫,補足自己 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...