1. iPhoneの弱いネットワーク環境の設定
既存のネットワークステータスを選択してください
またはネットワークステータスをカスタマイズします
パラメータの設定:
各パラメータの意味はおおよそ次のとおりです。
帯域幅: ダウンリンク帯域幅
パケットロス時: ダウンリンクパケットロス率
遅延: ダウンリンク遅延 (ミリ秒)
出力帯域幅: アップストリーム帯域幅
出力パケット損失: アップリンク パケット損失率
出力遅延: アップリンク遅延
DNS 遅延: DNS 解決遅延 Android はこの機能をシミュレートする方法を知りません。
プロトコル: プロトコル -- 任意、IPv4、IPv6
インターフェイス: インターフェイス -- オプションの ALL、WLAN、セルラー
2. 最適化計画
1. 必要なステータスの提示
1.1. ネットワークプロンプトが表示されない
ネットワーク ステータスの変化を監視し、AFNetworking の AFNetworkReachabilityStatus を利用できます。
ネットワークステータスがない場合、ユーザーに通知されます。
1.2. ネットワークリクエストをロードする前に「ロードアニメーション」を追加
MBProgressHUDなど
1.3. ネットワークリクエストをロードした後、ネットワークステータスアニメーションを削除し、空のデータ処理を追加する必要があります。(ネットワークの問題なのか、データ不足なのかを判断します)
1.4. ステータス切り替え通知を上手に利用して、インターフェースにさまざまな変更を加えます。
2G、3G、4G、5G、WiFi などのさまざまなネットワークでさまざまなステート ダイアグラム スイッチまたはインタラクティブ スイッチを作成します。
2. ネットワークリクエストの最適化
2.1 . 最適なタイムアウト時間を設定する
読み取りおよび書き込みの合計タイムアウト (リクエストから応答までのタイムアウト)、最初のパケットのタイムアウト、パケット タイムアウト (2 つのデータ セグメント間のタイムアウト) について異なる計算計画を作成し、タイムアウトの判断を高速化し、待ち時間を短縮し、タイムアウトが発生したらすぐに再起動します。可能な試み。ここでのタイムアウトはネットワークの状態に応じて動的に設定することもでき、例えばネットワークの状態が2G、3G、4G、5G、WiFiの場合に異なるタイムアウトを設定することも可能です。
ユーザーは、長時間実行または低速なネットワーク操作をキャンセルできます。
2.2 .マルチサブモジュールリクエストの「遅延」
ユーザーの待機許容値は 2 秒を超えないという原則に基づき、ホームページなどの複数のビジネス モジュールが同時に表示される場合、すべてのインターフェイス データが一度に要求されると長時間待機することになるため、複数のサブモジュール「遅延」リクエスト。
- 優先モジュール: 要求されたデータの量が少ないため、ビジネスを最初に表示する必要があります。
- 遅延モジュール:データ量が多く、リスト状に複数のデータが集まり、ローディングアニメーションを配置するのに適しており、ユーザーの受け入れやすい長さであるため、最後尾に配置するほか、ページング処理や遅延にも使用できます。スライド後のローディング処理。
2. 3. 固定モジュールにキャッシュメカニズムまたは増分更新メカニズムを追加する
ホーム ページと特定の第 1 レベル ページにデータをキャッシュします。一定期間内に再度リクエストされた場合は、データをキャッシュから直接読み取ることができるため、空白ページがエクスペリエンスに影響を与えることを防ぐこともできます。
または、データに段階的な変更があるかどうかを判断し、変更がある場合はアニメーションを挿入することを前提にデータを更新します。
2. 4. マルチモジュールリロード操作
複数のモジュールとモジュール間の相関関係を含む一部の複雑なページと同様に、複数のモジュールには複数のリクエストがあります。リクエストが失敗し、「リロード」ボタンを追加する必要がある場合は、モジュール間の相関関係を防ぐためにすべてのリクエストを再リクエストすることをお勧めします。データがずれたり、UIのレイアウトが乱れたりします。
したがって、ネットワーク リクエストが失敗した後にリロードするボタン/ドロップダウン操作がある場合、次のように提案します。
- 複数のモジュールが再度リクエストします。
- 複雑な UI を再計算します。
その理由は、弱いネットワーク環境では、要求されたデータが完全ではない可能性があり、複数の要求でデータの一部しか取得できない可能性があり、ほとんどの場合、各モジュールが相互に補完し合うためです。
2.5.プリロード設定「臨界値」
UITableView の現在の位置に基づいて、UITableView.contentView 全体の現在の高さで割って、ネットワーク リクエストを開始する必要があるかどうかを判断します。現在のページの 70% を超えると、新しいリソースがリクエストされ、データがロードされます。 ;
2. 6. リクエストするアクションから始める
DNS クエリの最適化: DNS クエリを可能な限り削減し、ドメイン名のハイジャックや DNS 汚染を避けるために DNS キャッシュを実行し、ユーザーを「最適なアクセス ポイント」にスケジュールする必要があります。
データ パケット サイズの削減とパケット ボリュームの最適化: 圧縮、パケット ヘッダーの合理化、メッセージ マージなどを通じて、データ パケット サイズとパケット ボリュームを削減します。
ACK パケットの最適化: 冗長パケットと ACK パケットの数のバランスをとって、待ち時間を短縮し、スループットを向上させます。
2. 7. 切断と再接続
ワイヤレス ネットワークでデータ接続が失われる理由は数多くあります。CDNはここで使用できます。
(CDN は、データ ネットワーク上に構築された分散型コンテンツ配信ネットワークです。CDN の役割は、ストリーミング メディア サーバー クラスター テクノロジを使用して、単一マシン システムの不十分な出力帯域幅と同時実行機能の欠点を克服し、同時実行速度を大幅に向上させることです。システムでサポートされているストリームの数。単一点障害による悪影響を軽減または回避するための数。)
2. 8. データ接続の作成回数を減らす
接続の作成は非常にコストのかかる操作であるため、データ接続の作成回数をできる限り減らし、タスクを 1 つのリクエストでバッチで実行する必要があります。小さなデータ パケットを複数回送信する場合は、2 秒以内に送信されるようにする必要があります。短時間に異なるサーバーにアクセスする場合は、可能な限り無線接続を再利用してください。
3.ユーザーエクスペリエンスの最適化
3. 1. 内容が順番に表示されます。
たとえば、ビジネス モジュールにテキストと画像の両方が含まれている場合、読み込みが 50% ~ 90% で停止する可能性があるため、最初にテキストが読み込まれ、次に画像が読み込まれます。
3. 2. 進歩を原動力とする
ネットワークの状態に関係なく、読み込みの進行状況は常に 50% から始まり、約 98% の進行状況に留まります。
3.3. 固定 UI 表示レイアウト、ロード時に仮想レイアウト ビューをプリロード可能
Zhihu と同様に、読み込み時に「アニメーション/ビューの読み込み」が変更され、プリロードされたプレースホルダー画像がメイン ページに表示されます。
3. 4. 弱いネットワークの読み込み失敗/空のデータの場合は、「再読み込み」ボタンを追加するか、プルダウンの更新操作を追加できます。
たとえば、リクエストにデータ/ネットワーク障害がない場合は、「制御可能な」状態にあることをユーザーに認識させ、ユーザーの不安を軽減するために「リロード」ボタンを追加します。
4. 画像読み込みの最適化
4.1. より高速な画像フォーマットを使用する
厳密に言えば、弱いネットワークでの最適化ではありませんが、より高速な画像フォーマットは非常に重要です。ここではWebP形式を使用することをお勧めします。(WebP 形式。画像の読み込みを高速化するために Google が開発した画像形式。画像圧縮量は JPEG の約 2/3 にすぎず、サーバーの帯域幅リソースとデータ容量を大幅に節約できます。ただし、WebP は非可逆圧縮です。同じ品質の WebP ファイルには、JPEG ファイルをエンコードするよりも多くのコンピューティング リソースが必要です)。
4. 2. ネットワークの状態に応じて精度の異なるグラフを表示
たとえば (元の画像が 600X480 の場合):
- 2/3G は低解像度の画像を使用します。300X240 の画像を 80 の精度で送信します。
- 4G の通常解像度の画像は 600X480、精度 80 で配信されます。
- WiFi 高解像度画像 (ネットワーク速度に基づいて判断するのが最善ですが、WiFi が遅い場合もあります): 600X480 の画像を 100 の精度で送信します。
4.3 、SDWebImageパラメータオプション
利用シーンに応じて、SDWebImageOptions 定数の記述を参照して画像を読み込みます。
4.4 . 画像をロードしない
ネットワークが弱い場合、動作に影響がなく、簡単なテキスト説明でエリアの内容をユーザーに知らせることができる場合、ネットワークがスムーズになるまで画像が読み込まれない可能性があります。もちろん、この方法は状況によって異なりますが、通常はアプリの設定オプションに「弱いネットワーク状態では写真を表示しない」ボタンを追加することもできます。