iOSの性能(b)の起動時間の最適化

コールドスタートとホットスタート
  • ホットスタート:アプリケーションは、あなただけのアプリの起動に必要なデータがキャッシュに残っているとき、この時間をやり直す再び呼び出さホットスタートを起動した場合。ホットスタートは、通常の状況下では起動速度を向上させるが、アプリは手動でプロセスがまだ立ち往生再オープン状態で終了し立ち往生した後、時々発生することもあります。
  • コールドスタート:それだけのアプリやデバイスの再起動が開始されていない長い時間であれば、この場合、アプリケーションを起動し、それがコールドスタートと呼ばれています。
ビューの起動時間
  • ベストスピード:400msのは、彼らは追加しないので、任意の同期タスクは、アイコン表示起動画面をクリックすることですし、この時間の間に消えて画面を起動し400msです。この値に近いアプリの起動時間場合は、アプリは最高のタスクを開始するように最適化されていることを証明します。
  • 最も遅いスピード:20代よりも大きくない、そうでなければ、彼らは殺されるシステム。

Xcodeの環境ログに印刷開始時刻を設定するには、変数:
打开工程- > Edit Scheme- > Run- > Environment Variables
必要に応じて追加DYLD_PRINT_STATISTICSしてDYLD_PRINT_STATISTICS_DETAILS、環境変数、1はい、この機能をオンにします。

1058757-dcd7c40a4dd056b5.png
2019年5月27日PMを3.13.41.pngスクリーンショット

Total pre-main time: 433.19 milliseconds (100.0%)
         dylib loading time: 341.79 milliseconds (78.8%)
        rebase/binding time:  14.18 milliseconds (3.2%)
            ObjC setup time:  35.27 milliseconds (8.1%)
           initializer time:  41.79 milliseconds (9.6%)
           slowest intializers :
             libSystem.B.dylib :   3.40 milliseconds (0.7%)
    libMainThreadChecker.dylib :  19.68 milliseconds (4.5%)
  libViewDebuggerSupport.dylib :   8.75 milliseconds (2.0%)
最適化の開始

開始時刻を含む流域などの主な機能、で実際に二つの部分である:第一界面viewDidAppearの主な機能とメイン関数の前に:。
したがって、最適化はまた、それらのコードにおけるAPPのボトルネックの大半ので、後者から主に二つの方法で最適化結果を行われます。前のメインは、複数のライブラリにまとめ、不要な動的ライブラリの参照を、減らすために何もしない可能性の最適化のために、上記の印刷データから、それはまた、主な時間のかかる中で見られるかもしれないdylib loadingがかかり、78.8%時間を。

主な機能の後

主な機能は、最初の画面が表示さに、一般的な中に次の作業を行い、実行を開始します:

  • プロキシメソッドのAppDelegate実行、主にdidFinishLaunchingWithOptions
  • (のUIViewController UINavigationController + UITabViewController +の一般的に複数の)初期化ウィンドウ、初期ベースのViewController構造
  • ユーザに提示データ(ローカルDB /ネットワーク)、取得します。

最適化:

  1. 遅延初期化と不要のUIViewControllerやビューをロードします。

のは、ホームページの唯一の限り、起動時の初期化時に4つの項目UITabViewController、空のプレースホルダ最初のVCと他の項目のページがあるとしましょう。ホームと不要なコンテンツの内容は、ユーザが実際に見て使用する必要があるときに再初期化、遅延ロードの形で作られた、最初に初期化することはできません。

  1. 使用のために物事が実際にそれが戻ってメインスレッドでタスクを処理した後にUIの更新に来る場合、ダウン始めるが、時間のかかるバックグラウンド処理する必要がある場合。

しばしばロギングロギングは、DB操作を含む、
そのような地域の都市地区と画像処理格納されたローカルファイルを読み込むなどのファイルの読み取り、;
このような画像処理、大規模なデータ転送JSONモデルとして計算、多数の、

  1. あなたは、初期化の遅延初期化を遅らせるために試すことができます

、のような、あなたが最初の呼び出しなどになるまで待ってから、初期化を共有することができ、このようなクラッシュの統計情報として、三者SDKの初期化、。

メイン関数の前に

メインのiOSシステムの仕事の前に機能するので、最適化のこの部分は、より汎用性になる傾向があります。
プリメイン次のものがあります。

- dylib loading time: 341.79 milliseconds (78.8%)
- rebase/binding time:  14.18 milliseconds (3.2%)
- ObjC setup time:  35.27 milliseconds (8.1%)
- initializer time:  41.79 milliseconds (9.6%)
- slowest intializers :
- libSystem.B.dylib :   3.40 milliseconds (0.7%)
- libMainThreadChecker.dylib :  19.68 milliseconds (4.5%)
- libViewDebuggerSupport.dylib :   8.75 milliseconds (2.0%)

最適化:

  1. loading dylib:あなたが遅くロードするために、組み込みの動的ライブラリをキャッシュすることができますので、最初のステップは、こんなに早くダイナミックライブラリのロードシステムのDLLをロードするために開始することです。動的ライブラリの数を減らす:だから、この工程の効率を改善するための鍵は、することです。
  • 企業などを組み合わせ、動的ライブラリは、動的ライブラリは、以下のプライベートポッドで構成されて設立:XXTableView、XXHUD、XXLabel、強く読み込み速度を改善することをお勧め1 XXUIKitにマージ。
  1. rebase/binding & ObjC Runtime setup:リベースとバインディングポインタ参照は、問題に対処するために作られています。Objective Cの開発のために、主な時間は、クラス/メソッドシンボリック負荷で消費されるので、一般的な最適化プログラムは、以下のとおりです。
  • 低減__DATAポインタセグメントの数。
  • そして機能的に類似したクラスの合併カテゴリ。たとえば:UIViewの+フレーム、UIViewの+自動レイアウトは...一つにマージ
  • 未使用のメソッドとクラスを削除します。
  • マルチスウィフト構造体、Swfit構造体が静的分布しているので。あなたはを参照することができスウィフトのスケジューリングのためのメモリモデルと高度な方法
  1. Initializers
  • 初期化によって代替ロード。多くの学生は、統計情報をログに記録しないというように、強く代わりに初期化して初期化することが推奨されAOPを実現するための方法-スウィズリングを使用するようにしたいです。
    プログラムの起動時に負荷が呼び出され、この方法は、すべてのクラスが実行を完了しているロードするために待機してブロックする必要があります。初めての呼び出しのためにクラスで初期化するとき。

  • 削減__atribute__((constructor))(使用することを__attribute__((constructor))主な機能は、機能を実行することである前に、私たちはいくつかの準備作業を行うためには、使用してください)。


参考資料

起動プロセスのiOSのAppの深い理解

おすすめ

転載: blog.csdn.net/weixin_33670713/article/details/90931041