01-CompressionWebpackPlugin---提高 Web 應用性能的利器

CompressionWebpackPlugin—提高 Web 應用性能的利器

筆記+分享
在現代 Web 開發中,優化資源加載速度是提升用戶體驗的重要環節。減少文件大小可以顯著提升網頁加載速度,從而改善用戶體驗。CompressionWebpackPlugin 是一個強大的 Webpack 插件,它可以在構建過程中自動壓縮資源文件,為瀏覽器提供更小的文件。本文將詳細介紹 CompressionWebpackPlugin 的功能、配置和使用方法,幫助你優化 Web 應用的性能。

什么是 CompressionWebpackPlugin?

CompressionWebpackPlugin 是一個用于 Webpack 的插件,能夠在構建過程中生成壓縮文件(例如 .gz.br 文件)。這些壓縮文件可以顯著減少資源文件的大小,從而加快網頁的加載速度。瀏覽器會優先請求這些壓縮文件,減少傳輸數據量,提高頁面響應速度。

為什么選擇 CompressionWebpackPlugin?

  1. 自動化壓縮:在構建過程中自動生成壓縮文件,無需手動處理。
  2. 支持多種壓縮格式:支持 gzip、brotli 等多種壓縮格式,靈活應對不同的瀏覽器和網絡環境。
  3. 易于集成:與 Webpack 無縫集成,只需簡單配置即可使用。
  4. 提升性能:顯著減少資源文件大小,加快網頁加載速度,提高用戶體驗。

安裝 CompressionWebpackPlugin

首先,在項目中安裝 compression-webpack-plugin

bash
復制代碼
npm install compression-webpack-plugin --save-dev

配置 Webpack

webpack.config.js 文件中配置 CompressionWebpackPlugin。以下是一個簡單的示例:

