We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode 25: 難道公司發大財了!?App Launch Time 加速面面觀

25: 難道公司發大財了!?App Launch Time 加速面面觀

2020/2/16
logo of podcast weak self

weak self

Shownotes Transcript

這集由波肥與喬喬聊聊:

  • 為什麼要加速 App Launch Time?

  • 什麼時候做?

  • 以及怎麼做?

  • 庫存已久的題目一次補完

{ 完整節目筆記 https://weakself.dev/episodes/25) }

什麼時候做 App Launch Time 加速?

公司有在賺錢的時候

App Launch 的三個階段

  • Pre-main: Loading (MachO + dylib) / Rebase & Binding / ObjC Setup / Initializer

  • Main: App 的入口

  • Post-main

  • Pre-main 提到的笑話)

Swift 專案裡的 main 去了哪?

  • @UIApplication 做完全部工作了

  • 寫自己的 main.swift (程式碼))

各階段加速的不同策略

  • Pre-main Loading: 減少 App size;減少 dylib 數目 (merge pods); 或者變成 statically linked pods Rebase/Binding: iOS 13 幫你用 dyld3 做好 cache 了 Objc setup: 少點 ObjC code;少點 Category Initializer: 盡量用 +initialize 取代 +load

  • Post-main: 少做事,多 lazy,盡量平行化處理

  • 掃瞄沒用到 ObjC selector 的 script)

測量,別猜!

  • Xcode scheme 新增 env variable 可取得 pre-main 各時間: DYLD_PRINT_STATISTICS = 1DYLD_PRINT_STATISTICS_DETAILS = 1

  • 合併 Pods 的 plugin)

  • Pods 改 statically linked (Podfile example))

  • MetricKit 的介紹文章) 與 WWDC session)

  • 在用戶端測量 pre-main 所花時間的程式碼)

奇技淫巧

更多 weak self

-- Hosting provided by SoundOn)