繁体   English   中英

在这种情况下我应该使用视图状态吗?

[英]Should I use viewstate in this case?

我有一个资产跟踪设备,它每隔几秒钟就会使用 HTTP 请求将有关其位置的详细信息发送到通用处理程序。 该信息随后存储在 SQL 数据库记录中。 它工作正常,但我试图以这样的方式进行:如果设备是静止的,则处理程序将停止创建新记录并简单地更新最后一条记录中的“最后一次 ping”时间戳。

为此,我需要一种方法让处理程序知道最后收到的坐标与先前请求的坐标相同。 除了查询数据库以检查最后的坐标是什么之外,有没有办法判断它们是否发生了变化? 我正在考虑将值存储在视图状态变量中,然后将新读数与其进行比较,但我不知道这是否有效。 有没有更专业的处理方式?

无论您怎么看,您所描述的操作都是:

if (new != old)
  save new

为了执行此操作,您需要两条信息。 old new 只要存在这两条信息,就可以在服务器端或客户端执行此操作。

所以选项包括:

  1. 客户端总是向服务器发送new的。 服务器从以前的数据(数据库)中读取old数据并执行操作。
  2. 客户端总是向服务器发送oldnew的。 为此,客户必须在某处保留old副本。 (查看 State 是一个选项,但它的存储方式并不重要。可能只是一个 JavaScript 变量,真的。)
  3. 客户端执行此操作并且仅有条件地向服务器发送new的。 为此,客户仍然必须在某处保留old副本。

各有利弊。 3 是.network 上最不健谈的。 1 和 2 执行逻辑服务器端,您可以在其中更好地控制它。 1 根本不需要客户知道任何事情。 2 假设客户的数据是正确的,这可能会带来风险。 ETC。

如果目标是让客户端保持“哑巴”并将所有逻辑保留在服务器上,我个人会选择 1。您可以通过在服务器端应用程序或某些高级应用程序中缓存信息来防止重新查询数据库性能缓存系统。

您甚至可以将比较卸载到数据库本身,并且没有应用程序代码知道/关心是否new != old 存储过程处理逻辑。

或者,如果目标是减少资源使用,那么 3 变得非常有吸引力。 网络活动可能比数据库活动更慢、更不可靠、更不可用(例如在偏远地区使用无线连接时),而且可能更昂贵。

问题很快就变成了……你想优化什么? 要回答这个问题,首先您需要具体衡量和定义您的瓶颈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM