モバイル インターネットの発展に伴い、ユーザーのネットワーク モードは、トラフィック依存から Wi-Fi 依存への転換を完了しました。ネットワーク環境はますます良くなっていますが、ネットワークのアプリケーションに対するより高い要件も提示されていますが、開発者のネットワークへの関心は低下しています。実際、Wi-Fi の場合、ユーザーのネットワーク品質は改善されており、ネットワーク トラフィックの消費に対するユーザーの感度も低下しています。ただし、ネットワークの状態が悪い場合、ネットワークの問題を無視することは明らかです。
ネットワークに影響を与える問題には、主に次のようなものがあります。
1. トラフィック消費
過度の未処理のネットワーク リクエストは、ユーザーのネットワーク トラフィックを消費します。Android ユーザーは通常、携帯電話管理アプリをインストールします。これにより、各アプリが消費するトラフィックを簡単かつ明確に表示できます。トラフィックの消費量が多いと、Wi-Fi 以外のシナリオを頻繁に使用するユーザーがアンインストールする原因になります。
2.バッテリー消費
最初のトラフィック消費と同様に、電力消費もユーザーの最終的なアンインストールにつながります。
3.ユーザーエクスペリエンスが悪い
時間のかかるネットワーク リクエストにより、ユーザーは製品エクスペリエンスが滞ります. ローディングはユーザー エクスペリエンスを向上させるために使用できますが、これは一時的な解決策であり、恒久的な解決策ではありません. たとえば、最近人気のサイクリング アプリを使用していたのですが、ネットワーク リクエストのたびに我慢できなくなったので、別のサイクリング アプリに切り替えました。
4. その他
- アプリケーション Apk の更新、Apk のダウンロード速度は、アプリケーションの更新プロセスの変換率に確実に影響します。
- ホットフィックス パッチ パッケージ、ハイブリッド リソース パッケージなどのダウンロードの場合は、ローカルにダウンロードするのが早ければ早いほど効果的です。
ネットワーク監視
1.ネットワークモニター
Android Studio に付属の Network Monitor はシンプルで直感的で、期間内のネットワーク リクエスト数とアクセス レートを確認できます。
2.Charles、Fiddler、およびその他のパケット キャプチャ ツール
Charles や Fiddler などのパケット キャプチャ ツールを使用すると、Network Monitor の機能も実現でき、より強力になります。
3. ステト
Stetho は、Facebook が作成した Android アプリケーション用のデバッグ ツールです。Root なしの Chrome を介して、アプリケーションのレイアウト、ネットワーク リクエスト、sqlite、設定などを Chrome デベロッパー ツールで視覚化します。また、Stetho を統合した後、ネットワーク リクエストのさまざまな状況を表示することも非常に便利です。
ネットワークの最適化
重要なポイントは、ネットワークの最適化は主に 3 つの側面で実行されるということです: 1. 速度、2. 成功率、3. トラフィック。
1.Gzip圧縮
HTTP プロトコルでの Gzip エンコーディングは、WEB アプリケーションのパフォーマンスを向上させるために使用される技術です. これは、送信されるデータのサイズを縮小するために使用されます. 送信されるデータのサイズを縮小することには、2 つの明白な利点があります:
- トラフィック消費を削減できます。
- 送信時間を短縮できます。
2. IP 直接接続と HttpDns;
DNS 解決の失敗率は、ネットワーク障害の大部分を占めており、通常、最初のドメイン名解決には数百ミリ秒かかります。これを考慮して、ドメイン名なしでIP直接接続を使用して、DNS解決プロセスを節約し、この部分の時間を節約できます.
さらに、Alibaba Cloud に詳しい友人は HttpDns を知っているはずです。ローカルDNSによるドメイン名の乗っ取りやクロスネットワークアクセスの問題、ドメイン名の異常解決によるトラブルを解決します。
3. 画像処理
3.1 画像ダウンロード
- WebP 形式を使用します。同じ写真の場合、WebP 形式を使用するとトラフィックを大幅に節約できます。JPG 形式の写真と比較すると、トラフィックを 25% ~ 35% 近く節約できます。PNG 形式の写真と比較すると、トラフィックを節約できます。ほぼ80%。最も重要なことは、WebP を使用した後、画質が変わらないことです。
- サムネイルを使用します。アプリにロードする必要がある画像はオンデマンドでロードされ、リスト内の画像は必要なサイズに応じて適切なサムネイルと共にロードされ、元の画像はユーザーが大きな画像を表示したときにのみロードされます。 . トラフィックを節約するだけでなく、メモリも節約できます。以前は、会社の画像ストレージ サービスを使用して、元の画像リンクの後に幅と高さのパラメーターをステッチし、さまざまなパラメーターに従って対応する画像を返しました。
3.2 画像のアップロード
画像 (ファイル) のアップロードの失敗率は比較的高く、ファイルが大きいためだけでなく、帯域幅、遅延、安定性などの要因も、このシナリオではより明白な影響を及ぼします。
- ファイル全体の転送を避け、フラグメント転送を使用します。
- ネットワークの種類と送信プロセスの変化に応じて、フラグメント サイズを動的に変更します。
- フラグメントの失敗ごとの再送信の可能性。
備考: 画像のアップロードは単純で共通点が多いタスクですが、実際には複雑で細分化する必要があります。モバイル インターネットのシナリオと有線のシナリオの間には多くの違いがあります. たとえば、モバイル ネットワークの品質/帯域幅はしばしば "ジャンプ" しますが、有線ネットワークは "段階的" です.
4. プロトコル層の最適化
最新のプロトコルを使用すると、Http プロトコルには複数のバージョン (0.9、1.0、1.1、2 など) があります。プロトコルの新しいバージョンは、次のように再度最適化されています。
-
Http1.1 バージョンでは「永続的な接続」が導入され、複数の要求が多重化され、TCP 接続を再構築する必要がなくなり、モバイル インターネット シナリオでは TCP 接続が高価になり、時間とリソースが節約されます。
-
Http2 には、「マルチタスキング」、ヘッダー情報の圧縮、サーバー プッシュなどの機能が導入されています。
新しいバージョンはリソースを節約するだけでなく、トラフィックを削減することもできます.Http2への実際のアクセス経験がないため、ここでは原理から分析するだけです.
5. 梱包依頼
ネットワーク リクエストをマージして、リクエストの数を減らします。統計などの一部のインターフェース タイプでは、リアルタイムでレポートする必要はなく、統計情報はローカルに保存され、ポリシーに従って一元的にアップロードされます。このように、ヘッダー情報をアップロードする必要があるのは 1 回だけです。これにより、トラフィックが減少し、リソースが節約されます。
6. ウェブキャッシング
サーバーから返されたデータをキャッシュし、有効時間を設定し、有効時間内にネットワーク リクエストを行わないようにして、トラフィックの消費を減らします。ネットワーク キャッシュについては、HttpResponseCache を参照してください。
備考: キャッシュの実装をカスタマイズすることもできます. Volley、Okhttp などの一部のネットワーク ライブラリには、参照用の優れたプラクティスがあります.
7. ネットワークの状態
ネットワーク リクエストは、ネットワークの状態に応じて異なる方法で処理されます.2G と Wi-Fi の状態では、ネットワークの品質が異なる必要があるため、対応するネットワーク ポリシーも異なる必要があります。たとえば、Wi-Fi シナリオでは、データのプリフェッチ、一部の統計情報の集中アップロードなどを実行できますが、2G シナリオでは、そのような操作とネットワーク リクエストの回数を減らす必要があります。ネットワークの状態は TelephonyManager.getNetworkType() メソッドで取得できます。
備考: Facebook のオープン ソース ライブラリ network-connection-class を使用して、ネットワークの状態を判断することもできます。
8. その他
- ブレークポイントの再開、ファイル、写真などのダウンロード、ブレークポイントの再開を採用し、以前にユーザーが消費したトラフィックを無駄にしません。
- 再試行戦略では、ネットワーク リクエストが失敗すると、最終的な失敗を判断するために複数回の再試行が必要になります。実装については、Volley の再試行メカニズムを参照できます。
- Protocol Buffer Protocol Buffer は Google のデータ交換フォーマットで、言語やプラットフォームに依存しません。現在一般的に使われているJsonに比べてデータ量が少ないため、通信速度も速いということです。具体的な比較については、「Protobuffer と json の深さの比較」を参照してください。
- クライアントのポーリングを避け、サーバーのプッシュ方式を使用してください。
- データ更新は全量ではなく増分を採用し、変更されたデータのみが返され、クライアントはマージしてトラフィック消費を削減します。
他の
- 実際、ネットワークの最適化には、メモリの最適化と同様に、莫大な投資が必要です。ネットワークの成功率を向上させることは特に困難です。したがって、トラフィックの最適化を優先して干渉項目を減らすことをお勧めします。
- 弱いネットワークは、ネットワークが良好でないことを意味するだけでなく、モバイル インターネットのネットワーク帯域幅が「ジャンプ」しやすく、次の秒の伝送速度が前の秒の数十分の一に低下する可能性があります。 ;
- 実際の弱いネットワークの場合は、パケット キャプチャ ツールを使用してシミュレートできます。賢い友人の中には、wifi ウィザードを使用して速度を制限するものもあります。
- Facebookのオープンソースプロジェクトaugmented-traffic-controlは、さまざまなネットワーク環境をシミュレートでき、帯域幅、遅延ジッター、パケット損失率、エラーパケット率、およびパケット再注文率の点で、弱いネットワークデバッグアーティファクトと呼ぶことができます;
やっと
アーキテクトになりたい、年俸 2 万~3 万台を突破したいのであれば、コーディングやビジネスにとどまらず、モデルを選択し、プログラミングの思考を拡張し、改善できる必要があります。また、しっかりとしたキャリアプランもとても大切で、学ぶ習慣もとても大切ですが、一番大切なのは根気強く続けることです.
方向性がわからない場合は、Ali のシニア アーキテクトによって書かれた一連の「Android の 8 つの主要モジュールに関する高度な注意事項」を共有して、乱雑で散らばり、断片化された知識を体系的かつ効率的に整理するのに役立ててください。 . Android 開発のさまざまな知識をマスターします。
私たちが普段読んでいる断片的な内容と比較して、このメモの知識ポイントはより体系的で、理解しやすく覚えやすく、知識体系に従って厳密に配置されています。
ビデオ資料一式:
1.インタビュー集
2. ソースコード解析集
3. オープンソースフレームワークのコレクションは、
ワンクリックと3つのリンクで誰でもサポートできます.記事の情報が必要な場合は、記事の最後にあるCSDN公式認定のWeChatカードを直接スキャンして無料で入手してください↓↓↓