前端性能優化的三大類處理方式

来源:https://www.cnblogs.com/zhongjiayi/archive/2019/10/17/11695594.html
-Advertisement-
Play Games

1. 減少 HTTP 的請求次數和傳輸報文的大小 -CSS SPRITE(雪碧圖、圖片精靈)技術 - 使用字體圖標(ICON FONT)或者 SVG 等矢量圖; 可以減少 HTTP 請求次數或者減少請求內容的大小 ,使圖片渲染的更快:因為他們是基於代碼渲染的,而對於點陣圖(png/jpg/gif)是需 ...


1. 減少 HTTP 的請求次數和傳輸報文的大小

-CSS SPRITE(雪碧圖、圖片精靈)技術   - 使用字體圖標(ICON FONT)或者 SVG 等矢量圖;  可以減少 HTTP 請求次數或者減少請求內容的大小 ,使圖片渲染的更快:因為他們是基於代碼渲染的,而對於點陣圖(png/jpg/gif)是需要先把圖片編碼再渲染 ,可以避免圖片失真變形 ;  可以使用 webp 格式圖片,這種格式要小一些(但要保證伺服器端支持這種格式的請求處理)   - 圖片懶載入(延遲載入)技術 ;   第一次載入頁面的時候不去請求真實的圖片,將預設背景圖替代真實圖片進行載入,以提高第一次渲染頁面的速度;   當頁面載入完,把出現在用戶視野區域中的圖片做真實載入,沒有出現在用戶頁面時的資源先不載入(可以節約流量,也能減少對伺服器的請求壓力);   數據我們也儘可能分批載入(不要一次請求過多的數據,例如分頁技術)   - 音視頻文件取消預載入(preload='none'),這樣可以增加第一次渲染頁面的速度,當需要播放的時候再載入   - 客戶端和伺服器端的數據傳輸儘可能基於 JSON 格式完成,XML 格式比 JSON 格式要大一些(還可以基於二進位編碼或者文件流格式,這種格式比文件傳輸好很多)   - 把頁面中的 CSS/JS/圖片等文件進行合併壓縮:爭取 CSS 和 JS 都只導入一個:基於 webpack 可以壓縮、對於圖片自己找工具先壓縮、還可以使用伺服器的 GZIP 壓縮   - 圖片地圖:對於多次調取使用的圖片(尤其是背景圖),儘可能把它提取成為公共的樣式,而不是每一次重新設置   - 圖片 BASE64(用 BASE64 碼代表圖片,減少 HTTP 請求,增加瀏覽器渲染的速度,所以真實項目中,尤其是移動端,如果圖片載入緩慢,可能 BASE64 一下就好了;但是,BASE64 會導致文件中的代碼頁面混亂,不利於維護和開發,所以儘量少使用;webpack 中可以配置圖片的 BASE64;)

 

2 . 設置各種緩存、預處理和長連接機制

 

- 把不經常更改的靜態資源做緩存處理(一般做的是 304 或者 ETAG 等協商緩存)   - 建立 Cache-Control 和 Expires HTTP 的強緩存   - DNS 緩存或者預處理(DNS PREFETCH),減少 DNS 的查找   - 設置本地的離線存儲(manifest)或者把一些不經常更改的數據做本地存儲(webstorage、indexdb)等   - 有錢就做 CDN(地域分散式伺服器),還有一個財大氣粗的方式:加伺服器   - 建立 Connection:keep-alive TCP 長連接   - 使用 HTTP2 版本協議(現在用的一般都是 HTTP1.1) + 可以多條 TCP 通道共存 =>管道化鏈接    - 一個項目分為不同的域(不同的伺服器),例如:資源 WEB 伺服器、數據伺服器、圖片伺服器、視頻伺服器等,這樣合理利用伺服器資源,但是導致過多的 DNS 解析

 

