Andoridパフォーマンスの最適化(8)ネットワーク要求の最適化

1はじめに

今日、モバイルインターネットは活況を呈しており、携帯電話のほとんどすべてのアプリを接続する必要があります。携帯電話のハードウェアの強化と低価格、およびオペレーターのトラフィックコストの削減と加速により、ネットワークリクエストの待機に対するユーザーの感度が低下し、トラフィックの消費も減少します。それでも、アプリ自体の開発におけるネットワークの問題は無視できません。たとえば、常にトラフィックが不足している場合や、ネットワークステータスが良好ではないシナリオで、携帯電話の電力が不足している場合、優れたアプリは明らかです。利点をご覧ください。ネットワークの最適化も、アプリの最適化に欠かせない最適化項目です。

2ネットワーク要求のプロセス

調査によると、1秒を超える遅延は、ユーザーの心の状態を妨げ、エクスペリエンスを低下させることになります。Google開発ドキュメントで述べたように、次の図に示すように、1秒でページをレンダリングする方法は、ネットワークリクエストでページをレンダリングするために実行する手順を適切に分析したものです。

最初は DNS解決IP、200ミリ秒

2番目は、 TCP 3ウェイハンドシェイク接続、200ミリ秒です。

3番目はクライアントHTTPリクエストサーバーで、サーバーは200ミリ秒応答します

4つ目は、サーバー自体が応答するまでに200ミリ秒かかるということです。

5番目に、クライアントはhtml、css、jsなどを解析してレンダリングするコンテンツを200ミリ秒受信ます。

上記はHTTPリクエストですが、HTTPSリクエストの場合、TCP 3ウェイハンドシェイク接続の後にTLSハンドシェイクが追加されるため、ハンドシェイク時間が長くなります。

3ネットワークリクエストの最適化のヒント

3.1 DNS解決の最適化

DNSの事前解決

Webページの開発を行っている場合は、DNSの事前解決を検討できます。事前解決とは、実際には現在のWebページにあるさまざまなドメイン名の存在を解決し、ユーザーのクリック動作が発生する前にDNSをIPに事前解決することです。

ドメイン名を直接IPアドレスに置き換えます

特定のビジネス要件に従って、直接IP接続を使用してドメイン名アクセス方式を置き換えることができます。または、アクセスを試行するためにIPを使用する必要があります。アクセスが失敗した場合は、ドメイン名に切り替えて、より高速なネットワーク要求を実現します。ただし、この動作は柔軟性がなく、メンテナンスコストが非常に高いため、一般的には推奨されません。

3.2データ転送量を減らす

プロトコルバッファの使用を検討する

プロトコルバッファは、Googleが開発したデータ記述言語です。Json/ XMLと同様に、構造化データをシリアル化でき、データストレージや通信プロトコルに使用できます。現在使用されているJsonデータボリュームよりも小さいですが、使用するには、クライアントは数百Kの解析ライブラリを参照する必要があります。

FlatBuffersの使用を検討する

FlatBuffersは、Googleが開発したクロスプラットフォームのシリアル化ツールでもあります。C++ / Java / Go / C#インターフェースのサポートを提供します。これは、パフォーマンスとリソースの使用に焦点を当てたシリアル化クラスライブラリです。モバイルデバイスにより適したプロトコルバッファーと比較して、FlatBufferはより高いパフォーマンスとより少ないリソース要件を提供します。FlatBuffersの機能はプロトコルバッファーによく似ていますが、最大の違いは、特定のデータを使用する前に、FlatBuffersが解析/解凍のプロセスを必要としないことです。同時に、エンジニアリングで使用する場合、FlatBuffersはプロトコルバッファーよりもはるかに便利で、2つまたは3つのヘッダーファイルを含めるだけで済みます。

データ圧縮にzipを使用する

最も一般的に使用されているJsonなど、使用するデータ記述言語を決定したら、スペースを削除し、zipを使用してパックして圧縮できます。このような圧縮により、元のデータ量を大幅に削減できます。アクセス速度の大きさを改善できます。たとえば、著者はかつて100キロを超えるサイズのJsonをフォーマットしようとしたところ、スペースを削除した後、約50Kになり、その後、zipで圧縮および圧縮すると、わずか5Kになりました。

Gzip圧縮を使用する

HTTPプロトコルは、WEBアプリケーションのパフォーマンスを向上させるために使用されるテクノロジーであるGzipエンコーディングをサポートしています。これは、転送されるデータの量を減らし、転送されるデータのサイズを減らすために使用されます。Gzipは高圧であり、ファイルをより小さなサイズに圧縮できます。ただし、すべてのブラウザーがgzipをサポートしているわけではありません。クライアントがgzip圧縮をサポートしている場合、要求されたリソースは圧縮され、応答時にクライアントに返されます。ブラウザーは独自の方法でそれを解析します。http応答ヘッダーで、コンテンツを確認できます-encoding:gzip、これはサーバーのgzipで使用される圧縮方法を指します。

