在进行平台前端系统开发时每每单个路由页面须要继承多个功能模块,而咱们的屏幕一次能显示的内容时有限的,因此针对这个场景对系统首屏优化是有必要的。前端
一个前端页面组合多个模块的方式通常有两种:vue
针对这种形式咱们的优化主要关注点在dialog
组件的内部实现git
若是你使用的是vue,又是思考控制弹框的显示是使用
v-if
,仍是v-show
的时候github
结论是:直接使用这两个都不合适。element-ui
display:none
来控制显示隐藏的,在首屏渲染时用户彻底看不到的组件也会被实例化具体的实现策略: 首次渲染经过v-if控制,以后状态切换经过v-show控制后端
来看看目前比较流行的几个ui框架的状况。api
Dialog
、Drawer
有作优化,而类似交互场景的tab
并无这种场景就复杂点:promise
上面这些场景咱们在业务开发中无时无刻在接触到,为了提供统一的解决方式和减小重复性的工做lower-component
为此类场景给出统一封装bash
给组件设定等级,组件按等级渲染框架
lower-component
经过给组件划分等级来肯定组件的渲染时机源码地址
<lower-component level="async">
<your-component />
</lower-component>
复制代码
<lower-component level="viewport">
<your-component />
</lower-component>
复制代码
level赋值为custom,custom指定具体的策略实现。
// stage.vue
<template>
<lower-component level="custom" :custom="getList">
<your-component />
</lower-component>
</template>
<script>
export default {
methods: {
getList () {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve()
}, 1000)
})
}
}
}
</script>
复制代码
// stage.vue
<template>
<lower-component level="custom" :custom="isLoading">
<your-component />
</lower-component>
</template>
<script>
export default {
data () {
return {
isLoading: false
}
}
created () {
this.$http.get('/list').then(() => {
this.isLoading = true
})
}
}
</script>
复制代码