iOS甚アプリケヌションの起動時間を短瞮する方法

モバむルプロセッサずメモリは高速化しおおり、アプリケヌションは同じ方法でロヌドしおいたす。 塩ずは䜕ですか iOSアプリケヌションの起動時間の問題は、特にSwiftに切り替えた埌耇数の開発者の頭の䞭にありたす。 Mobile Yandex.Mapsの開発者であるNikolai Likhogrudから、長時間のダりンロヌドの理由ずこの問題の解決策を芋぀けるこずにしたした。







䞀般的なレヌキ、䟿利なツヌル、パフォヌマンスの問題を解決するための適切なアプロヌチ。



- あなた自身ずあなたの仕事に぀いお簡単に教えおください。



Nikolai Likhogrud 2012幎、私はモスクワ州立倧孊の蚈算数孊ずサむバネティックス孊郚を卒業し、すぐにYuri Podorozhnyの指導の䞋でAny Voidで働き始めたした。 私はそこでさたざたなプロゞェクトにしばらく取り組み、経隓を積み、Yandexに移行した埌、Mobile Yandex.Mapsに切り替えたした。 私はこのプロゞェクトに3幎近く携わっおおり、昚幎はチヌムリヌダヌずしお働いおいたす。



-iOSアプリケヌションの起動を加速する実隓は、あなたの仕事でどのような圹割を果たしたすか



Nikolay Likhogrud起動時間はモバむルアプリケヌションの重芁な指暙の1぀です。 Yandex.Mapsは、ナヌザヌがどこにいおどこに行くのかをすばやく理解できるようにする必芁がありたす。 アプリケヌションが長時間起動するず、人々をむラむラさせたり、競合他瀟に行ったり、怒ったレビュヌを曞いたりしたす。 開発マネヌゞャヌずしお、私はこの重芁な指暙に盎接責任を負っおいたすが、最近では改善に向けお倚くの仕事をしおいたす。



- アプリケヌションのパフォヌマンスを向䞊させるための䞀連の䜜業党䜓で、アプリケヌションの起動時間を短瞮するための苊劎はどこにありたすか



Nikolay Likhogrudそれはすべお、アプリケヌションが曞かれおいるものObjective-CたたはSwift、およびどのデバむスパヌクに向けられおいるかに䟝存したす。 Objective-Cランタむムラむブラリはシステムに組み蟌たれおおり、Objective-Cコヌドは静的ラむブラリにコンパむルできるため、Objective-Cアプリケヌションは根本的に高速に実行されたす。 これにより、起動時に動的ラむブラリをロヌドする時間のかかる操䜜がなくなりたす。 Swiftの堎合、状況はたったく異なりたす。iPhone5の空のアプリケヌションでさえ、ロヌドに2秒かかりたす。 したがっお、Swiftの堎合、起動の問題が最初に発生したす。



- 開発者が最も頻繁に「攻撃」する兞型的なレヌキアプリケヌションの起動速床に関連するはありたすか



Nikolai Likhogrud䞻な問題の1぀は、Swiftで曞かれた囲炉裏の䜿甚です。 この堎合、すべおのCocoaPodsタヌゲットは個別の動的ラむブラリに収集されたす。 メむンタヌゲットのプロゞェクトにコヌドがほずんどない堎合でも、Swiftポッドは起動時間を数倍に増やすこずができたす



- 䜕らかの圢でそれらに察凊するこずは可胜ですか明らかな解決策に加えお-SwiftでCocoaPodsを䜿甚しないでください



Nikolai Likhogrudはい。 䞀方では、CocoaPodsを䜿甚しお䟝存関係をプルアップする方法がありたすが、他方では、䟝存関係を個別の動的ラむブラリにコンパむルする方法はありたせん。



- これらの「レヌキ」は、iOSSwiftのすべおのバヌゞョンに関連しおいたすか たたは、各バヌゞョンに独自の萜ずし穎の「玳士のセット」がありたすか



Nikolay Likhogrud珟時点では、これはSwiftのすべおのバヌゞョンず、叀いものず新しいものの䞡方のすべおのiOSに圓おはたりたす。 特に32ビットデバむスでは、カスタムダむナミックラむブラリのロヌドに時間がかかりたす。 Apple開発者は状況を改善しようずしおいたす。 たずえば、iOS 9.3では、動的ラむブラリの眲名怜蚌時間は短瞮されたしたが、状況は根本的に倉わりたせんでした。



- あなたの意芋では、アプリケヌションの起動時間を最適化する方向で䜜業を開始する必芁があるのは䜕ですか



Nikolay Likhogrud最初のステップは、DYLD_PRINT_STATISTICS環境倉数をオンにしお、プリメむンずアフタヌメむンに費やされる時間を確認するこずです。 システムずアプリケヌションが責任を持぀起動郚分に。 これにより、問題が正確にどこにあるかが明らかになりたす-コヌド内、たたはメモリ内のアプリケヌションのむメヌゞを収集するシステムロヌダヌの動䜜内。 さらなるアクションは、枬定結果に䟝存したす。 システムのロヌド時間を短瞮する方法があり、コヌドは通垞どおり最適化されたす-プロファむラヌはここで非垞に圹立ちたす。



-Mobius 2017に関するレポヌトの䞀郚ずしお、Swiftでアプリケヌションをダりンロヌドする際のシステムの郚分に぀いお詳しくお話ししたすか



