前端性能優化——圖片優化

来源:https://www.cnblogs.com/yuzhihui/archive/2023/04/04/17269559.html
-Advertisement-
Play Games

前端性能優化——圖片優化 一、圖片優化措施 優化圖片是 Web 前端優化的重要一環,因為圖片是 Web 頁面中最耗費帶寬和載入時間的資源之一。以下是一些通過優化圖片來優化 Web 前端的方法: 壓縮圖片:壓縮圖片可以減少圖片的文件大小,從而減少載入時間。 使用矢量圖形:使用矢量圖形(如 SVG)可以 ...


前端性能優化——圖片優化

一、圖片優化措施

優化圖片是 Web 前端優化的重要一環,因為圖片是 Web 頁面中最耗費帶寬和載入時間的資源之一。以下是一些通過優化圖片來優化 Web 前端的方法:

  1. 壓縮圖片:壓縮圖片可以減少圖片的文件大小,從而減少載入時間。
  1. 使用矢量圖形:使用矢量圖形(如 SVG)可以減少文件大小,並且可以在不失真的情況下無限縮放。

  2. 使用 WebP 格式圖片:WebP 是一種由 Google 開發的圖片格式,可以大幅減少文件大小,從而減少載入時間。WebP 格式圖片可以在 Chrome、Firefox、Edge 和 Opera 等現代瀏覽器中使用。

  3. 使用適當的圖片格式:使用適當的圖片格式可以大大減少圖片的文件大小。對於需要透明背景的圖片,使用 PNG 格式;對於顏色較少的圖像,使用 GIF 格式;對於照片和複雜圖像,使用 JPEG 格式。

  4. 移除圖片元數據:圖片通常包含元數據,例如拍攝日期、相機型號等。移除這些元數據可以減少圖片的文件大小。

  5. 緩存圖片:將圖片緩存在瀏覽器中可以減少頁面載入時間。你可以使用瀏覽器緩存機制或者使用 CDN 來緩存圖片。

  6. 使用 CSS Sprites:使用 CSS Sprites 可以將多個圖片合併成一個大圖,減少頁面中的圖片數量,從而減少 HTTP 請求次數,減少頁面的載入時間。

  7. 圖片預載入:通過預載入圖片,可以提高用戶體驗並減少載入時間。你可以使用 preload 或 prefetch 標簽來預載入圖片。

  8. 使用響應式圖片:使用響應式圖片可以根據設備的解析度提供不同大小的圖片,從而減少載入時間和帶寬消耗。你可以使用 srcset 屬性和 sizes 屬性來實現響應式圖片。

  9. 使用 Lazyload 延遲載入圖片:Lazyload 是一種懶載入技術,它可以將頁面中的圖片延遲載入,直到用戶滾動到頁面中的相應位置。這可以減少頁面的初始載入時間,並且可以提高用戶的體驗。可以使用懶載入技術或 Intersection Observer API 來實現延遲載入圖片。

  10. 使用 CDN 加速圖片載入:使用 CDN 可以將圖片緩存到離用戶最近的節點,從而提高圖片的載入速度和用戶的體驗。

二、圖片優化實踐

2.1、壓縮圖片

  1. 基於 Vue 3 + Webpack 5 的 vue.config.js 配置示例:

    需要安裝 image-webpack-loader:

    npm install image-webpack-loader --save-dev
    

    在 vue.config.js 文件中添加以下代碼:

    const { defineConfig } = require("@vue/cli-service");
    
    module.exports = defineConfig({
      transpileDependencies: true,
      devServer: {
        port: 8123,
        // 調試時啟用 gzip 壓縮
        compress: true,
        // 調試時允許內網穿透,讓外網的人訪問到本地調試的 H5 頁面
        disableHostCheck: true,
      },
      configureWebpack: {
        plugins: [],
        module: {
          rules: [],
        },
      },
      chainWebpack: (config) => {
        const imagesRule = config.module.rule("images");
        imagesRule
          .use("image-webpack-loader")
          .loader("image-webpack-loader")
          .options({
            mozjpeg: {
              progressive: true,
              quality: 65,
            },
            optipng: {
              enabled: false,
            },
            pngquant: {
              quality: [0.65, 0.9],
              speed: 4,
            },
            gifsicle: {
              interlaced: false,
            },
            webp: {
              quality: 75,
            },
          });
      },
    });
    

    優化效果:

    優化前:

    img

    優化後:

    img

