Files
platform-worker-ios/HealthEmergency/STARTUP_OPTIMIZATION.md
T
2026-04-21 14:58:48 +08:00

192 lines
5.5 KiB
Markdown

# 启动优化方案
## 🔍 发现的瓶颈
### 1. **TabbarController 一次性创建 4 个 ViewController**
```swift
// 现在的做法 - 启动时全部创建
let v1 = HomeViewController()
let v2 = MarketViewController()
let v3 = MessageViewController()
let v4 = MineViewController()
```
**问题**:每个 ViewController 都会在 viewDidLoad 中:
- 加载 UI
- 初始化主题系统
- 添加通知观察者
- 可能加载网络数据
### 2. **MktNavigationController 初始化开销**
- 每个 NavigationController 都要:
- 设置主题
- 添加手势识别器
- 配置导航栏外观
### 3. **主题系统初始化**
- ThemeManager 在每个 ViewController 中都要初始化
- 每个 ViewController 都要添加通知观察者
---
## ✅ 优化方案
### 方案 1:延迟加载 ViewController(推荐)
```swift
class TabbarController {
static let shared = TabbarController()
private init() {}
private var viewControllers: [UIViewController?] = [nil, nil, nil, nil]
func customBouncesStyle() -> ESTabBarController {
let tabBarController = ESTabBarController()
self.applyCurvedShadow(tabBarController.tabBar)
// 只创建第一个 ViewController
let v1 = HomeViewController()
let nav1 = MktNavigatonController(rootViewController: v1)
// 其他 ViewController 延迟创建
let nav2 = UINavigationController()
let nav3 = UINavigationController()
let nav4 = UINavigationController()
// 设置 TabBar 项
v1.tabBarItem = ESTabBarItem(BouncesView(), title: "首页",
image: UIImage(named: "tabbar_shouye_normal"),
selectedImage: UIImage(named: "tabbar_shouye_select"))
nav2.tabBarItem = ESTabBarItem(BouncesView(), title: "极速租",
image: UIImage(named: "tabbar_fenlei_normal"),
selectedImage: UIImage(named: "tabbar_fenlei_select"))
nav3.tabBarItem = ESTabBarItem(BouncesView(), title: "客服",
image: UIImage(named: "tabbar_kf_normal"),
selectedImage: UIImage(named: "tabbar_kf_select"))
nav4.tabBarItem = ESTabBarItem(BouncesView(), title: "我的",
image: UIImage(named: "tabbar_mine_normal"),
selectedImage: UIImage(named: "tabbar_mine_select"))
tabBarController.viewControllers = [nav1, nav2, nav3, nav4]
tabBarController.delegate = self
self.viewControllers[0] = v1
return tabBarController
}
// 当用户切换 TabBar 时才创建对应的 ViewController
func tabBarController(_ tabBarController: UITabBarController,
didSelect viewController: UIViewController) {
guard let navController = viewController as? UINavigationController else { return }
let index = tabBarController.selectedIndex
// 如果已经创建过,直接返回
if viewControllers[index] != nil {
return
}
// 延迟创建
let vc: UIViewController
switch index {
case 1:
vc = MarketViewController()
case 2:
vc = MessageViewController()
case 3:
vc = MineViewController()
default:
return
}
navController.viewControllers = [vc]
viewControllers[index] = vc
}
}
extension TabbarController: UITabBarControllerDelegate {
// 实现 delegate 方法
}
```
### 方案 2:异步初始化主题
在 AppDelegate 中延迟初始化主题:
```swift
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = TabbarController.shared.customBouncesStyle()
self.window?.makeKeyAndVisible()
// 延迟初始化主题(不阻塞启动)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
_ = ThemeManager.shared
}
return true
}
```
### 方案 3:优化 MktNavigationController
移除不必要的初始化:
```swift
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
self.navigationBar.isHidden = self.isHidden
// ... 其他代码 ...
// 延迟设置主题(不阻塞启动)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
self.setupTheme()
NotificationCenter.default.addObserver(
self,
selector: #selector(self.themeDidChange),
name: NSNotification.Name("ThemeDidChangeNotification"),
object: nil
)
}
}
```
---
## 📊 优化效果预期
| 优化项 | 启动时间减少 |
|------|----------|
| 延迟加载 ViewController | 60-70% |
| 异步初始化主题 | 10-15% |
| 优化 NavigationController | 5-10% |
| **总体** | **70-80%** |
---
## 🎯 推荐方案
**使用方案 1(延迟加载)** 效果最好,因为:
- ✅ 启动时只创建首页
- ✅ 用户切换 TabBar 时才创建其他页面
- ✅ 用户感知不到延迟
- ✅ 内存占用更低
---
## 实施步骤
1. 修改 TabbarController 实现延迟加载
2. 添加 UITabBarControllerDelegate
3. 在 didSelect 中创建对应的 ViewController
4. 测试各个 TabBar 页面的切换
这样启动速度会明显提升!