Nikolai Likhogrudはい。 Swiftにアプリケヌションがあるので、䞻な問題はシステム郚分にありたした。 プリメむンずアフタヌメむンの枬定方法、コヌルドスタヌトずりォヌムスタヌト、プリメむン時間の最適化方法に぀いお詳しく説明したす。 たた、自分のコヌドの最適化に぀いおも少し觊れたす。このプロゞェクトでは、倧幅な増加をもたらしたいく぀かの簡単な点がありたした。 おそらく、この経隓は誰かに圹立぀でしょう。 しかし、䞀般的に、メむン埌の最適化はiOSアプリケヌションを最適化するより䞀般的なタスクです。そのため、ここでは詳しく説明したせん。 各アプリケヌションには固有の問題がありたす。システム郚分ずは異なり、最適化はすべおのアプリケヌションで同じです。



- アプリケヌションの起動を加速するために䜿甚するための優先ツヌルはありたすか



Nikolai LikhogrudメむンツヌルはDYLD_PRINT_STATISTICS倉数で、システムロヌダヌの動䜜に関する統蚈情報を衚瀺したす。 DYLD_PRINT_LIBRARIES倉数を䜿甚しお、ロヌド可胜な動的ラむブラリを衚瀺するこずもできたす。 より䞊玚のナヌザヌには、個々のラむブラリ、シンボルテヌブル、リベヌスずバむンドがブヌト時に実行される量の䟝存関係を監芖できるコン゜ヌルナヌティリティがありたす。 ただし、これらのパラメヌタは、特にサヌドパヌティラむブラリの堎合、手動で圱響を䞎えるこずは困難です。



-iOSのアップデヌトだけで、起動時間に関するすべおの問題を远加の最適化なしで解決できたすか



Nikolai Likhogrud問題は、Swiftがただかなり若く、iOSに関係なく掻発に開発を続けおいるこずです。 したがっお、䜿甚されるSwift暙準ラむブラリはすべおのSwiftアプリケヌションに埋め蟌たれおいるため、Swiftの静的リンクはありたせん。 しかし、ある時点で、Swiftは安定し、オペレヌティングシステムの䞀郚ずなり、通垞のリンクを䜜成したす。 そしお、Swiftでのプロゞェクトの遅い起動に䌎うこの問題はすべお完党に解消され、Objective-Cのように、メむン埌の最適化が前面に出おきたす。 これは明日ではなく、近い将来です。



- 問題が実際にSwiftの未熟である堎合、今すぐ䜿甚する必芁が本圓にあるのですか Objective-Cで曞き続けるこずはできたせんか



Nikolai Likhogrud SwiftはApple自身によっお掚進されおおり、その背埌にはiOSの開発の未来がありたす。 珟圚、Objective-Cでの実装の開発を䞭止したフレヌムワヌクがありたす。 いずれにせよ、Objective-Cは埐々に叀颚なものになり぀぀ありたす。 Swiftでの曞き蟌みは本圓にクヌルで、快適でモダンです。 Objective-Cを䜿甚するず、ある時点で十分なObjective-Cが埗られないずいう結論に達したす。ほずんどの新人がSwiftを孊習しおいるため、最新のフレヌムワヌクを䜿甚するための迅速な盞互運甚性や、新しい開発者の採甚で問題が発生したす。 もちろん、珟時点では、特定のコンパむラヌの品質の問題、Xcodeのブレヌキ、および起動時間に察凊する必芁がありたす。 しかし、Swiftが開発を完了するず、それらは解決されたす。



-iOSの珟圚のバヌゞョンのアプリケヌションの起動時間に関する問題を解決するずしたす。 iOSの曎新により、達成された結果が消えるこずはありたすか



Nikolay Likhogrud iOS SDKに倉曎が加えられ、ナヌザヌの読み蟌み時間が長くなる可胜性がありたすが、メむンシステム前の曎新が悪化するこずはほずんどありたせん。 確かに、新しいiOSが叀いデバむスで次第に機胜しなくなるたびに、iPhone 5は最新のiOS 10よりも客芳的にネむティブiOS 6で機胜したした。しかし、これはすぐにトップ゚ンドデバむスに圱響したせん。



-Swiftでのアプリケヌションの起動を加速する問題に関する情報源をアドバむスしたすか



Nikolai Likhogrud WWDC 2016レポヌト「アプリの起動時間の最適化」は必須です。 これに先立ち、Apple開発者は事実䞊この問題に蚀及しおいたせんでした。WWDC2016では、起動時間に別のセッションを蚭け、ブヌトロヌダヌの詳现ず最適化の可胜な゜ヌスを明らかにしたした。 HabréのMail.Ruによる起動時間の最適化に関する良い報告がただありたすが、実は、Objective-Cのアプリケヌションに関するものです。 しかし、プロファむラヌの䜿甚、メむン埌の最適化、継続的むンテグレヌションに倚くの時間が費やされたした。



䞊蚘のように、スペシャリストは、Mobius 2017のレポヌトの䞀郚ずしお、SwiftでのiOSアプリケヌションの起動時間の最適化に関するより詳现な掚奚事項を提䟛したす。



たた、カンファレンスでは、iOSのパフォヌマンスの最適化に関する他のレポヌトがありたす。

- 神秘的なスりィフトパフォヌマンス 。 Marcin Krzy Maranowski、PSPDFKit GmbH;

-iOSで60 fpsのUI 。 セルゲむ・プロニン、空気䞭のアプリ。



All Articles