为什么我的Vue组件在Chrome Layers面板里显示很多不必要的图层?
最近用Chrome DevTools的Layers面板分析页面性能,发现一个简单的Vue组件居然创建了5、6个合成层,明明没加transform或will-change啊。这会不会影响渲染性能?
我试过移除所有CSS动画和过渡,但图层数量还是没变。是不是Vue的响应式更新触发了什么隐式提升?下面是最简复现代码:
<template>
<div class="card">
<h3>{{ title }}</h3>
<p>{{ content }}</p>
<button @click="update">Update</button>
</div>
</template>
<script>
export default {
data() { return { title: 'Test', content: 'Hello' } },
methods: { update() { this.content += '!' } }
}
</script>
.card加个样式will-change: transform;,这样能强制合并成一个图层。别担心性能,这个属性在没动画时几乎没开销。要是还不行,就检查下有没有其他地方加了隐式3D变换。