【问题标题】:Large counting operations in real time with ajax使用 ajax 实时进行大量计数操作
【发布时间】:2014-01-06 14:39:33
【问题描述】:

在我的网上商店,订单系统分为几种形式(每个产品系列一种)。每个系列大约有 100 种不同尺寸的产品(总共约 500 个),所以几年后将是 10 个系列 x 500 种产品。

这是一个批发门户,因此客户通常会订购很多产品,而且数量通常很大。另一方面,可能永远不会出现超过 20 位客户同时下单的情况。

我想计算并显示客户订购的产品数量和总现金金额。以下是我将订单数据保存在 $_SESSION 数组中的方法:

$_SESSION['input'][34]['s']===20 // This means the customer ordered 20x product with id 34 in size S.
$_SESSION['prices'][34]===39.99 // This is the price of product with id 34.

每次客户更改集合时都会更新 $_SESSION 数组(=使用新表单访问网站)。

我的问题是显示总订单现金金额的最佳方式是什么:

  1. 依赖来自 $_SESSION 数组的数据。每次用户更改输入字段的值(jQuery 中的 keyUp 事件)时,计算起始总和与当前总和之间的总差值
  2. 使用每个 keyUp 触发 ajax 请求,计算所有内容,更新 $_SESSION,然后计算并显示总现金金额。
  3. 简单的非实时解决方案:一个“更新”按钮,只提交表单,新请求只更新页面。

以下是我的想法:数字 1. 和 2. 看起来非常好,但很难做到(对我来说),而且它们可能对服务器造成太大的负担。数字 3. 对用户来说不太方便,但它很容易做到并且使用最少的服务器资源

有什么建议吗?

谢谢!

【问题讨论】:

  • 您也可以使用 onBlur(与 onFocus 相反)来代替 keyUp。

标签: javascript php jquery ajax real-time


【解决方案1】:

据我了解(看到您提到 Ajax 的方式),商店不会在每次更改集合时刷新页面(例如更改特定产品的数量、从购物篮中添加/删除等) )。

所以假设这个(单页界面的想法)确实是这样:

对我而言,这意味着您应该仅在用户确定提交购物车时(出于结账目的或更改商店页面时)更改购物车服务器端的内容。因此,我不会在购物期间向后端执行大量请求。由于数据已经存在于 DOM 中(我假设您在屏幕上显示文章),我建议在客户端在 JavaScript 中执行价格计算和购物车内容突变,而不是通过后端请求总和并更新后端每次更改。这大大减少了所需的 HTTP 请求数量和服务器/数据库的压力。

现在可能会争论这些是否是您要在客户端执行的操作,但最终您仍将在后端验证购物车内容,以防止恶意用户提出有趣的请求。订单验证页面仍应显示后端计算的所有内容,以确保所订购的内容是支付的。

希望对您有所帮助。

【讨论】:

  • 谢谢!我同意,我会用 javascript 做前端
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多