如何優化網站的加載速度

優化網站加載速度方式分類

  • 減少http請求
  • 提升http加載速度
    • 使用CDN 內容分發網絡
    • TCP/IP 、HTTP優化提升http速度
  • 減小網站加載資源的大小
  • 使用緩存
  • 代碼優化
    • style 放置到頭部
    • script 放置到body底部
    • 減少使用內連style標簽、script標簽
  • 用戶體驗優化

減少http請求

減少http請求是優化提高網站加載速度最核心指導方針,因為網絡的不確定性導致網址加載速度不可控,每添加一個http請求,就增加一個不確定性,特別是核心的http請求,任意一個http請求都可能導致整個網站的奔潰。加上如今用戶設備的升級、性能的提升,代碼優化并不是最需要考慮,代碼執行速度往往不是最影響網站加載一部分。

網站加載速度優化,考慮資源最小加載規則,非必要資源不加載或者延遲加載,減少http請求。然后再對這些最小必要的資源進行優化減小文件體積或者提高加載速度。 能少發就少發請求,去掉不必要的資源,任何請求都不如沒有請求快。

減少http方式有如下幾種方式:

  • icon圖片使用雪碧圖,或者使用字體圖標
  • webpack代碼合并
  • 小圖片轉base64嵌入到html文件中。

注意:base64編碼會導致文件增大33%,并會不緩存,img src圖片是會緩存的,當文件需要重復使用時,建議使用src加載,而不是base64減少http請求

  • 異步加載,非必要資源不要一次性加載
  • 可以考慮把“穩定的核心”,比如框架和庫,轉移到獨立的包中,利用緩存(可達到連請求都不發送的理想狀態)。
  • 接口合并,能合并的接口請求后端改邏輯合并請求,堅決拒絕前端循環發送http請求加載數據。
  • 項目啟動服務端渲染,vue項目服務端渲染,加快首屏渲染速度。理想狀態,一個http請求就能加載渲染整個網站

提升http加載速度

提升http速度核心在與網絡優化,TCP/IP 優化提升網站加載速度,這就需要對http協議,TCP/IP協議有一定的了解。措施如下:使用CDN 內容分發網絡、TCP/IP 、HTTP優化提升http速度。

使用CDN 內容分發網絡

  • 靜態資源使用CDN
  • 可選擇使用阿里云OSS服務,節省帶寬
  • 不要使用不穩定的CDN,例如直接從第三方庫官網復制CDN連接,往往不穩定,不可控,推薦oss

TCP/IP 、HTTP優化提升http速度

  • 重用TCP連接 http1.0 升級到 http1.1 或 http1.0 也可配置connection:keep-alive 啟動持久連接
    • request和response中同時加上connection:keep-alive請求頭。瀏覽器會自動加上該請求頭。
  • 避免HTTP重定向,HTTP 重定向極其耗時,特別是把客戶端定向到一個完全不同的域名的情況下,還會導致額外的 DNS 查詢、TCP 連接延遲,等等
  • 項目升級到 HTTP 2.0 以提升性能
  • 利用HTTP管道, http請求并行發送
  • 減少http中cookie的大小,非必要不傳輸cookie
  • 不要CORS跨域,使用CORS跨域會導致多一次options請求, script src等靜態資源不影響,但是接口跨域會導致多一個options請求,如果無法避免跨域,可選擇配置中加長CORS的保持時間。
  • 合理選擇XHR、SSE(EventSource)、WebSockets、WebRTC。
  • 采用域名分區,如果一次需要加載很多資源,而瀏覽器http請求有并發上線,以前是可以并發6個。這種情況可以采用多個域名來繞過并發上線限制。
  • 提升帶寬大小,但帶寬大小并不少越大越快,只有當訪問量達到一定數量時,才需要盡可能提升帶寬。一般個人網站1M、2M帶寬就夠用了。據統計5M帶寬能滿足大部分網站需求。大于5M后,帶寬的利用率并不理想。并且帶寬的費用還高。

減小網站加載資源的大小

減小http請求資源的大小的核心在于對文件進行壓縮,或者在可達到相同的效果中選擇合適的資源(例如:圖片中不需要透明度時,選擇使用jpg或jpeg)

  • 使用Gzip壓縮,所有文本資源都應該使用 Gzip 壓縮,然后再在客戶端與服務器間傳輸。一般來說,Gzip 可以減少 60%~80% 的文件大小,也是一個相對簡單(只要在服務器上配置一個選項),但優化效果較好的舉措。一般在服務器中配置壓縮,例如nginx啟動壓縮。
  • 使用webpack 壓縮插件壓縮代碼,壓縮過程中去除不必要代碼,例如:console日志,注釋代碼等
  • 圖片壓縮,不要傳輸大圖片。圖片進行壓縮,使用webp圖片等,在可達到相同效果時盡可能使用壓縮率大的突破類型。選擇正確的圖片格式,不需要透明度的圖片不要使用png。
  • 壓縮好處節省帶寬

使用緩存

  • 瀏覽器緩存Cache-Control 首部用于指定緩存時間, max-age
    • Cache-Control: max-age=1000; 不同于Expires,max-age 控制的是時間有效區間,例如配置有效期為一天或者一個月;注意http1.0不支持Cache-Control;當同時指定max-age和Expires 時,max-age優先級高,并重寫Expires。
  • Last-Modified 、 ETag 、Expires 首部提供驗證機制
    • Last-Modified, 如果沒有改變,http會響應狀態嗎304 NotModified ,response body 響應體不回返回
    • Expires: response header 中Expires 明確指出瀏覽器緩存該資源,同時指定過期時間。加載的資源未過期,則瀏覽器不會進行http請求,直接使用緩存中的資源。需要注意客戶端和服務端時間同步問題,每次調整都需要在服務端配置。
  • nginx緩存
  • 后端服務緩存
  • H5緩存,localStorage,sessionStorage
  • 前端數據庫緩存 indexDB
  • 最大限度利用瀏覽器緩存,不經常變動的資源(例如js庫)合并到一個文件中

代碼層面優化

  • 優先加載css資源鏈接,link style 標簽放到頂部
  • css 文件中不使用@import,@import會延遲css文件延遲加載導致白屏。如果有webpack配置則不影響
  • 把首次繪制所需的 CSS 單獨拿出來,優先于其他 CSS 文件發送;
  • script標簽放置到頁面底部,按需加載
  • 非關鍵性 JavaScript 應該推遲,以避免阻塞 DOM 和 CSSOM 構建;
  • 不經常變動的資源(例如js庫)合并到一個文件中,利于瀏覽器緩存
  • Doctype 文檔聲明使用標準模式,<!DOCTYPE html>
  • js加載過程禁用document.write,阻塞頁面加載
  • 公共組件提取
  • 公共方法提取
  • 代碼審核
  • 打包優化
    • happyPack 工具,多線程提升打包速度
    • 生產環境取消 source-map 打包,提升打包速度、源碼安全
    • 合理的 exclude 和 include 配置
    • 處理緩存,小需求的變動,不影響其他文件打包和內容,提升網站加載速度
  • 項目文檔整理(需求文檔,組件文檔,公共方法文檔,交接文檔,技術文檔)

用戶體驗優化

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

推薦閱讀更多精彩內容