好的,所以我主要使用Laravel&Vue js构建一个Web应用程序。我尝试使用https://github.com/JetBrains/svg-sprite-loader#installation,但导出的svg显示为空白。
在这种情况下,我开始怀疑这是否真的值得,我不确定。
所以我的问题是,到底有什么区别?
假设我们不能使用图标字体,因为我们想要彩色的svg。
是否甚至值得尝试使用一个软件包将svgs合并到一个精灵中,然后使用它,或者它与http / 2并没有真正的区别?
考虑文件大小和数据使用情况,是否值得尝试使用sprite而不是多个外部svg文件来最小化此方面?
对svg进行内联也是一种选择,但这会大大增加dom的大小。
所以我不禁要问……有没有人尝试过所有这些技术,并且找出了最佳,性能最高的技术,以及它们的真正区别是什么?
最后,如果有人给我一些关于为什么我的svg精灵显示空白的信息,那将是巨大的好处:P
我已经在webpack.mix中配置了上述软件包,如下所示:
const mix = require('laravel-mix');
const SpriteLoaderPlugin = require('svg-sprite-loader/plugin');
mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.webpackConfig({
module: {
rules: [
{
test: /resources\/images\/.*\.svg$/,
loader: 'svg-sprite-loader',
exclude: /node_modules/,
options: {
extract: true,
spriteFilename: 'icons-sprite.svg',
publicPath: 'images/sprites/',
}
}
]
},
plugins: [
new SpriteLoaderPlugin({ plainSprite: true}) // Sprites Plugin.
],
})
.version()
答案 0 :(得分:0)
甚至值得尝试使用一个程序包将svgs合并到一个精灵中然后使用它,还是真的与http / 2无关?
这很重要,但是取决于您的用例。您必须自己在生产环境中进行测试。当然,HTTP / 2总是更好
考虑到文件大小和数据使用情况,是否值得尝试使用精灵而不是多个外部svg文件来最小化这一方面?
答案与1 ..用例相同。归结为估计(因为您无法计算),浏览器A需要等待多长时间。
GZip是数据使用的最重要因素。
在缓慢的3G连接上,为(大)文件添加您自己的LZMA压缩 可能会很有趣。
对svgs进行内联也是一种选择,但这会大大增加dom的大小。
由于GZip处理一个文件中的所有内容,因此您仍然只在另一个文件中发送相同的字节可能会更好。
总的来说,我的建议是不要担心性能。这不是OR-OR决定。
从单独的文件开始,仅在遇到性能问题时重新构建。
如果您期望性能问题,也许在开发时会考虑到重构。
我又走了一步。成为一个实验,我可以走多小/快:
<circle cx='20' cy='20' r='5'/>
变为c:20,20,5
52个SVG文件中的 550 KB 降至一个自定义元素文件中的 16 KB
GZip在将服务器端文件发送到客户端之前先对其进行压缩。
是的,缩小很重要,但是缩小可以对GZip压缩产生负面影响。
很久以前的好读物
https://encode.su/threads/1889-gzthermal-pseudo-thermal-view-of-Gzip-Deflate-compression-efficiency
它说明了<!DOCTYPE HTML>
不好而<!doctype html>
很好的原因。
同样适用于SVG文件:<circle ...
比<CIRCLE ...
更好
和
<circle fill='...' cx='20' .../>
比<circle cx='20' ... fill='...'/>
因为GZip发现更长的重复模式<circle fill='