深入理解SVGO-Loader:优化SVG文件的利器

SVG 是一种基于 XML 的矢量图形语言,在Web开发中,用于实现矢量图形。相较于位图,它能无损放大且在Retina屏幕下保持清晰。而SVG图片的优化也显得非常重要,不仅可以减轻网页加载时的负担,还能优化网站的性能,缩短页面的加载时间。SVGO-Loader就是一款优化SVG文件的利器,本文将从多个方面对它进行详细阐述,帮助读者更好地理解并应用它。

一、安装和配置SVGO-Loader

SVGO-Loader 是 webpack 的一个 loader,用于优化 SVG 文件。下面,我们将从安装、配置两个方面来介绍如何使用 SVGO-Loader。

1、安装

npm install --save-dev svgo-loader svgo

2、配置

module: {
  rules: [{
    test: /\.svg$/,
    use: [
      'file-loader',
      {
        loader: 'svgo-loader',
        options: {
          plugins: [
            { removeTitle: true },
            { convertColors: { shorthex: false } },
            { convertPathData: false }
          ]
        }
      }
    ]
  }]
}

在上述代码中,我们首先安装了 svgo 和 svgo-loader。然后在 module.rules 中配置规则,当文件后缀为 .svg 时,使用 svgo-loader 进行优化。我们可以通过 options 配置选项来对 SVG 进行优化。在本例中,我们使用了三个插件,分别是 removeTitle(删除标签中的 title ),convertColors(转换颜色),convertPathData(转换路径数据)。

二、使用SVGO-Loader进行SVG优化

SVGO-Loader作为webpack的一个loader,可以在自动化构建项目过程中对SVG进行优化校验,以实现快速web应用。SVGO-Loader的优化特点大致如下:

1、删除无用信息:SVGO-Loader可以删去SVG里面一些不必要的(宽高默认值的z轴坐标等等)信息。

<svg version="1.1" ... height="128px" width="128px">
  <desc>Created with Sketch.</desc>
  <defs></defs>
  <path fill="#333333" d="M64 ...z"></path>
</svg>

优化后的结果:

<svg xmlns="http://www.w3.org/2000/svg">
  <path fill="#333333" d="M64 ...z"></path>
</svg>

2、转换颜色格式:SVGO-Loader可以将所有颜色格式转换为你所需要的格式。比如从rgb或rgba转为#HEX颜色。

<path fill="rgb(255, 255, 255)"></path>

通过SVGO-Loader, 可以将上述代码转换为:

<path fill="#ffffff"></path>

3、优化路径:SVGO-Loader 通过调整路径结构来减少代码行数和缩小文件大小。

<path d="M20,40 L10,30 L20,20 L30,10 L40,20 L50,30 L40,40 L20,40"></path>

优化后的结果:

<path d="M20,40L10,30L20,20L30,10L40,20L50,30L40,40Z"></path>

三、SVGO-Loader的插件与配置

SVGO-Loader的 options 中的 plugins 属性是一个插件数组,通过这个数组你可以很容易地控制对SVG的优化。下面罗列了一些常用的插件及其功能。

1、removeTitle

用于删除 <title> 标签

{ removeTitle: true }

2、removeDesc

用于删除 <desc> 标签

{ removeDesc: true }

3、convertColors

color 指的是 SVG 中的填充和描边颜色。这个插件可以将这些颜色格式转换为你所需要的格式。它有以下几个选项:

shorthex: 是否使用短格式的#RGB,如为 false,则使用完整的 6 位 hexadecimal。

{ convertColors: { shorthex: false } }

4、convertPathData

用于将 path 数据进行优化,它有两个选项:

noSpaceAfterFlags:布尔,默认为 true,该插件可以优化 path 数据,删除无用空格。

floatPrecision:整数,保留多少小数位。

{ convertPathData: { noSpaceAfterFlags: true, precision: 2 } }

5、removeAttrs

用于将指定的属性从 SVG 中删除,有三个选项:

attrs:数组,要删除的属性列表。

element: 字符串,表示要删除属性的标签。

options:配置属性对象。下面是一些可用的配置:

preserveCurrentColor:是否保留currentColor属性。

