在進行平臺前端系統開發時每每單個路由頁面須要繼承多個功能模塊,而咱們的屏幕一次能顯示的內容時有限的,因此針對這個場景對系統首屏優化是有必要的。前端
一個前端頁面組合多個模塊的方式通常有兩種: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>
複製代碼