有啥好的方法可以限制向用户显示的评论数量,直到他们选择查看所有内容?

Posted

技术标签:

【中文标题】有啥好的方法可以限制向用户显示的评论数量,直到他们选择查看所有内容?【英文标题】:What is good way to limit the amount of comments shown to a user until they choose to view all?有什么好的方法可以限制向用户显示的评论数量,直到他们选择查看所有内容? 【发布时间】:2012-04-27 18:47:36 【问题描述】:

目前我在模板中有一个 each 循环,用于显示 cmets。假设用户在他们发布的微博上有 50 个 cmets。将显示一个显示 50 cmets 的长列表。

为了节省页面空间,我决定将每个微博显示的 cmets 限制为 2-3 个。如果用户希望查看更多,他们可以单击“查看更多”或“查看全部”。我想知道如果有 10,000 个 cmets 并且用户单击“查看全部”,服务器将如何应对,这就是为什么我可能会选择实施“查看更多”然后再显示 50 个 cmets”

无论如何,我想知道一种限制向用户显示的 cmets 数量的好方法,直到他们选择查看全部?

如果我走 jquery/js 路线并使其仅显示 2-3 条最新消息,其他消息仍将被加载到后端,不是吗?所以不是更好的选择是在ruby on rails 怎么样?

我真的很想要一些关于最佳方式的不错的解决方案/信息。

如果您需要任何进一步的信息,我很乐意提供。

谢谢 亲切的问候

【问题讨论】:

【参考方案1】:

你可以像 Facebook 一样做:

仅显示 2/3 cmets。仅从后端加载 2/3 cmets。 当用户点击“显示更多”时,它会显示 50 多个。它通过 AJAX 加载它们。因此,在后端,您只会收到“GET 50 cmets EXCEPT the three first”之类的请求。 显示了另一个“显示更多”链接。它将加载除 53 个第一之外的其他 50 个 cmets。

在 Facebook 上,一次加载的 cmets 不能超过 50 个。我认为你也应该这样做。

【讨论】:

这看起来很简单。我喜欢!仅在需要时才加载更多的 cmets,或者如果我想要我可以全部加载?我一直在密切关注 facebook 和 google+。 Google+ 似乎会加载所有 cmets,但我想知道当加载 10,000 个用户加载 2000 个 cmets 时对服务器的友好程度。 服务器友好性远低于仅 50 cmets,这是肯定的! :-) 您也可以实现“全部显示”按钮,但这真的值得吗?如果用户要求它,为什么不现在放弃它并最终使用它呢?实施它不会很长。【参考方案2】:

干净的方法是为cmets实现分页。

【讨论】:

我原本以为也可以使用 will_paginate 来使用分页,但如果我将 per_page 设置为 2,则每次加载更多时,每次只会显示 2 多个结果。【参考方案3】:

我想PostComment 之间存在简单的belongs_tohas_many 关系。我通常会这样做:

路线:

resources :posts do
  resources :comments
end

模型:设置默认页面大小:

class Comments < ActiveRecord::Base
  belongs_to :post

  DEFAULT_PAGE_SIZE = 25
end

控制器:

class CommentsController
  def index
    post = Post.find(params[:post_id])
    offset = params[:offset] || 0
    limit = params[:limit] || Comment::DEFAULT_PAGE_SIZE
    @comments = post.comments.offset(offset).limit(limit)

    respond_to do |format|
      #respond as you like
    end
  end

  # more actions...
end

查看,加载更多链接之类的,通过 ajax 加载 cmets:

<%= link_to "load more comments", post_comments_path(@post, :format => 'js'), :method => :get, :remote=>true id='load-more-comments' %>

并且您还想将偏移量绑定到 ajax 帖子:

$ ->
  $('#load-more-comments').on 'ajax:before', (event) ->
    el = $(this)
    offset = #count your offset, I often do by counting the <li>s already in the <ul>
    el.data 'params', "offset=#offset"
    # you could also pass the limit: el.data 'params', "offset=#offset&limit=#some limit"
  .on 'ajax:complete', (event, xhr, status) ->
    el = $(this)
    el.removeData 'params' # remember to remove this.

我也对如何更好地做到这一点感兴趣。期待答案和批评。 :)

【讨论】:

您如何看待首先仅显示 2 个 cmets 然后在需要时通过 ajax 加载其余部分? 我想我不能说出来。我打算像你现在说的那样实现它,并观察用户的行为。如果他们打算深入研究 cmets,那么我会先提供更多 cmets,反之亦然。我看到您要求服务器友好,我也认为这取决于,如果您限制页面大小,如果用户真正深入研究 cmets,您将有更多的请求/数据库调用。所以我会说这取决于行为,我会选择最好的用户体验(不是服务器友好的)并测试它并稍后进行优化。我不知道这是否回答了你的问题。

以上是关于有啥好的方法可以限制向用户显示的评论数量,直到他们选择查看所有内容?的主要内容,如果未能解决你的问题,请参考以下文章

将 CopyData 用于提升的应用程序有啥好的替代方法

HTTPS 握手很慢。有啥好的选择来改善用户体验?

使用图像映射生成器有啥好的替代方法? [关闭]

网络爬虫抓取数据 有啥好的应用

与 MongoDB 而不是 Redis 一起使用的 Kue 有啥好的替代品?

不处理 C# 方法的返回值可以吗?这个例子中有啥好的做法?