跳转到内容

减少初始化开销

应用初始化阶段的代码复杂度直接影响应用/页面实例的创建耗时,优化该阶段的执行效率能显著改善首屏渲染性能。

推荐级别:强烈

模块中的自执行逻辑会在导入时立即执行,导致页面加载阻塞。应将初始化逻辑移至生命周期钩子中按需执行。

反例

// init.js 中的自执行逻辑会立即执行,延长加载时间
import './init.js' // 包含立即执行的复杂初始化逻辑
export default {}

正例

export default {
onInit() {
// 将初始化逻辑移至生命周期钩子中按需执行
this.performInitialization()
},
performInitialization() {
// 具体的初始化操作
},
}

推荐级别:建议

过度加载的全局数据会延长应用启动时间,建议遵循以下原则:

  1. 仅将全局共享状态存储在 app.ux
  2. 工具类方法按需在各页面独立引入

反例

// app.ux
import utils from './utils' // 引入可能包含复杂逻辑的工具库
export default {
utils, // 全局挂载非必要工具方法
// ...其他全局配置
}

推荐级别:建议

对复杂长页面实施分阶段加载策略:

  1. 首屏优先加载关键数据/视图
  2. 可视区域外内容延迟加载

正例 1

<template>
<div>
<div for="{{visibleItems}}">
<text>{{$item}}</text>
</div>
</div>
</template>
<script>
const fullDataset = [.../* 完整数据集 */]
export default {
data: {
visibleItems: [],
},
onInit() {
// 首屏加载前6条
this.visibleItems = fullDataset.slice(0, 6)
},
onShow() {
// onShow 后显示所有数据
this.visibleItems = fullDataset
},
}
</script>

正例 2

<template>
<div>
<!-- 首屏核心模块 -->
<critical-module />
<!-- 次要模块延迟加载 -->
<secondary-module if="{{isSecondaryLoaded}}" />
</div>
</template>
<script>
export default {
data: {
isSecondaryLoaded: false,
},
onShow() {
// 首屏渲染完成后加载次要模块
this.isSecondaryLoaded = true
},
}
</script>