一、visibility: hidden 与 display: none
1、前者隐藏,但占据位置。后者隐藏,不占据位置
2、display
由于隐藏后不占据位置,所以造成了dom树的改变,会引发回流,代价较大
3、当一个页面某个元素经常需要切换display时如何优化,一般会用复合层优化,或者要求低一点用absolute让其脱离普通文档流也行。然后可以将话题引到普通文档流,absolute文档流,复合图层的区别,
4、可以描述下浏览器渲染原理以及复合图层和普通图层的绘制区别
(复合图层单独分配资源,独立绘制,性能提升,但是不能过多,还有隐式合成等等)
二、v-show 与 v-if
v-show
:初始化渲染时候消耗大,它是display:none控制的DOM元素显示与隐藏,主要用于频繁操作。
v-if
:是真正意义上的条件渲染(销毁与创建元素),条件为true的时候创建DOM元素,条件为false的时候销毁DOM元素。频繁使用会消耗性能
性能区别:
1、v-if有更高的切换开销,v-show有更高的初始渲染开销。 如果需要频繁的切换,使用v-show比较好,如果运行条件很少改变,使用v-if比较好。
2、v-show比v-if性能更高,因为v-show只能动态的改变样式,不需要增删DOM元素。
3、需要多种条件场景,比如id=1,=2,=3…时候,因为只有v-if,可以和v-else等连用,这种比较适合用v-if。
4、v-show不支持语法,即v-show="false"对template元素来说不起作用。但是此时的template元素支持v-if、v-else-if、v-else、v-for这些指令。
5、v-if切换时候会实时的销毁和重建内部的事件、钩子函数等,v-show只会初始化渲染时候执行,再切换时候不会执行生命后期的过程。