2.2、使用 SVG 格式圖片

優化思路:由於 JPEG、PNG 和 GIF 等格式圖片無法被 gzip 等壓縮演算法壓縮,所以通過使用 SVG 矢量圖(文本類型),即可通過 gzip 等壓縮演算法對文本進行壓縮。

如果需要使用 SVG 圖片,最好是使用專門的 SVG 編輯器或繪圖工具來創建或編輯它們,例如,Inkscape 是一個流行的開源矢量圖形編輯器。

2.3、使用 WebP/AVIF 格式圖片

採用新一代格式提供圖片:WebP 和 AVIF 等圖片格式的壓縮效果通常優於 PNG 或 JPEG,因而下載速度更快,消耗的數據流量更少。

在 HTML 文件中使用 picture 元素來載入圖片,以支持不同的圖片格式:

<picture>
  <source srcset="example.webp" type="image/webp" />
  <img src="example.jpg" alt="Example image" />
</picture>

通過使用 WebP/AVIF 格式圖片 ,並且在 HTML 文件中使用 picture 元素載入圖片,以支持不同的圖片格式。這樣可以有效地減少帶寬的使用和加快圖片的載入速度,從而提高網站的性能和用戶體驗。

將 PNG/JPEG 格式圖片轉換為 Webp 格式圖片

  1. 使用線上工具:jpg-to-webp

  2. 使用 Python 對圖片進行批量轉換處理:《Python 實現圖像尺寸和轉換處理》

2.4、使用圖片 Base64 編碼的 DataURI

優化思路:由於 JPEG、PNG 和 GIF 等格式圖片無法被 gzip 等壓縮演算法壓縮,所以通過配置 webpack,在打包時,將 JPEG、PNG 和 GIF 等格式圖片轉換為 圖片 Base64 編碼的 DataURI,即可通過 gzip 等壓縮演算法對文本進行壓縮。

需要註意的是,將圖片轉換為圖片 Base64 編碼的 DataURI 字元串可能會導致文件大小變大,並且會影響到應用程式的載入速度。因此,建議只將小文件轉換為 base64 編碼的字元串,而將大文件編譯成普通的圖片文件。

  1. 基於 Vue 2 + Webpack 4 的 vue.config.js 配置示例:

    // vue.config.js
    
    module.exports = {
      devServer: {
        host: "0.0.0.0",
        port: 9999,
        https: false,
        // 調試時啟用 gzip 壓縮
        compress: true,
        // 調試時允許內網穿透,讓外網的人訪問到本地調試的 H5 頁面
        disableHostCheck: true,
      },
      configureWebpack: {
        rules: [],
        plugins: [],
      },
      configureWebpack: (config) => {},
      chainWebpack: (config) => {
        config.module
          .rule("images")
          .test(/\.(png|jpe?g|gif)$/i)
          .use("url-loader")
          .loader("url-loader")
          .tap((options) => {
            // 將文件大小限製為100kb以內,超過100kb的文件將被編譯成普通的圖片文件。
            options.limit = 100 * 1024;
            return options;
          });
      },
    };
    
  2. 基於 Vue 3 + Webpack 5 的 vue.config.js 配置示例:

    // vue.config.js
    
    const path = require("path");
    const { defineConfig } = require("@vue/cli-service");
    
    module.exports = defineConfig({
      transpileDependencies: true,
      devServer: {
        port: 8123,
        // 調試時啟用 gzip 壓縮
        compress: true,
        // 調試時允許內網穿透,讓外網的人訪問到本地調試的 H5 頁面
        disableHostCheck: true,
      },
      configureWebpack: {
        module: {
          rules: [
            {
              test: /\.(png|jpe?g|gif)$/i,
              type: "asset",
              parser: {
                dataUrlCondition: {
                  maxSize: 100 * 1024, // 將文件大小限製為 100kb 以內,超過 100kb 的文件將被編譯成普通的圖片文件。
                },
              },
            },
          ],
        },
      },
      chainWebpack: (config) => {
        config.resolve.alias.set("@", path.resolve(__dirname, "src"));
      },
    });
    

    上面的代碼展示瞭如何使用 Webpack 5 的 asset 模塊來將圖片轉換為 base64 編碼的字元串。通過配置 dataUrlCondition.maxSize,可以指定將多大以下的文件轉換為 base64 編碼的字元串。超過這個大小的文件將被編譯成普通的圖片文件。

    另外,為了避免在 Vue 3 中使用 import 語句時出現相對路徑的問題,可以通過 chainWebpack 來配置別名,使得我們可以使用@代替 src 目錄路徑。

    優化效果:

    優化前:

    img

    img

    優化後:

    img

    img

    由上述對比可知,累積佈局偏移(CLS,Cumulative Layout Shift)指標得到了優化,是一項意料之外的優化,所以還無法肯定該優化措施能達到預期。

