【问题标题】:Best way to save ever changing data [closed]保存不断变化的数据的最佳方法[关闭]
【发布时间】:2014-08-15 20:35:14
【问题描述】:

我有一个包含许多行的网络应用程序。每行都有一个带有“0”的标签和一个按钮。按下按钮会使标签增加 1。

应用开始时只有一行,但用户可以根据需要添加任意数量。

标签中的所有值都需要保留。因此,如果一个登录用户添加了 10 行,并在每行上按了几次按钮,那么下次他们回来时,他们的所有值都应该保持不变。这就是问题所在,因为我不确定保存这些值的最有效方法。

我的第一个想法是在单击每个按钮时进行 AJAX 调用,但如果用户向按钮发送垃圾邮件以达到某个值,那么我进行了许多多余的调用。我也可以每 x 秒保存一次所有行,但是如果用户更改一行然后在下一次保存触发之前离开,这可能会给用户留下不完整的数据持久性。我也想过在卸载时节省,但这不会吸引那些只是关闭浏览器或标签的用户。

我正在使用 MVC、Jquery、C# 和 MSSQL。我的网站和数据库位于同一台服务器上。

【问题讨论】:

  • 我相信,如果您向按钮发送垃圾邮件,它将取消以前的请求,因此只要您发送总数而不是增加总数,就可以了。
  • 如何将数据置于会话状态并在会话结束时进行处理?
  • @drneel 如果他们的垃圾邮件速度很慢(每秒 1 次)怎么样,那会给 ajax 调用足够的时间来调用我的服务器并启动数据库调用。
  • 不要想太多,它应该在每次点击按钮时保存,垃圾邮件问题是您需要解决的问题,例如禁用按钮,直到您得到响应
  • 如果用户必须单击按钮 x 次才能使行包含值“x”,那么我认为这可能是 UI 设计问题。您能否为用户提供一种输入所需值(# 或行、行内计数等)而不是让他们“向按钮发送垃圾邮件”的方法?

标签: c# jquery sql-server asp.net-mvc


【解决方案1】:

我不会禁用按钮,因为它可能会损害可用性 - 我不知道您正在使用的具体上下文,但如果您担心按钮垃圾邮件,那么这可能是用户的有效场景。服务调用可能需要一些时间,具体取决于底层网络以及客户端和服务器之间的距离。从用户的角度来看,如果输入可以在 10 到 100 毫秒内传递,则应用程序的反应会快速而平稳 - 如果您每次用户按下按钮时都执行服务调用,则可能会损害这一目标。

避免这种情况的常见模式是使用计时器:当用户按下按钮时,会启动一个计时器,该计时器可能会运行 400 到 500 毫秒:

  • 如果用户在计时器到达间隔结束之前提供了新的输入,则应重新启动计时器
  • 如果计时器确实在没有用户进一步输入的情况下发出了间隔结束的信号,您可以放心地拨打服务电话。

我在自己的解决方案中使用了这种模式。我从 Jeff Johnson 的优秀书籍Designing with the mind in mind 中得到了时间值。

【讨论】:

  • 我喜欢这个选项。可能还想添加一些内容:如果在没有保存的情况下发生了 x 次操作,或者自上次保存以来已经过了某个总时间段(超级垃圾邮件用户将进行 5000 次点击),那么继续并在该最大间隔内触发保存。
猜你喜欢
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 2020-08-26
  • 1970-01-01
相关资源
最近更新 更多