减少初始化开销

更新时间:

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

避免引入耗时自执行模块

推荐级别:强烈

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

反例

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

正例

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

优化 app.ux 数据管理

推荐级别:建议

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

  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>
复制代码