inheritStyleFromElement:是否从XML父级组件中继承内敛样式。

removeAttributesByRegex:可使用正则表达式删除属性。


{ removeAttrs: { attrs: ['fill', 'stroke'], element: 'path', options: {inheritStyleFromElement: false} } }

四、性能优化分享

优化 SVG 文件同时也是优化 Web 性能的一部分。下面是一些有关 SVG 以及 SVG 优化的最佳实践。

1、避免使用压缩的 SVG

将 SVG 压缩后会使 SVG 文件变小,但是反过来也会增加文件解压的时间。因为SVG文件需要在将其渲染前先解压缩。一些现代的浏览器已经开发支持压缩格式的 SVG,因此,并不需要将 SVG 压缩。

2、规范化 SVG 的 viewBox 属性。

使用 viewBox 来定位 SVG,而不是将 SVG 的坐标数组直接嵌入页面。

3、减少 SVG 文件中的节点数量。

SVG文件能够随意扩大或缩小而不失真,与之对应的,它的代码也更加优雅紧凑。因此,减少SVG中节点的数量是一种常见的最佳实践。同时使用 SVGO-Loader 可以帮助我们更好地实现。

4、基于 Data URI 的 SVG 加载。

数据 URI 减少了对外部资源的请求,可以将 SVG 直接嵌入到页面中。而且,它还可以在需要时动态加载。

五、总结

SVGO-Loader 是像 webpack 这样的构建工具的极好选择,用于优化 SVG。它可以快速进行 SVG 的处理、实现优化SVG文件的特定操作。使用SVGO-Loader可以轻松地操纵SVG文件来满足你的需求,让你的网站更快、更精致。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/236172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 11:58
下一篇 2024-12-12 11:58

相关推荐

  • vue下载无后缀名的文件被加上后缀.txt,有后缀名的文件下载正常问题的解决

    本文旨在解决vue下载无后缀名的文件被加上后缀.txt,有后缀名的文件下载正常的问题,提供完整的代码示例供参考。 一、分析问题 首先,需了解vue中下载文件的情况。一般情况下,我们…

    编程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • 为什么用cmd运行Java时需要在文件内打开cmd为中心

    在Java开发中,我们经常会使用cmd在命令行窗口运行程序。然而,有时候我们会发现,在运行Java程序时,需要在文件内打开cmd为中心,这让很多开发者感到疑惑,那么,为什么会出现这…

    编程 2025-04-29
  • Python程序文件的拓展

    Python是一门功能丰富、易于学习、可读性高的编程语言。Python程序文件通常以.py为文件拓展名,被广泛应用于各种领域,包括Web开发、机器学习、科学计算等。为了更好地发挥P…

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

    编程 2025-04-29
  • Python将矩阵存为CSV文件

    CSV文件是一种通用的文件格式,在统计学和计算机科学中非常常见,一些数据分析工具如Microsoft Excel,Google Sheets等都支持读取CSV文件。Python内置…

    编程 2025-04-29
  • Python zipfile解压文件乱码处理

    本文主要介绍如何在Python中使用zipfile进行文件解压的处理,同时详细讨论在解压文件时可能出现的乱码问题的各种解决办法。 一、zipfile解压文件乱码问题的根本原因 在P…

    编程 2025-04-29
  • Python如何导入py文件

    Python是一种开源的高级编程语言,因其易学易用和强大的生态系统而备受青睐。Python的import语句可以帮助用户将一个模块中的代码导入到另一个模块中,从而实现代码的重用。本…

    编程 2025-04-29
  • Python合并多个相同表头文件

    对于需要合并多个相同表头文件的情况,我们可以使用Python来实现快速的合并。 一、读取CSV文件 使用Python中的csv库读取CSV文件。 import csv with o…

    编程 2025-04-29
  • lsw2u1:全能编程开发工程师的利器

    lsw2u1是一款多功能工具,可以为全能编程开发工程师提供便利的支持。本文将从多个方面对lsw2u1做详细阐述,并给出对应代码示例。 一、快速存取代码段 在日常开发中,我们总会使用…

    编程 2025-04-29

发表回复

登录后才能评论