javascript復制代碼const CompressionWebpackPlugin = require('compression-webpack-plugin');module.exports = {mode: 'production',plugins: [new CompressionWebpackPlugin({filename: '[path][base].gz', // 輸出文件名algorithm: 'gzip', // 壓縮算法test: /\.(js|css|html|svg)$/, // 匹配需要壓縮的文件類型threshold: 10240, // 只處理大于 10KB 的文件minRatio: 0.8, // 只有壓縮率小于 0.8 的文件才會被處理deleteOriginalAssets: false, // 是否刪除原始文件}),],
};

詳細配置選項

CompressionWebpackPlugin 提供了豐富的配置選項,可以根據具體需求進行調整。以下是一些常用配置:

  • filename:輸出文件名格式。支持使用 [path][base][name][ext] 等占位符。
  • algorithm:壓縮算法,默認為 gzip,也可以使用 brotliCompress 等其他算法。
  • test:匹配需要壓縮的文件類型。可以是正則表達式、數組或函數。
  • threshold:只有文件大小大于這個值的文件才會被壓縮,單位為字節。
  • minRatio:只有壓縮率小于這個值的文件才會被處理。
  • deleteOriginalAssets:是否刪除原始未壓縮的資源文件。

以下是一個更為復雜的配置示例,使用了 gzip 和 brotli 兩種壓縮算法:

javascript復制代碼const CompressionWebpackPlugin = require('compression-webpack-plugin');
const zlib = require('zlib');module.exports = {mode: 'production',plugins: [new CompressionWebpackPlugin({filename: '[path][base].gz',algorithm: 'gzip',test: /\.(js|css|html|svg)$/,threshold: 10240,minRatio: 0.8,deleteOriginalAssets: false,}),new CompressionWebpackPlugin({filename: '[path][base].br',algorithm: 'brotliCompress',test: /\.(js|css|html|svg)$/,compressionOptions: {params: {[zlib.constants.BROTLI_PARAM_QUALITY]: 11, // brotli 壓縮質量},},threshold: 10240,minRatio: 0.8,deleteOriginalAssets: false,}),],
};

配置服務器

為了讓瀏覽器能夠正確請求到壓縮后的文件,你需要在服務器上進行相應的配置。以下是 Nginx 和 Apache 的配置示例:

Nginx 配置
nginx復制代碼http {gzip on;gzip_types text/plain application/xml text/css text/javascript application/javascript application/x-javascript;server {listen 80;server_name your_domain.com;location / {try_files $uri $uri/ /index.html;}location ~* \.(js|css|html|svg)$ {gzip_static on; # 啟用靜態 gzip 文件支持expires max;add_header Cache-Control public;add_header Content-Encoding gzip;}location ~* \.br$ {add_header Content-Encoding br;expires max;}}
}
Apache 配置
apache復制代碼<IfModule mod_deflate.c>AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css text/javascript application/javascript application/x-javascript
</IfModule><IfModule mod_headers.c><FilesMatch "\.(js|css|html|svg)$">Header set Content-Encoding gzip</FilesMatch><FilesMatch "\.br$">Header set Content-Encoding br</FilesMatch>
</IfModule><IfModule mod_rewrite.c>RewriteEngine onRewriteCond %{HTTP:Accept-Encoding} gzipRewriteCond %{REQUEST_FILENAME}\.gz -sRewriteRule ^(.*)\.(js|css|html|svg)$ $1\.$2\.gz [QSA]RewriteCond %{HTTP:Accept-Encoding} brRewriteCond %{REQUEST_FILENAME}\.br -sRewriteRule ^(.*)\.(js|css|html|svg)$ $1\.$2\.br [QSA]
</IfModule><IfModule mod_mime.c>AddEncoding gzip .gzAddEncoding br .br
</IfModule>

驗證壓縮效果

使用 CompressionWebpackPlugin 后,你可以通過以下方法驗證壓縮效果:

  1. 瀏覽器開發者工具:打開開發者工具(按 F12Ctrl+Shift+I),在“網絡”(Network)標簽中查看請求的資源文件,檢查 Content-Encoding 頭部是否為 gzipbr

  2. 命令行工具:使用 curl 命令檢查服務器響應頭。例如:

    bash
    復制代碼
    curl -I -H "Accept-Encoding: gzip" http://your_domain.com/path/to/your/file.js
    
  3. 性能分析工具:使用 Lighthouse 或 WebPageTest 等工具進行性能分析,查看頁面加載時間和資源文件大小。

總結

CompressionWebpackPlugin 是一個強大且易于使用的 Webpack 插件,可以顯著減少資源文件的大小,提高網頁加載速度。通過合理配置 CompressionWebpackPlugin,并在服務器上進行相應的配置,你可以大幅提升 Web 應用的性能和用戶體驗。

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

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

相關文章

【安裝筆記-20240529-Windows-Electerm 終端工具】

安裝筆記-系列文章目錄 安裝筆記-20240529-Windows-Electerm 終端工具 文章目錄 安裝筆記-系列文章目錄安裝筆記-20240529-Windows-Electerm 終端工具 前言一、軟件介紹名稱&#xff1a;Wireshark主頁官方介紹功能特性 二、安裝步驟測試版本&#xff1a;electerm-1.39.35-win-…

【藍橋杯】常見的數據結構

&#x1f338;個人主頁&#xff1a;Yang-ai-cao &#x1f4d5;系列專欄&#xff1a;藍橋杯 C語言 &#x1f34d;博學而日參省乎己&#xff0c;知明而行無過矣 目錄 &#x1f338;個人主頁&#xff1a;Yang-ai-cao &#x1f4d5;系列專欄&#xff1a;藍橋杯 C語言 &…

Spring項目中Ordered接口的應用:全局過濾器(GlobalFilter)的順序控制

在Spring框架&#xff0c;尤其是Spring Cloud Gateway或Spring WebFlux項目中&#xff0c;Ordered接口扮演著重要的角色&#xff0c;特別是在實現全局過濾器(GlobalFilter)時&#xff0c;用于控制過濾器執行的優先級。下面將介紹如何在Spring項目中使用Ordered接口來管理Global…

【AIoT-Robot】3d hand pose

手語是聾啞人士的主要溝通工具,它是利用手部和身體的動作來傳達意義。雖然手語幫助它的使用者之間互相溝通,但聾啞人士與一般人的溝通卻十分困難,這個溝通障礙是源于大部分人不懂得手語。 1. 手勢&&手語 手勢:手的姿勢 ,通常稱作手勢。它指的是人在運用手臂時,所…

初識springcloud

springcloud eureka eureka的作用 消費者該如何獲取服務提供者具體信息&#xff1f; 服務提供者啟動時向eureka注冊自己的信息,eureka保存這些信息消費者,根據服務名稱向eureka拉取提供者信息 如果有多個服務提供者&#xff0c;消費者該如何選擇&#xff1f; 服務消費者利…

創建模塊

自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;自定義模塊有兩個作用&#xff1a;一個是規范代碼&#xff0c;讓代碼更易于閱讀&#xff0c;另一個是方便其他程序使用已經編…

ORACLE創建dblink

dblink的作用 dblink數據庫鏈接顧名思義就是數據庫的鏈接&#xff0c;當我們要跨本地數據庫&#xff0c;訪問另外一個數據庫表中的數據時&#xff0c;本地數據庫中就必須要創建遠程數據庫的dblink&#xff0c;通過dblink本地數據庫可以像訪問本地數據庫一樣訪問遠程數據庫表中…

Ubuntu22.04之解決:terminal使用alt+1/alt+2/alt+3失效問題(二百三十八)

簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 優質專欄&#xff1a;多媒…

安卓玩機搞機技巧綜合資源----電腦控制手機 投屏操控的軟件工具操作步驟解析【二十二】

接上篇 安卓玩機搞機技巧綜合資源------如何提取手機分區 小米機型代碼分享等等 【一】 安卓玩機搞機技巧綜合資源------開機英文提示解決dm-verity corruption your device is corrupt. 設備內部報錯 AB分區等等【二】 安卓玩機搞機技巧綜合資源------EROFS分區格式 小米紅…

外發郵件監控的六種方法, 監控軟件如何防止郵件泄密?

外發郵件監控的六種方法&#xff0c; 監控軟件如何防止郵件泄密&#xff1f; 外發郵件監控是現代企業信息安全管理的重要組成部分&#xff0c;它有助于防止敏感信息泄露、保護知識產權、以及確保企業合規。以下是外發郵件監控的幾種主要方法&#xff0c;這些方法結合使用可以為…

2024最新 Jenkins + Docker實戰教程(八)- Jenkins實現集群并發構建

&#x1f604; 19年之后由于某些原因斷更了三年&#xff0c;23年重新揚帆起航&#xff0c;推出更多優質博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有堅忍不拔之志 &#x1f390; 個人CSND主頁——Mi…

【Python Cookbook】S01E14 從字典中提取子集

目錄 問題解決方案討論 問題 如果我們想基于一個字典的子集創建另外一個字典&#xff0c;該如何做&#xff1f; 解決方案 利用 字典推導式 來解決問題&#xff1a; prices {ACME: 45.23,AAPL: 612.78,IBM: 205.55,HPQ: 37.20,FB: 10.75 }p1 {key:value for key, value in…

AI學習指南機器學習篇-邏輯回歸損失函數和優化

AI學習指南機器學習篇-邏輯回歸損失函數和優化 引言 在機器學習中&#xff0c;邏輯回歸是一種常用的分類算法。在邏輯回歸中&#xff0c;我們需要定義一個損失函數來衡量模型預測值與實際標簽之間的誤差&#xff0c;并且需要通過優化算法來最小化損失函數&#xff0c;從而得到…

群體優化算法----人工蜂群優化算法應用于路徑規劃(機器人避開平面障礙尋找最短路線)

介紹 人工蜂群優化算法&#xff08;Artificial Bee Colony Algorithm, ABC&#xff09;是由Dervis Karaboga在2005年提出的一種模擬蜜蜂覓食行為的優化算法。該算法基于蜜蜂群體的分工合作和信息交流機制&#xff0c;通過模擬蜜蜂尋找食物源的過程來解決優化問題。ABC算法因其…

netplan網絡配置@ubuntu留檔

ubuntu使用netplan進行網絡配置&#xff0c;簡單又方便。 配置的時候編輯/etc/netplan 目錄里的文件即可&#xff0c;如00-installer-config.yaml文件。 固定ip配置 network:ethernets:enp0s5:dhcp4: noaddresses: [192.168.1.7/24]routes:- to: defaultvia: 192.168.1.1name…

手機和WINDOWS電腦藍牙連接后怎樣放歌,無法選擇媒體音頻 藍牙媒體音頻勾選不上

手機和電腦藍牙連接后怎樣放歌 要將手機通過藍牙連接到電腦并播放音樂&#xff0c;可以按照以下步驟操作&#xff1a; 確保手機和電腦都支持藍牙功能&#xff0c;并且藍牙功能已經開啟。 在電腦上&#xff0c;打開“設置”> “設備”> “藍牙和其他設備”。 點擊“添…

INT202 例題

算法復雜度 O(n)&#xff1a;表示算法的漸進上界。如果一個算法的運行時間是O(n)&#xff0c;那么它的運行時間最多與輸入規模n成正比。換句話說&#xff0c;當輸入規模n增加時&#xff0c;算法的運行時間不會超過某個常數倍的n。比如&#xff0c;如果一個算法的時間復雜度是O(…

打開常用C語言常用內存函數的大門 ——memcmp函數及其模擬實現(完結篇)

文章目錄 1. 前言2. memcmp函數2.1 memcmp函數的原型2.2 memcmp的返回值2.2 memcmp的形參2.3 memcmp函數的使用 3. memcmp函數的模擬實現4. 總結 1. 前言 本文是C語言常用內存函數的最后一個函數 —— memcmp函數。 希望各位觀眾佬爺們能夠學會并靈活的使用這四個常用的內存函…

平板顯示LED背光芯片OC6700,輸入3.6V~60V,升壓型 LED 恒流驅動器

概述 OC6700是一款內置60V功率NMOS高效率、高精度的升壓型大功率LED恒流驅動芯片。OC6700采用固定關斷時間的控制方式&#xff0c;關斷時間可通過外部電容進行調節&#xff0c;工作頻率可根據用戶要求而改變。OC6700通過調節外置的電流采樣電阻&#xff0c;能控制高亮度LED燈的…

如何優化 Java 程序的性能?

優化 Java 程序的性能可以從多個方面入手&#xff0c;以下是一些常見的優化方法&#xff1a; 使用合適的數據結構&#xff1a;選擇合適的數據結構可以提高程序的效率。例如&#xff0c;使用 HashMap 而不是 ArrayList 來存儲大量的鍵值對數據。 減少對象的創建和銷毀&#xff…