作者:飛仔FeiZai

出處:https://www.cnblogs.com/yuzhihui/p/17269559.html

聲明:歡迎任何形式的轉載,但請務必註明出處!!!


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

-Advertisement-
Play Games
更多相關文章
  • 廣告主們都希望以低預算獲得更高的廣告投放收益,在投放廣告後,想要瞭解高回報的渠道,往往需要收集並分析繁雜的數據,耗時耗力。通過廣告監測,廣告主可以準確的追溯用戶渠道來源,看到不同流量的用戶價值,分析廣告投放效果,從而指導廣告的出價和投放素材的優化,把預算花在刀刃上。 針對廣告主們廣告監測的需求,華為 ...
  • 前言 考慮到學生和非電腦專業人士,本文整理了幾個國內免翻牆可以免費訪問的 ChatGPT 網址。在撰寫本文之前,我其實收集了很多網址,但經過親測,目前僅有以下幾個網址可用。,如果對 ChatGPT 使用需求量比較大的,建議通過如下鏈接註冊一個,因為真的不知道哪天會失效,這事只能看臉。 ChatGP ...
  • 1、webpack的作用 模塊打包工具,可以將項目打包成相容瀏覽器的格式,或者打包成手機app等。 它做的事情是,分析你的項目結構,找到JavaScript模塊以及其它的一些瀏覽器不能直接運行的拓展語言(Scss,TypeScript等),並將其轉換和打包為合適的格式供瀏覽器使用 2、node的作用 ...
  • <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="wi ...
  • // 註意: 基本數據類型不存在深淺拷貝,只是值傳遞,複合數據類型才有深淺拷貝之說 var obj1 = { name: "吳亦凡" }; var obj2 = obj1; obj1.name = "羅志祥"; // 相當於把obj1的指針複製了一份給了obj2,兩個指針指向了堆記憶體中的一塊記憶體地址 ...
  • 本篇僅以HBuilder X為例,其餘開發軟體同樣適用 這裡兩種方法,使用script標簽直接引入本地的vue.js或使用CDN引入。 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 CSS3提供了Animation關鍵幀動畫,我們在工作中比較常用。但在寫CSS動畫的時候,其實Animation能實現兩種動畫模式: 補間動畫 設置關鍵幀的初始狀態,然後在另一個關鍵幀改變這個狀態,比如大小、顏色、位置、透明度等,電腦將自 ...
  • Javascript: 網頁可見區域寬: document.body.clientWidth 網頁可見區域高: document.body.clientHeight 網頁可見區域寬: document.body.offsetWidth (包括邊線的寬) 網頁可見區域高: document.body. ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...