3. 代碼方面的性能優化

  - 減少對閉包的使用(因為過多使用閉包會產生很多不銷毀的記憶體,處理不好的話,會導致記憶體溢出“棧溢出”),減少閉包的嵌套(減少作用域鏈的查找層級)   - 對於動畫來說:能用 CSS 解決的不用 JS(能夠用 transform 處理的,不用傳統的 css 樣式,因為 transform 開啟硬體加速,不會引發迴流,再或者使用定位的元素也會好很多,因為定位的元素脫離文檔流,不會對其它元素的位置造成影響);    能用 requestAnimationFrame 解決的不用定時器 ;    另外, requestAnimationFrame 還有一個好處:當頁面處於休眠無訪問狀態,動畫會自己暫停,直到恢復訪問才開始,而定時器是不論什麼狀態,只要頁面不管,就一直處理   - 避免使用 iframe(因為 iframe 會嵌入其它頁面,這樣父頁面渲染的時候,還要同時把子頁面也渲染了,渲染進度會變慢)   - 減少直接對 DOM 的操作(以減少 DOM 的重排和重繪),當代項目基本上都是基於 mvvm/mvc 數據驅動視圖渲染的,對 DOM 的操作框架本身完成,性能要好很多;(當前主流框架大都避免直接操作DOM)   - 低耦合高內聚(基於封裝的方式:方法封裝、插件、組件、框架、類庫等封裝,減少頁面中的冗餘代碼,提高代碼使用率)   - 使用事件委托   - 避免出現死迴圈或者嵌套迴圈(嵌套迴圈會成倍增加迴圈的次數)   - 項目中儘可能使用非同步編程來模擬出多線程的效果,避免主線程阻塞(非同步操作基於 promise設計模式來管理)   - JS 中不要使用 with   - 避免使用 CSS 表達式   - 函數的防抖和節流(處理高併發的其中一種方式)   - 減少使用 eval(主要原因是防止壓縮代碼的時候,由於符號書寫不合規,導致代碼混亂)   - 減少 filter 濾鏡的使用   - 儘可能減少選擇器的層級(選擇器是從右向左解析)比如: .box a{} 和 a{}  (使用less插件時預設層級是比較高的)   - 儘可能減少 table 佈局   - 手動回收堆棧記憶體(賦值為 null)

 


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

-Advertisement-
Play Games
更多相關文章
  • 本文翻譯自官網,官方文檔地址: 1.下載官網示例數據 命令如下: 圖示: 可見,執行完命令之後,在當前目錄可以看到下載成功的數據NOAA_data.txt。通過cat命令還可以看到文件中的內容。 2.將數據導入到influxdb中 命令如下: 圖示: 3.查看結果 進入到InfluxDB中。如下圖, ...
  • 原文鏈接:https://www.cnblogs.com/su-root/p/9689787.html 作 者:小柏 出 處:https://www.cnblogs.com/su-root 關於博主:運維、編程路上的小學生,愛鑽研技術,評論和私信會在第一時間回覆。 版權聲明:本文版權歸作者和博客園共 ...
  • 0x00 基礎操作介紹 在本文中將介紹InfluxDB常用的基礎操作,幫助讀者建立對InfluxDB的感性認識,快速的動手玩起來,持續查詢(Continuous Queies)、Group by、Series、行協議(Line Protocol)、InfluxQL等高級特性和細節,將會在後續文章中逐 ...
  • 修改客戶表 編號為 0101007002,0101007003的樓棟號 007-1-102,007-1-201 UPDATE gas_customerSET building= CASEWHEN govid=380 and customer_no='0101007002' THEN '007-1-1 ...
  • 本文主要對android4.4 RIL的telephony與modem的命令交互流程進行分析,當然本文不是重點介紹telephony。telephony涉及具體業務邏輯內容比較多,包括sim、dail、sms、network等等,以後會針對這些內容學習分析。 RIL在Android體系中的位置: ( ...
  • 文章較長建議先收藏再看 拆解步驟 1、app 強制橫屏顯示,無視 android:screenOrientation="portrait" 屬性 2、屏幕觸摸坐標修改為橫屏 3、開機動畫橫屏 4、開機logo、關機充電動畫橫屏 5、RecoveryUI 橫屏 上代碼 1、app 強制橫屏顯示 修改 ...
  • 一、 webstorm取色技巧:webstorm內置了顏色取色器,我們對某種顏色未知的時候,可以利用下圖中的取色器,進行顏色識別。 二、系統會預設給body添加外邊距,因此我們對於這種情況應該首先去掉這些內外邊距,在企業開發中為了更好的控制盒子的寬高和計算盒子的寬高等等,所以在企業開發過程中,編寫代 ...
  • 小程式後臺返回數據的時候,html內容是經過unicode編碼的不能直接顯示,裡邊全是類似&#xxxx;的字元,這需要單獨為內容進行解析編碼,微信小程式是不會解析特殊符號的,我們要手動轉換。 ​​​​​​ 直接上代碼了,大家可以拿去測試: 效果如下: ​​​ ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...