要約: この記事では、モバイルアプリのサイズの最適化、アプリのAPI設計、アーキテクチャ設計、アダプティブディスプレイ、高速起動などの側面からモバイルアプリのパフォーマンスを向上させる方法を包括的に紹介します。以下は翻訳です。
昨年、ロンドンからの帰りの飛行機の中で、携帯電話業界に従事している人に会いました。過去20年間、リーディングカンパニーともいえる大企業で新技術の導入を担当。
一緒に過ごした8時間のフライトの間、私は彼が言ったことのいくつかについて考えてきました。実際、モバイル アプリケーションのパフォーマンスを監査して、どれだけ大幅な改善が行われたかを確認することさえできないと彼は考えています。
サンフランシスコに到着後、この件について知るためにさらに多くの携帯電話業界の人々に連絡を取ったところ、全員が同様の見解を持っていることがわかりました。誰もが議論するのは、コードの品質と基礎となるフレームワークだけです。
私はすぐに、Simform でアプリを構築する方法、いくつかの非常に優れたプラクティスを探索し、これらのプラクティスに従い、ベンチマークを確立し、規模が数十億ドルに達する可能性がある既存のアプリケーションを突破する方法を考えました。
次の要素がモバイル アプリケーションの品質に大きく影響します:
アプリのサイズ
アプリのパフォーマンス
指定されたプラットフォームのガイドライン
アーキテクチャデザイン
それでは、モバイルアプリを高速化するための、採用しやすい手順を使って簡単な方法で最適化する方法を見てみましょう。
アプリケーションのサイズを最小限に抑える
携帯電話には強力な GPU が搭載されていませんが、ローエンド構成の携帯電話が Android 市場シェアの大部分を占めています。 2G や 3G さえサポートしておらず、すぐに必要な大規模なアプリケーションをダウンロードするのはユーザーにとって悪夢でしょう。このようなローエンドの携帯電話では、アプリが占めるスペースが少なければ少ないほど良いのです。
ネットワークを最適化します
最初にテキスト、次に画像
ネットワークを最適化して、最初にテキストデータをロードしてみてください。アプリケーション内の画像ベースのコンテンツ表示は、非同期的に読み込むことができます。
重複したネットワークリクエストを避ける
Android 用の有名な Volley アプリは、このリクエストについて詳しく知ることができます。アプリケーションのパフォーマンスが低下した場合、Android アプリケーションは Volley を使用して 2 つのリクエストを同時にサーバーに送信できます。1 つのリクエストを削除すると、そのリクエストは削除されますが、アプリケーションの応答はそのようなリクエストは存在しないというものになります。機能の問題だけでなく、特にアプリケーション ユーザーが数百万人いる場合、重複したリクエストはシステムの輻輳を増大させ、アプリケーションのパフォーマンスを低下させます。リクエストの数が 2 倍になれば、サーバーの数も 2 倍になることを想像してください。コストを削減しようとすると、非常に必死になります。
接続品質を理解し、それに基づいて調整を行う
アプリケーションがネットワークの状態に基づいて利用可能かどうかを判断する必要があるとします。アプリケーションは、ユーザーが現在いるネットワーク状態に基づいて配信されるコンテンツの品質を変更できるため、アプリケーションの使用が失敗しないことが保証されます。
効果的な API 設計
API の設計方法は、アプリケーションのパフォーマンスに大きな影響を与えます。 API 設計が不完全または遅延していると、アプリケーションの負担が増加します。 API の回避策は、多くの場合、ネットワークの制限に過度の負担をかけます。
アプリケーションが次の特性を持つように、モバイル アプリケーションの API ロードを設計します。
一貫性: 開発者は期待されることを理解しておく必要があり、API の一貫性の設計に関しては調整の余地はありません。
完全性: 簡略化された回避策があります。
UI から始めてデータに至るまでは、一貫性と完全性を備えた API ロードを設計するための優れた方法であり、それによってアプリケーションのパフォーマンスが向上します。すべてのリクエストを携帯電話から API に送信するのではなく、実際に必要なリクエストのみを送信してください。
アプリ内の画像を最適化する
アプリ内の画像を最適化するには、次のことができます:
ベクター画像を使用する
動的サイズの画像を提供する
異なるカラー画像セットを使用する代わりにカラーフィルターを使用する
画像キャッシュを使用する
PicassoやFrescoなどのライブラリを使用する
オフライン最適化のためにデータをキャッシュする
ネットワーク環境が悪い場合、データ取得中に取得したデータが全て表示されてしまいます。これを実行すると、次のことが行われます:
サーバーの負荷を軽減します
携帯電話の無線使用回数を減らし、モバイルアプリの電力消費を削減します
自由に使えるテストチームがいない場合は、次のことができます。携帯電話を機内モードに切り替えて、アプリケーションのオフライン パフォーマンスをテストしてみてください。
アプリが携帯電話の画面サイズに適合していることを確認してください
画面サイズについては多くの議論が持ち上がっており、Android には大きな注目が集まっています。なぜなら、文字通り何千ものデバイスがあり、それぞれが独自の解像度と画面サイズを持っているからです。 。
最善の戦略として:
ビルド
中小規模の画面向けにMDPIとHDPIを最適化する
アダプティブUIフローを実現する
解像度と画面サイズをテストするためのデバイスが何百台もありませんか?エミュレータ構成でテストします。
Android のメモリ使用量
携帯電話ユーザーにマルチタスク機能を提供するために、Android では各アプリケーションが使用するメモリ量に制限が設定されており、これらの制限は静的なものではなく、モバイル アプリケーションの数に応じて増減します。そして変化する。
アプリケーション開発プロセス全体を通じて RAM の制限を考慮するとともに、バックグラウンドで実行されているアプリケーションが不必要なリソースを消費するという事実を考慮してください。
ただし、次の方法でアプリケーションを最適化できます:
サービスの有効期間を制限し、サービスの存続期間を制限するためにインテントサービスの使用を検討してください
ユーザーが別のインターフェースに切り替えるとき、 UI リソースを解放します
メモリ効率の高いコード アーキテクチャを使用します
外部ライブラリの使用を最小限に抑えます
アプリの起動速度はどれくらいですか?
PlayStore の平均上位 25 アプリの起動時間は 800 ミリ秒から 4.5 秒の範囲です。現在、4.5S はほとんどのユースケースにとって多すぎます。
要するに、アプリはすぐに起動する必要があるということです。
iOS アプリケーションの起動時間を最適化するには、次の点を考慮する必要があります:
少数の dylib を埋め込む
Objective-C クラスをマージする
静的初期化ソフトウェアを排除する
Swift では、さらに使用することを Apple は推奨します
結果の測定には DYLD_PRINT_STATISTICS を使用します
dlopen() の使用を避ける
Android では、通常、次の状況がアプリの起動時間に影響します:
インスタンス化を表示する
ビットマップのデコードなど、リソース消費の高いコンテンツ
実行中のレイアウト
Android でのアプリの起動を高速化します:
初回起動時に不要な UI の部分を表示せず、後で表示できる階層プレースホルダーを使用します
メモリ割り当てを行い、可能な限りガベージ コレクションを実行します
Apteligent などのツールを使用して、アプリケーションの起動時間を監視し、最適化します
アプリケーション オブジェクト内の初期化コードを回避します
Note Live、最近起動されたアプリで、これが最初に起動されましたアプリは異なる動作をします。
デバイスのウェイクアップを減らす
携帯電話を頻繁にウェイクアップすると、システムのパフォーマンスが大幅に低下します。これによりシステム リソースが消費されます。アプリケーションが応答するスリープ解除インテントを制限できます。
ローエンドの Android スマートフォンを検討してください
すべての Android ユーザーが最新の 2G+ メモリのスマートフォンを持っているわけではありません。利用可能な Android デバイスを見ると、デバイスの機能の点で大きな内訳が見られます。
ほとんどの開発者は、パフォーマンスを向上させるためにアプリケーションを開発および最適化するときに、大きな間違いを犯します。彼らはアプリを間違ったデバイス向けに最適化しており、多くの場合、テストにはハイエンド デバイスが使用されます。
経験則として、アプリのパフォーマンスを最適化するにはさまざまなデバイスを使用する必要があります。このようにして、開発者はクロステストを行うことができます。
さまざまな速度
インターフェイスと解像度
低メモリ
スムーズなフレームレート
iOS と Android では、アニメーションとジェスチャを表示するための最大フレーム レートは 60fps です。
フレームレートが 60fps より低い場合、通常、ユーザーは行き詰まりを感じます。
16ms(60fps相当)のフレームレートを実現するには、アプリケーションで表示に使用されるコードを16ms以内に実行する必要があります。ここで、Android では 5 ミリ秒のガベージ コレクション時間がいかに高価であるかがわかります。
これがエンドユーザーにどのような影響を与えるかを評価してみましょう。 16 ミリ秒の制限を超えると、多くの場合、フレーム レートがわずかに低くなり、最大 59 fps になります。大したことないですよね?
違います!
実際には、アプリケーションが 16 ミリ秒の制限を一度でも超えると、同じフレームにウィンドウを使用できず、次のフレームを待たなければなりません。
アプリケーションの表示には 19 ミリ秒しかかかりませんでしたが、表示ウィンドウを見逃したため、ユーザーに表示される時間が 2 倍長くなりました。このようにすると、ユーザーはアプリケーションが非常に悪いものであると考えるでしょう。
新しいデバイスでユーザー データを復元する
ユーザーは多くの場合、思いどおりに動作するように携帯電話でアプリをセットアップするのに多くの時間を費やします。アプリケーションを再インストールするとき、ほとんどのユーザーは元の設定が引き続き使用できることを期待します。
構成データを保存すると、アプリケーションの品質が向上します:
ユーザーによって変更された設定
プッシュ設定通知
ユーザーが新しい画面でようこそ画面と紹介を見た場合
潜在的な消費量を発見
アプリケーションから移動潜在的な問題を排除することが重要です。潜在的な問題によりアプリケーション エラーが発生し、アプリケーション全体が破損する場合があります。統計によると、アプリケーションの動作が遅い場合、50% 以上のユーザーが 24 時間以内にアプリケーションをアンインストールします。
潜在的な関連問題を効果的に処理します:
ネットワークの状態が悪い場合、潜在的な問題要因のサードパーティのソースを制限できます
スマートフォンで消費する可能性のある API を使用する必要性を減らします
マルチタスクを処理するために iOS アプリケーション プログラムを最適化します
アプリケーションを使用しているユーザーがいるとします。アプリケーションは 60fps で適切に表示され、すべての作業が 9 ミリ秒で完了するとします。下の図に示すように:
ここで、ユーザーが携帯電話で 2 番目のアプリケーションを開くと、すべての作業が完了するまでに約 7 ミリ秒かかります。これで、次の図のようになります:
60fps のフレーム レートで表示するには、2 つのアプリケーションを合わせると 16 ミリ秒かかったことがわかります。
ユーザーが 60fps のフレーム レートで別のアプリケーションを開き、その作業が 10 ミリ秒で完了すると仮定します。現在の時間は 9+7+10=26ms です。これは、アプリケーションのデモ フレーム レートが 60fps ではなく 40fps であることを意味します。
アプリのユーザーはプログラムの遅れに気づき始め、GPU とメモリでもほぼ同じことが起こりました。
アプリがクラッシュし続けたときのことを覚えていますか?
それでは、デバイス上で実行されるアプリケーションのシナリオを見てみましょう。
さて、シーンに別のアプリケーションを導入しましたが、まだ順調に進んでおり、まだメモリが少し残っています。
別のアプリケーションをシーンに導入すると、システムには割り当てるメモリがありません。システムはプロセスを強制終了してリソースを解放します。
これが、アプリ開発が非常に難しい理由です (アプリ開発に本当に関心がある人にとっては)
これらの課題を解決するには、iOS エコシステムを少し理解する必要があります。アプリケーションをマルチタスク用に最適化する方法を見てみましょう:
ツールを使用してバグを特定して修正できます
作業に適切な優先順位を付け、メインスレッドをブロックしないようにしてください
ツールセットを特定して管理します
キャッシュを使用し、メモリ警告に応答します
仮想メモリ システムを使用してメモリ再利用を増やします
トレードオフを行います
これの 50% を守れる人であれば、パフォーマンスが向上していることがわかりますアプリケーションの改善 大きな改善。
以上がAPP のパフォーマンスを向上させる方法の概要についての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。