最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

使用Mixin性能更好_html/css

来源:懂视网 责编:小采 时间:2020-11-27 16:39:19
文档

使用Mixin性能更好_html/css

使用Mixin性能更好_html/css_WEB-ITnose:原文链接: Mixins Better for Performance 本文已获得原作翻译授权,转载译文时请附上原文链接以及译文链接,未经允许不得随意转载译文 译文链接:使用 Mixin 性能更好 翻译:于坤 谈到预处理器,最常见的问题就是用 @extend 还是 mixin
推荐度:
导读使用Mixin性能更好_html/css_WEB-ITnose:原文链接: Mixins Better for Performance 本文已获得原作翻译授权,转载译文时请附上原文链接以及译文链接,未经允许不得随意转载译文 译文链接:使用 Mixin 性能更好 翻译:于坤 谈到预处理器,最常见的问题就是用 @extend 还是 mixin

原文链接: Mixins Better for Performance

本文已获得原作翻译授权,转载译文时请附上原文链接以及译文链接,未经允许不得随意转载译文

译文链接:使用 Mixin 性能更好

翻译:于坤

谈到预处理器,最常见的问题就是用 @extend 还是 mixin?我一直强烈支持一个观点,尽量不要用 @extend,原因有很多:

1,它会改变你的 css 顺序,有潜在风险

2,它会产生尴尬的分组,将无关的选择器放到一起

3,它很贪婪,@extend 会继承每一个实例,而不仅仅是你真正需要的那个

4,它会让你的代码很快失控( 图1, 图2)

现在,因为 @extend 不符合设计模式,奇葩用法逐渐减少,令人欣慰,但我觉得还是不够。

昨天跟一个客户讲课时,提到 @extend。我回答,永远不要用 @extend!客户说,但是 @extend 性能更好啊,生成更少的代码。

确实 @extend(正确使用的话)会产生更少的代码,但是我的回答依然是, 不,mixin 对性能更好。

就算没有测试,我也能很自信的这样回答,因为我的理由很充分:

因为 gzip 偏爱重复的内容,所以1000个重复的声明,比1000个不同的声明有更好的压缩率。

大家在说性能的时候,通常都是在说文件大小,但我们开启了 gzip 压缩以后(你也开启了吧?),就应该考虑网络传输中的文件大小。

我的想法是,我们用 gzip 压缩 css 以后,含有更多重复字符串的文件,比基本上没有重复内容的要小很多,无论原来的 css 文件大小怎样。我断定,大一点的,但是重复内容更多的文件,压缩后更小。

回到酒店我测试了一下我的理论。

实验

我的步骤是这样的

1,创建两个css文件2,每个文件都有1000个不同的 class,用 sass 生成

@for $i from 1 through 1000 { .#{unique-id()}-#{$i} { ... }}

3,我给每一个 class 一个独立的声明,用类名加随机字符串,生成无意义的名称和选择器。

@for $i from 1 through 1000 { .#{unique-id()}-#{$i} { content: "ibf#{&}jaslbw"; }}

4,然后选择三个常见的 css 声明,给这1000个 class 共用:

color: red;font-weight: bold;line-height: 2;

5,一个用 mixin 共享这三句样式声明

@mixin foo { color: red; font-weight: bold; line-height: 2;} .#{unique-id()}-#{$i} { @include foo; content: "ibf#{&}jaslbw";}

6,另外一个用 @extend 共享

%foo { color: red; font-weight: bold; line-height: 2;} .#{unique-id()}-#{$i} { @extend %foo; content: "ibf#{&}jaslbw";}

测试代码都在 github(https://github.com/csswizardry/extend-vs-mixin)

这样生成了两个文件,每个都有1000个独立的 class,1000个独立的声明,还有分别用两种方法共享三条 css 规则。文件谁大谁小应该不出所料:

– mixin.css 108K

– extend.css 72K

– 两个文件的差距有 36K

– 使用 mixin 产生的文件是使用 @extend 的150%

这跟我的期望一样,mixin确实比 @extend 产生的文件更大。但是!我们不用担心文件系统中的文件大小,而应该关心 gzip 压缩后的文件大小。我用gzip压缩后:

– mixin.css 12K

– extend.css 18K

– 两个文件相差 6K

– 使用 mixin 比 @extend 减少了33.333%的文件大小。

差距惊人!一开始 mixin 是 @extend 的1.5倍,现在却比 @extend 小 0.3倍。我的理论是对的!

让测试更真实

我认为上面的测试很公平,类名用独特的字符串阻止压缩,这样更能提现共享规则的压缩效果。也就是说,这个测试太理想,不真实。所以我决定做更有说服力的测试,从真实的项目中拿出编译后的 css 文件,复制两份,然后分别 @import 刚才生成的两个测试文件。这时我的测试文件和1794行真正的、实际项目里正在用的 css 放在一起。生成的测试文件如下:

– mixin.css 16K

– extend.css 22K

– 两个文件差距是 6K

– 使用 mixin 比使用 @extend 小27%。

绝对数字微不足道(才6K)但是相对值却是节省27%的宽带,做的调整仅仅是用 mixin 生成重复的声明,代替用 @extend 生成重复的选择器。

使用 mixin 性能更好

我的测试显示,mixin 最终比使用 @extend 网络性能更好,未压缩时更大的文件,gzip 的工作原理也让它们变得更节省宽带。这表明 @extend 并没有性能优势,加上它对 css 的坏处,请不要再用它了。

原文链接: Mixins Better for Performance

本文已获得原作翻译授权,转载译文时请附上原文链接以及译文链接,未经允许不得随意转载译文

译文链接:使用 Mixin 性能更好

翻译:于坤

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

使用Mixin性能更好_html/css

使用Mixin性能更好_html/css_WEB-ITnose:原文链接: Mixins Better for Performance 本文已获得原作翻译授权,转载译文时请附上原文链接以及译文链接,未经允许不得随意转载译文 译文链接:使用 Mixin 性能更好 翻译:于坤 谈到预处理器,最常见的问题就是用 @extend 还是 mixin
推荐度:
标签: 使用 html css
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top