ValueRlの大きな配列をバインドすると、ユーザーインターフェイスが遅くなります
-
23-09-2019 - |
質問
HTTPを介してリモートサーバーから戻る大きなデータセット(約3500オブジェクト)があります。現在、データはnscollectionViewで提示されています。データの1つの側面は、データを表す小さな画像のためのサーバーへのパスパックです(簡単にするためにサムネイルを考えてください)。
Bindingsは、すでに返されているデータに対して素晴らしく機能し、ValyURLバインディングを介して画像を結合するのは簡単です。ただし、データセットをスクロールするときはユーザーインターフェイスが非常に鈍いです。 NSCollectionView
現在表示可能な画像を表示するために使用される画像データのみではなく、すべての画像データを取得しています。
Cocoa Controlsは、Lazy Loadingを介して実際にユーザーインターフェイスに出力されている情報のみのデータのみを取得するのに十分なほど賢いという印象を受けていました。これは確かに当てはまるようです NSTableView
- しかし、私はこの考えに誤って誘導される可能性があります。
valureurl結合は怠lazに行動するべきであり、さらに、それは NSCollectionView
?
キャッシングメカニズムを作成できます(実際、私はすでに別のアプリケーションのためにそのようなものを整えています - 興味があるなら私の投稿を参照してください 非同期nsurlconnectionからのデータをnsimageに入力します)しかし、ユーザーが頻繁にデータセットを変更する可能性があり、データの小さなサブセットのみを必要とする可能性があるため、この特定の実装を必要としない場合、私は本当にこのルートに行きたくありません。
提案されたアプローチはありますか?
ありがとう!
アップデート
さらにテストした後、データセットを介したスクロールアクションにより各画像がサーバーから要求されるため、問題が発生するようです。データセットにすべての画像が渡されると、応答は非常に高速になります。
質問...スクロール中にValueRlフェッチをオフにして、スクロールが終了したときにオンに戻す方法はありますか?
解決
私の解決策は、すでに別のアプリケーションに使用しているようなカスタムキャッシュメカニズムを使用することです。問題は、まだダウンロードされていない過去の画像をスクロールすると、コントロール自体が移動してまだ非ダウンロードされていないファイルを取得するために現れます。
ダウンロードすると、画像はローカルで利用可能であるため、スクロール速度が正常化されます。解決策は、画像がローカルで利用可能かどうかを確認し、画像がバックグラウンドでダウンロードされている間に代替アプリバンドルグラフィックを提示することです。画像がダウンロードされたら、バンドルから来たスタブ画像を置き換える画像でモデルを更新します。
これにより、UIは全体にわたって非常に応答性の高い状態になり、ユーザーは対話する機能を残し、画像のカスタムバックグラウンド管理を可能にします。
もちろん、Cocoa IDが私のために私のために良かったでしょうが、それから私は何をするでしょうか? :-)