0

我正在构建一个简单的待办事项应用程序。我有项目模型,其中有很多待办事项、文件和讨论。

在项目展示页面上,我有 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 回答