画像圧縮

origin、guetzli、またはtinypngツールを使用すると、画像を高度に圧縮して圧縮できます。

WebP形式を使用

同じ写真で、WebP形式を使用すると、小さな画像のサイズを大幅に削減してトラフィックを節約できます。JPEGまたはPNG画像形式の代わりにWebP画像形式の使用を検討できます。最も重要なことは、WebPを使用した後に画質が変更されていないことです。

3.3ネットワーク要求または事前要求を減らす

カスタマイズされたネットワーク要求のインターフェースをマージして、要求の数をできるだけ減らし、マージできる要求をできるだけマージします。

たとえば、一部のレポートロジックでは、ローカルで複数回レポートする必要があるデータを保存し、適切な時間を選択して一度にアップロードできます。

ユーザーエクスペリエンスを向上させるために、電話がアイドル状態のときに事前にいくつかの重要なデータ要求を行います。

3.4妥当な要求、再試行の削減、およびポーリングの回避

1バックグラウンドでの特定のビジネス要件に従って、アプリがバックグラウンドであるときにアプリが本当にデータ転送を引き続き必要とする必要があるかどうかを厳密に制限し、無効なデータ転送を回避するようにします。

2ネットワークリクエストが失敗した場合、無制限のサイクリックリトライ接続を回避する必要があるため、最大再接続回数を設定したり、回数を超えて再接続を終了したり、長時間待ってから再接続したりできます。そして、再接続する前に、ネットワークが正常な状態であることを確認してください。そうでない場合、正常に再試行しないことに加えて、追加のキャンセルが追加されます。一部のページでのリクエストが失敗した場合、リクエストの結果をユーザーにスローして、ユーザーが自分の状況に応じて再度リクエストするかどうかを判断できるようにすることができます。

3通常のサービス機能では、サーバーへのネットワーク要求を開始するためのポーリングも回避する必要があります。データ送信の頻度を決定し、冗長な繰り返しデータ送信を回避します。または、プッシュを使用して可能な限り置き換えます。

3.5キャッシュの使用

画像やファイルなどのデータについては、メモリキャッシュとディスクキャッシュの戦略メカニズムを使用できます。Androidでは、通常、LruCacheを使用してメモリキャッシングを実装し、DiskLruCacheを使用してディスクキャッシングを実装します。または、効果的なネットワーク要求とキャッシュ処理のために、より成熟したオープンソースフレームワークを使用します。

3.6異なるネットワークタイプの処理

画像をリクエストする前に、まず現在のネットワークタイプを取得できます。それがWifiの場合は、高解像度の画像がもたらす高度なエクスペリエンスをお楽しみください。4Gネットワ​​ークの場合は、標準でクリアな画像を選択して配信してください。2/ 3Gネットワ​​ークの場合。次に、通常の使用の優先順位を達成するために、解像度の低い写真を送信することを検討してください。

4ツールを使用してネットワークを監視する

4.1チャールズ

Charlesは強力なネットワーク監視ツールです。携帯電話とコンピュータが同じネットワークに接続されていて、対応するプロキシ設定がいくつか設定されていれば、携帯電話のリクエストデータをコンピュータから取得できます。操作手順は次のとおりです。

最初のステップは、プロキシ設定ウィンドウを開くことです。

2番目の手順は、[透過HTTPプロキシを有効にする]オプションをチェックして、ポート番号(デフォルトでは8888)を設定することです。

3番目のステップは、コンピューターのIPアドレスと、携帯電話のWifi選択で設定したポート番号を入力し、確認することです。

4番目のステップでは、携帯電話の操作が完了すると、次のダイアログボックスがコンピュータにポップアップ表示されます。許可するには、[許可]を選択します。

4.2ネットワークプロファイラ

Android Stuido 3.0に付属のネットワークプロファイラー、送受信されたデータや現在の接続数など、リアルタイムのネットワークアクティビティをタイムラインに表示できます。これにより、アプリケーションがデータを転送する方法とタイミングを簡単に確認し、それに応じて基になるコードを最適化できます。公式ウェブサイトに示されているように:

https://developer.android.google.cn/studio/images/profile/networkprofiler_2x.png

4.3仮想マシンのネットワークパラメータを設定して弱いネットワークをシミュレートする

ユーザーの環境は予測できないほど複雑であるため、通常のネットワーク最適化に加えて、弱いネットワーク条件下でのアプリのパフォーマンスも考慮する必要があります。仮想マシンの「セルラー」アイテムを介して、対応するテストのために弱いネットワークをシミュレートするようにネットワークパラメーターを設定できます。以下に示すように:

このうち、ネットワークタイプはネットワークのタイプ、信号強度は信号強度、音声ステータスは音声ステータス、データステータスはデータステータスです。必要に応じて選択できます。

 

 

 

元の記事を106件公開 37 件を賞賛 80,000回

おすすめ

転載: blog.csdn.net/lyz_zyx/article/details/88324777