设计更快的网页,第 2 部分:图像替换

[ad_1]

欢迎回到这个关于构建更快网页的系列。 最后 文章 谈到了仅通过图像压缩可以实现的目标。 该示例以 1.2MB 的浏览器脂肪开始,并减少到 488.9KB 的重量。 这还不够快! 本文继续浏览器饮食以减掉更多脂肪。 你可能会认为在这个过程的中途事情有点疯狂,但一旦完成,你就会明白为什么。

准备

本文再次从对网页的分析开始。 使用火狐内置的截图功能,对整个页面进行截图。 您还需要使用安装 Inkscape sudo:

$ sudo dnf install inkscape

如果你想知道如何使用 Inkscape,已经有几篇文章了 Fedora 杂志。 本文将仅说明优化 SVG 以供 Web 使用的一些基本任务。

分析

再一次,这个例子使用 getfedora.org 网页。

带有图形标记的 Getfedora 页面

这种分析最好以图形方式完成,这就是它从屏幕截图开始的原因。 上面的屏幕截图标记了页面的所有图形元素。 在两种情况下或在四种情况下更好, Fedora 网站团队已经使用措施来替换图像。 社交媒体的图标是字体的字形,语言选择器是 SVG。

有几种替换选项:

HTML5 画布

简而言之,HTML5 Canvas 是一个 HTML 元素,它允许您借助脚本(主要是 JavaScript)进行绘图,尽管它尚未被广泛使用。 当您在脚本的帮助下绘制时,元素也可以被动画化。 您可以使用 HTML Canvas 实现的一些示例包括: 三角形图案, 动画波, 和 文字动画. 但是,在这种情况下,这似乎不是正确的选择。

CSS3

使用层叠样式表,您可以绘制形状甚至为它们设置动画。 CSS 通常用于绘制按钮等元素。 但是,通过 CSS 实现的更复杂的图形通常只能在技术演示页面中看到。 这是因为图形在视觉上仍然比编码更好。

字体

使用字体来设置网页样式是另一种方式,并且 真棒 安静受欢迎。 例如,您可以在本例中用字体替换 Flavor 和 Spin 图标。 使用这种方法有不利的一面,这将在本系列的下一部分中介绍,但可以很容易地完成。

SVG

这种图形格式已经存在了很长时间,并且一直应该在浏览器中使用。 很长一段时间以来,并非所有浏览器都支持它,但那是历史。 所以在这个例子中替换图片的最好方法是使用 SVG。

为 Web 优化 SVG

优化 SVG 以供 Internet 使用需要几个步骤。

SVG 是一种 XML 方言。 圆形、矩形或文本路径等组件使用节点进行描述。 每个节点都是一个 XML 元素。 为了保持代码干净,SVG 应该使用尽可能少的节点。

SVG 示例是一个带有咖啡杯的圆形图标。 你有 3 个选项来用 SVG 来描述它。

顶部有杯子的圆形元素

<circle
style="opacity:1;fill:#717d82;fill-opacity:1;stroke:none;stroke-width:9.51950836;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke"
id="path36"
cx="68.414307"
cy="130.71523"
r="3.7620001" />

顶部有杯子的圆形路径

<path
style="opacity:1;fill:#717d82;fill-opacity:1;stroke:none;stroke-width:1.60968435;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke"
d="m 68.414044,126.95318 a 3.7618673,3.7618673 0 0 0 -3.76153,3.76204 3.7618673,3.7618673 0 0 0 3.76153,3.76205 3.7618673,3.7618673 0 0 0 3.76206,-3.76205 3.7618673,3.7618673 0 0 0 -3.76206,-3.76204 z"
id="path20" />

单路

<path
style="opacity:1;fill:#717d82;fill-opacity:1;stroke:none;stroke-width:1.60968435;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke"
d="m 68.414044,126.95318 a 3.7618673,3.7618673 0 0 0 -3.76153,3.76204 3.7618673,3.7618673 0 0 0 3.76153,3.76205 3.7618673,3.7618673 0 0 0 3.76206,-3.76205 3.7618673,3.7618673 0 0 0 -3.76206,-3.76204 z m -1.21542,0.92656 h 2.40554 c 0.0913,0.21025 0.18256,0.42071 0.27387,0.63097 h 0.47284 v 0.60099 h -0.17984 l -0.1664,1.05989 h 0.24961 l -0.34779,1.96267 -0.21238,-0.003 -0.22326,1.41955 h -2.12492 l -0.22429,-1.41955 -0.22479,0.003 -0.34829,-1.96267 h 0.26304 l -0.16692,-1.05989 h -0.1669 v -0.60099 h 0.44752 c 0.0913,-0.21026 0.18206,-0.42072 0.27336,-0.63097 z m 0.12608,0.19068 c -0.0614,0.14155 -0.12351,0.28323 -0.185,0.42478 h 2.52336 c -0.0614,-0.14155 -0.12248,-0.28323 -0.18397,-0.42478 z m -0.65524,0.63097 v 0.21911 l 0.0594,5.2e-4 h 3.35844 l 0.0724,-5.2e-4 v -0.21911 z m 0.16846,0.41083 0.1669,1.05937 h 2.80603 l 0.16693,-1.05937 -1.57046,0.008 z m -0.061,1.25057 0.27956,1.5782 1.34411,-0.0145 1.34567,0.0145 0.28059,-1.5782 z m 1.62367,1.75441 -1.08519,0.0124 0.19325,1.2299 h 1.79835 l 0.19328,-1.2299 z"
id="path2714"
inkscape:connector-curvature="0" />

