主頁 > 企業開發 > 現代WEB前端的性能優化

現代WEB前端的性能優化

2020-10-13 02:21:41 企業開發

現代WEB前端的性能優化

 

前言:這只是一份學習筆記,

 

什么是WEB前端

 

潛在的優化點:

DNS是否可以通過快取減少DNS查詢時間?

網路請求的程序走最近的網路環境?

相同的靜態資源是否可以快取?

能否減少http請求的大小?

減少http請求數

服務端渲染

 

涉及層面

網路層面

構建層面

服務端層面

瀏覽器渲染層面

 

基礎優化:圖片的編碼原理、選擇圖片的格式、資源的合并與壓縮,

進階優化:瀏覽器渲染層面的優化、重繪與回流層面的優化、瀏覽器存盤的選擇與使用、瀏覽器端結合服務端的快取機制,

結合服務端的優化:基于nodejs的Vue-SSR解決首屏渲染的問題,

 

知識點

資源的合并與壓縮

目的:減少http請求數量、減少請求資源大小、減少帶寬消費,

原理:通過一個入口檔案(依賴的頂層),分析所有依賴,得到依賴樹,最后按照依賴樹,對檔案進行壓縮、混淆、合并、語法轉換,

 

a)  html壓縮

在前端的源代碼里,有些東西,只在代碼里有意義,但是對于瀏覽器卻毫無意義的,

例如:代碼對齊的回車、空格、tab,代碼注釋,

這些東西在發布的時候可以去掉,

 

b)  css壓縮

洗掉回車、空格、tab,洗掉代碼注釋,css語意合并,

 

c)   js壓縮與混淆(必須)

洗掉回車、空格、tab,洗掉代碼注釋,代碼命名和語意的縮減與優化,達到代碼保護,

 

d)  檔案合并

· 公共庫合并(合并成為vendor.js)

· 分頁面合并(按路由合并)

· 按實際情況合并

 

e)  開啟gzip

將js和css檔案壓縮為gzip,

 

圖一為普通模式的請求狀況

“傳輸”:http請求大小 + 檔案傳輸程序大小

“大小”:檔案的實際大小

 

 

圖二為gzip模式的請求狀況,gzip的壓縮閾值為10K

“傳輸”:http請求大小 + 檔案傳輸程序大小(即gzip壓縮后大小)

“大小”:檔案的實際大小(瀏覽器收到gzip,解壓之后的大小)

 

 

舉個例子,vendor.js,原大小6.5M(echarts的原始碼太大了),

經過代碼壓縮后,成果是770K,

最后部署到nginx,啟用nginx的gzip功能,瀏覽器請求時變成200K

6.5M->770K->200K

 

圖片壓縮

小圖片轉換為base64嵌入到代碼里,

大圖片將肉眼無法識別的色彩去除,達到壓縮,

 

瀏覽器渲染

 

本質就是:js和css的加載順序問題,把css放在head,js按實際需要放(盡可能放底部),而且,訪問對應路由的時候才加載需要的js和css,

 

懶加載與預加載

懶加載:在沒有進入可視區域的時候,img的src是一個很小的占位圖片或者直接是空的,進入可視區域的時候,才變成有效的src,

 

 

 

上面代碼是手工實作的,另有開源的zepto.lazyload.js,vue-cli架構下也有專門的庫,

 

預加載:在最開頭的部分,使用隱藏的img加載需要的圖片,后面需要使用的時候,其它的img就會從快取讀圖片,直接在js里面new一個Image物件,也能實作預加載,用ajax的get方法去加載也行,但是ajax有跨域問題,

開源的有PreloadJS

 

 

 

 

 

重繪與回流

瀏覽器渲染的時候,css的運行會阻塞js的運行,

頻繁觸發重繪與回流,會導致UI頻繁渲染,最終導致js變慢,

盡量少觸發重繪與回流可以提升性能,

重繪的代價比回流要小的多,所以,盡可能只觸發重繪,而減少觸發回流,就能提高性能,

在瀏覽器的開發者工具列里面,性能(performance)那一項,有重繪與回流的記錄,

如果無法避免重繪與回流,則盡量把重繪回流的范圍限制在一個圖層之內,例如video、canvas、有特定樣式的div,(在谷歌瀏覽器的開發者工具列的layers里面,有表明哪些元素是圖層,以及那些元素之所以是圖層的原因)

 

重繪(代價比較小):

 

 

回流(即重布局,代價比較大):

 

 

上面兩個圖看不懂沒關系,可以直接看下面這個圖:

 

 

.class1 { margin-left : 10px; padding-left: 10px;}

.class2 { margin-left : 20px; padding-left: 20px;}

關于第三點,修改元素樣式的時候,用class的話,只回流1次,但是如果直接改style,則回流2次

 

關于第四點,先把元素隱藏起來,然后修改各種樣式,改完再顯示出去,就只回流兩次,

如果直接是顯示狀態下改n種樣式,就會回流n次,

(PS:如果用了第三點,就可以忽略第四點)

 

關于第五點,不要在回圈里面取值,要在回圈外面事先取出來

舉個反例:

 

 

正確例子:

 

 

瀏覽器存盤

在現代WEB前端,

Cookie用于標識用戶,現在的人都不再用于存盤資料

LocalStorage,僅用于存盤資料,永久性的

SessionStorage,僅用于存盤資料,生命周期跟session有關

IndexDB,前端的NOSQL資料庫,永久性的,大量資料時候會用到

ServiceWorker,控制瀏覽器的離線快取,通過撰寫ServiceWorker的js代碼,可以直接控制瀏覽器去讀快取里的js、css、html檔案,而且是完全離線的,也就是說,即使斷網了,也一樣可以訪問網站,(如果快取里面沒有該檔案,才會發請求出去拿檔案)

 

關于cookie的一個優化點:

Cookie是作用于一個域的,請求里面攜帶cookie會有一定的損耗,但是一般只有調介面的時候才需要cookie,調js和css是不需要cookie的,所以,一般把前端靜態檔案放在CDN(即另一個域),這樣子訪問js和css就不會攜帶cookie了,對于京東來說,這樣子每年可以節省上億元的帶寬消費,

 

快取策略

區別于上一節,http、https自身也有快取策略:通過控制cache-control、last-modified、Etag,可以達到自由控制快取,

 

狀態對比:

(200)> (304) > (200已快取)

舉個例子 10ms > 5ms > 0ms

 

PWA

PWA(Progressive Web App)是一種全新的網頁技術,讓網站的離線體驗變得更好,特別適用于斷斷續續的網路,現在非常火,對于前端性能的優化,效果很顯著,它的本質就是用了ServiceWorker,

 

前后端分開部署

前端,只要有html、css、js、圖片就是完整的了,

后端,則有PHP、Java等語言,

PHP依賴于Apache,Java依賴于Tomcat,而前端可以放在任意的web服務容器上運行,

前端放在Tomcat、Apache、Nginx的性能比是 1:5:15,

 

Vue-SSR

vue-cli跟vue-ssr做出來的都是單頁面應用,由于用了vue-router來實作各個tab,所以每個tab的性能都是超乎想象的優越,

而vue-ssr則是把首屏速度再度進行提升,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/169946.html

標籤:JavaScript

上一篇:【微信小程式】動態設定圖片大小

下一篇:判斷變數的資料型別

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more