前端性能優化——包體積壓縮插件,打包速度提升插件,提升瀏覽器響應的速率模式

前端代碼優化

–其他的優化可以具體在網上搜索
壓縮項目打包后的體積大小、提升打包速度,是前端性能優化中非常重要的環節,結合工作中的實踐總結,梳理出一些 常規且有效 的性能優化建議
ue 項目可以通過添加–report命令: "build": "vue-cli-service build --report",打包后 dist 目錄會生成 report.html 文件,用來分析各文件的大小

代碼中,去除沒有利用到的庫文件,去除沒有關于業務方面的demo程序以及頁面。


代碼未開啟壓縮,進行分析研究
在這里插入圖片描述
js包體積有2.43MB.構建的文件就多而大,整個項目包括靜態資源14MB多,之前用了部分高清的背景圖,替換為精靈圖之后以及刪除部分代碼和優化之后。項目整體為11MB大小。
在這里插入圖片描述
花費時間29653ms構建成功。此圖為打包后的結構目錄。

Alt


響應gz模式的打包

即compression-webpack-plugin插件的使用

線上的項目,一般都會結合構建工具 webpack 插件或服務端配置 nginx,來實現 http 傳輸的 gzip 壓縮,目的就是把服務端響應文件的體積盡量減小,優化返回速度

html、js、css資源,使用 gzip 后通常可以將體積壓縮70%以上
這里介紹下使用 webpack 進行 gzip 壓縮的方式,使用 compression-webpack-plugin 插件
瀏覽器可以自己解析gz包

npm install compression-webpack-plugin -D

配置:

configureWebpack:config => {// 開發環境不配置if (process.env.NODE_ENV !== 'production') returnreturn {plugins: [new CompressionPlugin({filename: "[path][base].gz", // 這種方式是默認的,多個文件壓縮就有多個.gz文件,// filename: '[path].gz[query]', //  使得多個.gz文件合并成一個文件,這種方式壓縮后的文件少,本項目初次學習不建議使用algorithm: 'gzip', // 官方默認壓縮算法也是gziptest: /\.js$|\.css$|\.html$|\.ttf$|\.eot$|\.woff$/, // 使用正則給匹配到的文件做壓縮,這里是給html、css、js以及字體(.ttf和.woff和.eot)做壓縮threshold: 10240, //以字節為單位壓縮超過此大小的文件,使用默認值10240吧minRatio: 0.8, // 最小壓縮比率,官方默認0.8//是否刪除原有靜態資源文件,即只保留壓縮后的.gz文件,建議這個置為false,還保留源文件。以防:// 假如出現訪問.gz文件訪問不到的時候,還可以訪問源文件雙重保障也就是配置為false,我這里就直接使用gz單模式deleteOriginalAssets: true})]}}

打包后的代碼目錄結構
現在整個打包好后的包是5.6MB。很極限的壓縮

Alt
可以看出,全部變成了.gz的文件包,瀏覽器是可以解析這樣的包的。
在這里插入圖片描述
之后將這個包推到nginx環境下,瀏覽器就可以請求(情空緩存,秒顯首頁等資源),因為gz文件是在網絡傳輸時候減小網絡開銷用的,如何請求的話在服務器配置開啟gzip,請求會優先匹配同文件名的gz壓縮格式返回,要注意頁面請求后的Response Headers中的Content-Encoding的值為“gzip”,Request Headers中Accept-Encoding的值存在“gzip”值就可以了。
在這里插入圖片描述

驗證插件的有效性:
在這里插入圖片描述

提升打包速度

在這里插入圖片描述

開啟gzip壓縮之后,包的體積大幅縮減,但是打包的時間還是過長26880ms


HappyPack 多線程打包

由于運行在 Node.js 之上的 webpack 是單線程模型的,我們需要 webpack 能同一時間處理多個任務,發揮多核 CPU 電腦的威力
HappyPack 就能實現多線程打包,它把任務分解給多個子進程去并發的執行,子進程處理完后再把結果發送給主進程,來提升打包速度

  • 安裝
npm install HappyPack -D
  • vue.config.js 中引入
const HappyPack = require('happypack');
const os = require('os');
// 開辟一個線程池,拿到系統CPU的核數,happypack 將編譯工作利用所有線程
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });module.exports = {configureWebpack: {plugins: [new HappyPack({id: 'happybabel',loaders: ['babel-loader'],threadPool: happyThreadPool})]}
}

驗證 HappyPack 的有效性:
重新打包,最新數據如下:
打包速度:8949ms
使用HappyPack后,打包速度進一步提升了65%
在這里插入圖片描述

可根據項目的實際情況來做合理的項目優化

https://juejin.cn/post/7186315052465520698#heading-7

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43010.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43010.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43010.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

innodb索引與算法

B樹主鍵插入 B樹在innodb的插入有三種模式page_last_insert, page_dirction, page_N_direction 而在bustub里面的B樹就是page_N_direction,如果是自增主鍵的話,就是上面這樣的插入法 FIC優化 (DDL) 選擇性統計 覆蓋索引 MMR ICP優化 自適應hash 全文索引 MySQL…

Rust之編寫自動化測試

1、測試函數的構成: 在最簡單的情形下,Rust中的測試就是一個標注有test屬性的函數。屬性 (attribute)是一種用于修飾Rust代碼的元數據。只需要將#[test]添加到關鍵字fn的上一行便可以將函數轉變為測試函數。當測試編寫完成后,我們可以使用cargo test命令來運行測試…

Flink-----Standalone會話模式作業提交流程

