2011-03-05 10 views
0

私はオンラインのユーザー(ユーザー名+プロフィール写真)を表示するチャットアプリを持っています。基本的に、どのユーザーがオンラインになっているかを確認し、リストを自動的に更新するajax投票があります。また、リストは最後のアクティビティに基づいて並べ替えられます。JavaScriptを使用した「オンライン」ユーザーのリフレッシュ

私はそれをやってきた方法は次のとおりです。現在のオンラインユーザーの

  1. のGetリスト
  2. クリア既存の要素
  3. それらを再度追加(STEP1から返されたリストので、正しく並べられます

これはChromeで問題なく動作しますが、Firefoxで画像が再表示されている間に「ちらつき」効果が発生していることがわかりました。

これを行うにはどのような方法が最適ですか?彼らは正しい順序でそれらを移動するなど、要素が存在するアルゴリズムチェックを作成することはあまりにも難しいようです。思考?

+1

古いDOM要素を残しておき、テキスト& ' '" src "属性を更新するようにしましたか?次に、アクティブなカウントが上がったときに新しいものを追加し、スペアがあるときだけ古いものを削除するだけです。 – Pointy

+0

しかし、削除、並べ替え、または追加が必要なものを見つけるアルゴリズムを作成する必要があります。これは、追跡が非常に困難になることがあります。 –

答えて

2

ユーザーがまだオンラインであるかどうかを確認する頻度はどのくらいですか?

私はユーザーレコードにユニークなIDを付けることができますので、今オンラインだったユーザーの新しいリストに対してオンラインだったユーザーのリストを確認することができると思います。

ログオンしているユーザーが退室してフェードインします。

これははるかに洗練されたソリューションとなり、問題を解決します。

+0

どのように並べ替えをやりなおしましょうか? (ユーザーはlastActivityによって注文されます(つまり、最後にあなたにメッセージしたとき)。削除または追加する必要があるものを取り除くために、両方のリストを繰り返し処理します。次にリストを繰り返し繰り返し、順序を修正します。 –

+0

私は注文を変更する必要があることを意味する行為として注文を修正します。 - 私がこれを意味するのは、誰かがメッセージをリストの上部または下部に移動したときです(ただし、ユーザーに注文します)。このようにして、ユーザーは常に正しい順序で作業する必要があります。それが意味をなさない場合は、私はもう一度試してみてください:) –

+0

私は理解していると思いますが、確かにあなたは再確認できますか?問題は、私が利用可能なAPI呼び出しは、ユーザーのリストを正しい順序で返してくれることです。ですから、私は変更されたものを見つけ出すことはできません。 –

1

まず、「プリロード」手法を使用して、画像を別々に「キャッシュ」しようとします。それはImageオブジェクトを作成し、それをuserpicのURLにsrcに設定したときです。次に、それらのオブジェクトをすべてグローバル配列に格納します。これにより、ブラウザーが画面に表示されなくなったときにブラウザーが画像を消去することがなくなり、リストを再ロードするときにブラウザーを再度ロードする必要がなくなります。

これで解決できない場合は、実際には既存のリスト要素を再利用します。私はちょうど要素をひとつずつ見直して、その内容をリストから適切な内容に置き換えます。私がプロセスの既存の要素を使い果たした場合は、新しい要素を追加します。リストが終了したときに残っている要素があれば、それらを削除します。これはもう少し複雑ですが、一見すると複雑ではありません。

+0

私は画像をプリロード/キャッシングしようとしています。これがFFでちらつきの問題を取り除くならば、私はキスだけかもしれないし、すべてを取り除いて読んでいる。 –

関連する問題