RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 708337
Accepted
Floyat
Floyat
Asked:2020-08-21 00:38:30 +0000 UTC2020-08-21 00:38:30 +0000 UTC 2020-08-21 00:38:30 +0000 UTC

内容分页的最佳实践

  • 772

数据库中有某些记录(mysql,但不重要),它们是逐页显示或通过ajax加载的(这在任务中无关紧要)。

根据评分显示条目(按降序排列)。资源用户可以更改记录等级。

在移动到另一个页面或加载新页面时避免重复记录输出的最佳方法是什么?

例子。

假设我们在数据库中有以下记录列表:

条目 #1 - 评分 15

条目 #2 - 评分 14

条目 #3 - 评分 13

条目 #4 - 评分 12

条目 #5 - 评分 11

条目 #6 - 评分 0

假设页面一次显示 5 条记录。也就是说,当您第一次访问该页面时,我们将显示以下条目并按此顺序 - 第 1 号、第 2 号、第 3 号、第 4 号、第 5 号(按评分降序排列)。如果现在,当用户还在这个页面时,记录#6的评分改变了,比如变成20,那么记录#5会再次显示在第二页,这是不正确的。

解决此问题的最佳方法是什么?

我想到了一个变体,即每次传输已显示记录的数量和第二次 - 缓存,但两者似乎都不完全正确。他们如何在用户活跃度高的大型项目中解决此类问题?语言和数据库没有特别的作用,只有方法很有趣。


用户投票存储在单独的表中:

id user_id record_id 日期

记录表中分别记录:

身份证评分

有一个选项不将评分存储在记录表中,而是每次计算直到某个日期的投票数,但在我看来这种方法很糟糕,因为。将会有很大的负载,每次您都必须对所有可用记录进行排序。

ajax
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Воробьев Александр
    2020-08-30T17:51:21Z2020-08-30T17:51:21Z

    1个选项。您可以缓存结果。(eg memcache). 如下。缓存 ID 使用时间戳。那些。我去了第一个并学习了时间戳。在我的下一次通话中,我得到了带有这个时间戳的缓存数据。当评级发生变化时,会使用新的时间戳组织一个新的缓存。如果您进一步采用这种方法,您可以只尝试受影响的页面。无论如何,这不是对实现的完整描述,而是一个可以开发的想法

    选项 2。在单独的页面上存储带有时间戳的评分历史记录。再次确保将我们正在使用的时间戳传输到服务器(会话中的参数、cookie 或变量)。您还可以丢弃访问者当前正在使用的标签。并在皇冠上加上另一个脚本,清理没有人需要的历史。

    但是,在我看来,所有这些都是不必要的复杂性。或者,最好向访问者显示:“我的朋友,评分已更改”?例如,以一种简单的方式,将访问页面上的记录的 sessionID 存储在您访问的页面上,如果它们中的任何一个在您访问的页面上,则发出一条消息......或者所有相同的 memcache。在其中,我们写入评级已更改的记录的 ID。打开新页面时,我们显示消息“帖子链接的评分已更改......这也会增加“查看深度”;)

    • 1
  2. Nikita
    2020-08-30T17:58:55Z2020-08-30T17:58:55Z

    有用于大型项目的工具。例如,我们有很多包含很多记录的表:ag-grid + OData。这些是适用于所有场合的现成的、经过验证的工具。

    在所描述的示例中,我看到了两种解决方案:

    1) 静力学。更新记录时,向用户发送评级已更改的通知。不要让新数据进入 - 制作一个更新表格的按钮,单击时会发生更新。

    2) 动力学。显示记录时,将输出记录的Id保存在客户端。如果服务器上的评分已更新,则服务器向客户端发送通知,其中包含更新评分的记录的 Id 和评分值。如果此 ID 在显示的 ID 中,则更新客户端上的当前页面,否则忽略它。可以通过对服务器的另一个请求或在客户端代码(js、ts、...)的帮助下完成更新。

    选项之一的选择取决于使用情况,例如,如果假设用户在某个时间点对评分进行快照,则第一个非常适合,如果您需要一个持续向上的页面,则第二个非常适合- 迄今为止的评级。您可以放置​​一个复选框:静态/动态并实现这两个选项。还有更多可能的用例。下一个问题将是加载服务器。

    第一个,不像第二个,不需要服务器的浏览器通知,这是一个优点,如果动态更新不重要,那么你应该选择它。

    顺便说一句,我不认为在第 2 页显示数字 5 是错误的,因为如果在它们的位置不显示记录,排序有什么用?

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5