アプリケーションの応答性を向上させた方法





ほぼすべての最新のアプリケーションは、ネットワークから画像をダウンロードせずに実行することはできません。私たちSurfingbirdも例外ではありません。 ただし、ユーザーが複数の画面を巻き戻した場合、以前の画像が読み込まれるまで待つ必要があるため、画像を連続してアップロードすることはできません。

そのため、アプリケーションの応答性を高め、ユーザーの待ち時間を短縮するために、いくつかのトリックを適用しました。これについて説明します。



多くの場合、画像の遅延読み込みを使用していることに注意してください。 これは素晴らしいプラクティスです。私たちはそれを愛し、尊重しています。 これにより、電話のトラフィックとメモリが節約されます。 ただし、メモリを管理するためには、ダウンロードした画像の適切なストレージを整理するだけでなく、たとえばキャッシュを混雑させるだけでなく、ダウンロード自体を最適化することも重要です。

現代の世界では、ユーザーは無制限にインターネットを使用しており、トラフィックは問題ではないという事実にもかかわらず、画像をダウンロードするための待ち時間は依然として重要です。 ユーザーは非常に短気で、ダウンロードを待ちたくない、いびきをかきたい、この魔法を与えます。



アプリケーションが写真のコレクションである場合を考えてみましょう。 アプリケーションの応答性を考慮していない開発者はどうなりますか? 彼はすべての写真を撮ってダウンロードキューに入れ、平均して次々にダウンロードされることがわかります。

それがどのように見えるかを見てください。



何が見えますか? ユーザーは前の画像がロードされるのを待つ必要があります。

同時に、ユーザーは何かが起こっていることをまったく知りません。 これで、ユーザーのアプリケーションの速度が低下しています。これは、画像が読み込まれているかどうかを理解する方法がないためです。



ユーザーは、すべてが正常であり、すべてがロードされており、もう少し画像が表示されることを理解していることが重要です。 最初にしたことは、写真をアップロードするためのプログレスバーを追加することでした。 これは簡単に実装できます。画像にサブビューを追加し、コールバックの進行状況を変更します。



//          //     / progressView      //    ,      -(void)layoutSubviews { CGRect rect = self.progressView.frame; rect.size.width = self.bounds.size.width * self.progress; self.progressView.frame = rect; } -(void)setProgress:(CGFloat)progress { _progress = progress; if (_progress > 1) _progress = 1; if (_progress < 0) _progress = 0; [self setNeedsLayout]; }
      
      





そして、downloadProgressBlock操作(AFURLConnectionOperationから継承された操作用)を規定します。



  [imageView.af_imageRequestOperation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { weakSelf.progress = totalBytesRead/totalBytesExpectedToRead; }];
      
      





ここにそれが来るものがあります。



写真をロードする期待は最初の場合と同じであるという事実にもかかわらず、最終的に、ユーザーはすべてが正常であると感じています。

しかし、これはまったく理想的ではありません。 この例からわかるように、ユーザーが非常に遠くまで巻き戻した場合、画像が読み込まれるまでの待ち時間は非常に長くなります。 それでは、主に今何が画面に表示されているのかを主に表示してみませんか?



NSOperationを使用して各画像をアップロードします。 次のコンテンツバッチを受け取るとすぐに、各イメージのダウンロード操作を作成し、中優先度でキューに入れます。 写真が見えるようになるとすぐに、操作を設定して優先順位を高く設定します。この写真は、現在必要のないものよりも早く読み込まれます。



もう1つ微妙な点があります。ユーザーがスクロールした画像は、下の画像よりも必要性が低い可能性が高いです。 そのため、画面から画像が消えるとすぐに、プリロード操作の優先度よりもさらに低くロードするように操作を設定します。



 - (void) willAppear { [self.af_imageRequestOperation setQueuePriority:NSOperationQueuePriorityVeryHigh]; } - (void) willDisappear { [self.af_imageRequestOperation setQueuePriority:NSOperationQueuePriorityVeryLow]; }
      
      











その結果、アプリケーションの応答性を向上させ、ユーザーの待ち時間を短縮することができました。 視覚的には、アプリケーションが高速になりました。

このようなトリックが機能しないと思われる場合は、このFacebookの調査を読むことをお勧めします。



そのようなものを使用していますか? コメントで議論するのは良いことです。



All Articles