1.Flink的Slot特點: 均分隔離內存,不隔離CPU可以共享:同一個job中,不同算子的子任務才可以共享同一個slot,同時在運行的前提是,屬于同一個slot共享組,默認都是“default”2.Slot的數量 與 并行度 的關系 slot 是一種靜態的概念,表示最大的并發上線并行度是個動態的概念…

List和ObservableCollection和ListBinding在MVVM模式下的對比

List和ObservableCollection和ListBinding在MVVM模式下的對比 List 當對List進行增刪操作后,并不會對View進行通知。 //Employee public class Employee : INotifyPropertyChanged {public event PropertyChangedEventHandler? PropertyChanged;public string N…

Vue-13.創建完整的Vue項目(vue+vue-cli+js)

前言 之前寫了命令創建Vue項目,但是事實上我們可以直接用編譯器直接創建項目,這里我使用webstorm(因為我是前后端兼修的所以我習慣使用Idea家族的編譯器) 只寫前端的推薦用VsCode前后端都寫的推薦用webstorm 新建項目 項目初始…

確保Django項目的穩定運行和持續改進

確保Django項目的穩定運行和持續改進 引言 Django是一個強大的Python Web框架,用于構建高效、可靠的Web應用程序。然而,部署一個Django項目并不意味著工作已經完成。在項目上線之后,確保項目的穩定運行并不斷進行改進是非常重要的。本博客將…

vscode 安裝勾選項解釋

1、通過code 打開“操作添加到windows資源管理器文件上下文菜單 :把這個兩個勾選上,可以對文件使用鼠標右鍵,選擇VSCode 打開。 2、將code注冊為受支持的文件類型的編輯器:不建議勾選,這樣會默認使用VSCode打開支持的相…

《Linux從練氣到飛升》No.15 Linux 環境變量

🕺作者: 主頁 我的專欄C語言從0到1探秘C數據結構從0到1探秘Linux菜鳥刷題集 😘歡迎關注:👍點贊🙌收藏??留言 🏇碼字不易,你的👍點贊🙌收藏??關注對我真的…

微信小程序通用字體代碼

下面是一個簡單的微信小程序通用字體代碼示例: // 在app.wxss中設置全局字體樣式 import ./styles/fonts.wxss;// 在fonts.wxss中定義字體樣式 font-face {font-family: CustomFont;src: url(font.ttf) format(truetype); }// 在page.wxss中使用自定義字體樣式 .cus…

SASS 學習筆記 II

SASS 學習筆記 II 上篇筆記,SASS 學習筆記 中包含: 配置 變量 嵌套 這里加一個擴展,嵌套中有一個 & 的用法,使用 & 可以指代當前 block 中的 selector,后面可以追加其他的選擇器。如當前的 scope 是 form&a…

GuLi商城-前端基礎Vue-使用Vue腳手架進行模塊化開發

自己親自實踐: mac安裝webpack webpack 簡介Webpack 是一個非常流行的前端構建工具,它可以將多個模塊(包括CSS、JavaScript、圖片等)打包成一個或多個靜態資源文件(bundle),以便用于部署到生產…

19c_ogg搭建

1.環境介紹 源端:192.168.56.101 目標端:192.168.56.100 背景:數據從主庫cdb主機定位,同步到從庫 2.配置ogg 2.1 開啟歸檔、強制日志、補充日志 --ogg 主備都需要配置 SQL> alter database archivelog; SQL> alter databa…

【Axure高保真原型】JS日期選擇器篩選中繼器表格

今天和大家分享JS日期選擇器篩選中繼器表格的原型模板,通過調用瀏覽器的日期選擇器,所以可以獲取真實的日歷效果,具體包括哪一年二月份有29天,幾號對應星期幾,都是真實的,獲取日期值后,通過交互…

接口測試,負載測試,并發測試,壓力測試區別

接口測試 1.定義:接口測試是測試系統組件間接口的一種測試。接口測試主要用于檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關系等。 2.目的&#xf…

原型與繼承

原型與繼承 在 JavaScript 中,對象有一個特殊的隱藏屬性 [[Prototype]](如規范中所命名的),它要么為 null,要么就是對另一個對象的引用。該對象被稱為“原型。 當我們從 object 中讀取一個缺失的屬性時,Jav…

使用Julia實現A*路徑尋找算法:一個深入的指南

第一部分:簡介與背景 1. 引言 Julia,作為一種高效、靈活且易于學習的編程語言,逐漸在科學計算、數據分析和機器學習等領域中占據一席之地。當我們談到路徑規劃或游戲開發時,A_算法(A Star Algorithm)常常…

什么是變量提升(hoisting)?它在JavaScript中是如何工作的?

聚沙成塔每天進步一點點 ? 專欄簡介? 變量提升(Hoisting)? 變量提升的示例:? 寫在最后 ? 專欄簡介 前端入門之旅:探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅&…

7.3 C/C++ 實現順序棧

順序棧是一種基于數組實現的棧結構,它的數據元素存儲在一段連續的內存空間中。在順序棧中,棧頂元素的下標是固定的,而棧底元素的下標則隨著入棧和出棧操作的進行而變化。通常,我們把棧底位置設置在數組空間的起始處,這…

C++11并發與多線程筆記(9) async、future、packaged_task、promise

C11并發與多線程筆記(9) async、future、packaged_task、promise 1、std::async、std::future創建后臺任務并返回值2、std::packaged_task:打包任務,把任務包裝起來3、std::promise3、小結 1、std::async、std::future創建后臺任務…

C++友元函數和友元類

友元 1.友元介紹2.類友元2.1示例代碼 3.函數友元3.1示例代碼 4.總結 1.友元介紹 在C中,友元(friend)是一種機制,允許某個類或函數訪問其他類的私有成員。通過友元,可以授予其他類或函數對該類的私有成員的訪問權限。友…