您可能会看到代码变得更加复杂,需要更多的字符来描述它。 当然,文件中的更多字符会导致更大的大小。

节点清理

如果您在 Inkscape 中打开示例 SVG 并按 F2,则会激活节点工具。 您应该看到如下内容:

Inkscape - 节点工具已激活

Inkscape – 节点工具已激活

在此示例中,有 5 个节点不是必需的——位于行中间的节点。 要删除它们,请使用激活的节点工具一一选择它们,然后按 钥匙。 在此之后,选择定义这条线的节点并使用工具栏工具再次使它们成为角。

Inkscape - 节点工具使节点成为一个角落

Inkscape – 节点工具使节点成为一个角落

在不固定拐角的情况下,使用定义曲线的手柄,该曲线将被保存并增加文件大小。 您必须手动进行此节点清理,因为它不能有效地自动化。 现在你已经准备好进入下一阶段了。

使用 Save 作为函数并选择 Optimized svg。 将打开一个对话窗口,您可以在其中选择要删除或保留的内容。

Inkscape - 保存为优化 SVG 的对话框窗口

Inkscape – 保存为优化 SVG 的对话框窗口

甚至这个例子中的小 SVG 也从 3.2 KB 减少到了 920 字节,不到其原始大小的三分之一。

回到 getfedora 页面:主要部分背景中使用的灰色 voronoi 图案,经过我们对本系列第 1 部分的优化,从原来的 211.12 KB 大小降至 164.1 KB。

它导出的原始 SVG 大小为 1.9 MB。 经过这些 SVG 优化步骤后,它只有 500.4KB。 太大? 好吧,当前的蓝色背景大小为 564.98 KB。 但是 SVG 和 PNG 之间只有很小的区别。

压缩文件

$ ls -lh
insgesamt 928K
-rw-r--r--. 1 user user 161K 19. Feb 19:44 grey-pattern.png
-rw-rw-r--. 1 user user 160K 18. Feb 12:23 grey-pattern.png.gz
-rw-r--r--. 1 user user 489K 19. Feb 19:43 greyscale-pattern-opti.svg
-rw-rw-r--. 1 user user 112K 19. Feb 19:05 greyscale-pattern-opti.svg.gz

这是我为可视化这个主题所做的一个小测试的输出。 您可能应该看到光栅图形(PNG)已经被压缩并且不能再压缩了。 相反的是 SVG,一个 XML 文件。 这只是文本,可以压缩到不到其大小的四分之一。 因此,它现在的大小比 PNG 小约 50 KB。

现代浏览器可以本地处理压缩文件。 因此,很多 web 服务器都开启了 mod_deflate (Apache) 和 gzip (nginx)。 这就是我们在交付过程中节省空间的方式。 检查它是否在您的服务器上启用 这里.

生产工具

首先,没有人愿意总是在 Inkscape 中优化 SVG。 您可以在没有 GUI 的情况下以批处理模式运行 Inkscape,但无法从 Inkscape SVG 转换为优化的 SVG。 您只能以这种方式导出光栅图形。 但也有替代方案:

  • SVGO(似乎没有积极开发)
  • 冲刷

此示例将使用 scour 进行优化。 要安装它:

$ sudo dnf install scour

要自动优化 SVG 文件,请与此类似地运行 scour:

[[email protected] ]$ scour INPUT.svg OUTPUT.svg -p 3 --create-groups --renderer-workaround --strip-xml-prolog --remove-descriptive-elements --enable-comment-stripping --disable-embed-rasters --no-line-breaks --enable-id-stripping --shorten-ids

这是第二部分的结尾,您在其中学习了如何用 SVG 替换光栅图像以及如何优化它以供使用。 请继续关注 Fedora 第三部分的杂志,即将出版。

[ad_2]

Related Posts