0

シンプルなtodoアプリを作成しています。私はプロジェクトモデルを持っていますが、そこには多くのやること、ファイル、そして議論があります。

プロジェクトのショーページには、Todoリスト、ファイルリスト、ディスカッションリストの3つのリストがあります。

私はJSを使用してこれを実装し始めました。すべてのリストを同時にレンダリングし、上部に3つのボタンがあり、それぞれが対応するリストの状態の表示と非表示を切り替えます。

特にファイルとディスカッションのリストで、読み込み時間について心配しました。ファイルリストはファイルをロードする必要があり、ロード時間が遅くなり、議論が多くなるため、そのリストのロードにも時間がかかります。これらの読み込み時間をすべて追加すると、遅すぎて快適に使用できないのではないかと思います。(おそらく事前最適化ですが、私は正しく学びたいです...)

私はばかげているだけですか?JSでこれを実装する必要がありますか?それとも私はこれを別の方法で行う必要がありますか?

もしそうなら、どのように?各リストを別々のページ(プロジェクト/タスク、プロジェクト/ファイル、プロジェクト/ディスカッション)にする必要がありますか?JSを続行し、ページ付けを使用して設定された量のデータをロードし、ロード時間を耐えられるようにする必要がありますか?

4

2 に答える 2

1

私はこのようなことをします。基本的に、関連付けを設定し、スコープを適用して必要なデータを取得します。次に、それぞれのネストされたルートに移動してリスト全体を表示するか、RailsまたはJSを介してページ上でページネーションを適用することをお勧めします。あなたが超クレイジーになりたいなら、あなたはこれらすべてのアソシエーションを熱心にロードすることができます、しかしそれぞれが条件を持つ3つのアソシエーションでそれはかなり早くクレイジーになると思います

モデル

class Project < ActiveRecord::Base
    has_many :files
    has_many :discussions, :order => 'updated_at DESC'
    has_many :todos
end
class File < ActiveRecord::Base
    belongs_to :project
end
class Discussion < ActiveRecord::Base
  belongs_to :project

  #scope for last 5 discussions not marked as finished
  def self.recent_unfinished
    where(:finished => false).limit(5)
  end
end
class Todo < ActiveRecord::Base
  belongs_to :project

  def self.undone
    where(:complete => false)
  end
end

コントローラ

def show
    @project = Project.find(params[:id])
    @files = @project.files.select(:filename, :filesize) #assuming you don't want blob data or whatever
    @todos = @project.todos.undone
    @discussions = @project.discussions.unfinished
end

注:私はこれらのものをテストしなかったので、それを機能させるために構文を試してみる必要があるかもしれません:)

于 2012-07-20T19:46:18.243 に答える
0

ページ付けは、読み込み時間だけでなく、使いやすさ(膨大なリストをスクロールしたい人)にも適していると思います。

ajaxを使用し(それが意図したものかどうかはわかりません)、ページが読み込まれた後に集中的なものを読み込み、素敵なajax読み込みアイコンを表示する必要があります。その後、リンクを簡単に追加できるため、ユーザーは最初にこのデータを要求する必要があります。

ajaxを使用しない場合は、必ずこれらのリストをキャッシュしてください。

于 2012-07-20T16:34:20.597 に答える