我正在构建一个简单的待办事项应用。我有项目模型,有许多待办事项,文件和讨论。
在项目展示页面上,我有3个列表:Todo列表,文件列表和讨论列表。
我开始使用JS实现这一点。我同时渲染所有列表,顶部有3个按钮,每个按钮切换相应列表的显示/隐藏状态。
比我担心加载时间,尤其是文件和讨论列表。文件列表需要加载文件并且加载时间较慢,讨论会很多,因此加载该列表也是耗时的。当所有这些加载时间都被添加时,我担心它会太慢而无法愉快地使用。 (也许是预先优化,但我想要正确学习......)
我只是愚蠢,我应该继续用JS实现这个吗?或者我应该采取不同的方式吗?
如果是这样,怎么样?我应该将每个列表设为单独的页面(项目/待办事项,项目/文件,项目/讨论)吗?我应该继续使用JS并使用分页来加载一定数量的数据,保持加载时间可以忍受吗?
答案 0 :(得分: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
注意:我没有测试任何这些东西,所以你可能必须使用语法来使它工作:)
答案 1 :(得分:0)
我认为分页不仅有利于加载时间,还有可用性(谁想滚动一个巨大的列表)。
你应该使用ajax(不确定这是不是你的意思),并在页面加载后加载密集的东西,并显示一个漂亮的ajax加载图标。然后,您可以轻松添加链接,以便用户首先请求此数据。
如果您不使用ajax,请务必缓存这些列表。