谈谈flex的性能问题

1)首先性能问题一定是一个相对概念,flex 布局相比正常的 block layout(non-float)性能开销一定更大。事实上,block layout 永远都是 single-pass,而 flex 布局却总会激发 multi-pass codepaths。比如常用的 flex-align: stretch 通常都是 2-pass,这是无可争议且难以避免的短板,天生基因决定。但是我们还是要完成复杂的布局,往往传统手段并不能解决问题。

2)性能问题依然是一个相对概念。各种复杂场景下居中或者居边的需求非常高。flex 布局相比 table 布局,栅格化 grid 布局,在性能开销上有一定优势。

display: table VS flex
重复一千次这样的DOM

<div class="wrap">
    <div class="cell description">Item Description</div>
    <div class="cell add">Add</div>
    <div class="cell remove">Remove</div>
</div>

并分别使用 flex 和 table 布局,并采用 Navigation Timing API 进行布局速度测量。

<script type="text/javascript">
    ;(function TimeThisMother() {
        window.onload = function(){
            setTimeout(function(){
            var t = performance.timing;
                alert("Speed of selection is: " + (t.loadEventEnd - t.responseEnd) + " milliseconds");
            }, 0);
        };
    })();
</script>

最后得到结果
flex 布局:Speed of selection is: 248 milliseconds;
table 布局:Speed of selection is: 282 milliseconds;
flex 布局要更快。

3.新版 flex 布局一般比旧版布局模型更快,同样也比基于浮动的布局模型更快。
这里来特殊对比一下 flex 布局和浮动布局在性能上的表现 :
下面显示了1300个框上使用浮动的布局开销


image.png

我们更新此示例以使用 flex,则出现不同的情况:


image.png

明显,对于相同数量的元素和相同的视觉外观,flex 布局的时间要少得多(本例中为分别 3.5 毫秒和 14 毫秒)。

最后,布局性能的开销,一般考虑因素如下:

  1. 需要布局的元素数量;
  2. 布局的复杂性。

相对地,对于布局性能建议主要有:
应尽可能避免触发布局(layout/reflow);
避免强制同步布局和布局抖动;

最后在下方留一个Chris Coyier 实现了这样一个 flex 布局生成器。自行打开 Chrome Dev Tools > Timeline,点击“record” 按钮,滑动滑块并停止。查看flex 布局的性能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,796评论 1 92
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,009评论 3 119
  • 我一直都有想把这两三年的寒暑假打工经历记录下来的想法,可一直推到现在才开始。 毕竟以后都不会再有这种经历这种感受了...
    baymini1996阅读 233评论 0 0
  • 《富爸爸 富爸爸》的作者罗伯特 清崎有两个爸爸,富爸爸和穷爸爸,穷爸爸受过高等教育,聪明绝顶,有过博士学位,曾经没...
    芃芃女孩阅读 1,300评论 12 19
  • 对于美国圣多斯咖啡,不知道大家知道多少呢?美国圣多斯咖啡是小资女人必须的咖啡厅,那么可以说是一座城一个梦,十分惬意...
    小李广利荣阅读 370评论 0 0