0

我正在开发一个必须通过 AJAX 执行两个单独检查的 JavaScript 应用程序。根据每次检查的结果,行为会有所不同。我在这里感兴趣的案例是两项检查都成功的情况。我已经确定了一些方法来做到这一点,我想从 SO 那里得到一些关于他们认为最好的方法是什么的反馈。

  1. 同步 AJAX 调用:这是我继承的,它已经消失了。它会导致浏览器和系统锁定,尽管它确实允许您在单个执行线程中处理响应。
  2. 菊花链:进行 AJAX 调用以执行第一次检查,如果通过,则在第一次检查的回调中进行第二次检查。处理第二次检查,如果通过,我们就成功了。这是最直接的解决方案,但它看起来不必要地将我的两个检查结合起来。我也觉得序列化我的检查是不必要的,并且会降低性能。
  3. 自定义事件:使用 YUI 的事件模块和自定义事件实用程序,同时触发两个 AJAX 调用。为每个成功案例创建一个自定义事件,并让处理 AJAX 响应的回调为每次成功检查抛出适当的事件。然后每个事件的处理程序可以订阅另一个事件,如果它被抛出,那么我们已经成功完成。

我的问题与我喜欢的第三种方法有关。我喜欢这样一个事实,即我的处理程序仅通过抛出的事件进行连接,并且 AJAX 调用可以同时发生。我想知道的是,有没有其他人以这种方式使用过这个模块?我可以期待什么样的陷阱?我担心我可能已经为比赛条件做好了准备——我该如何缓解这种情况?最后,对于读到这里的任何人,有没有更好的方法?我的清单是不是详尽无遗,还是设计存在根本缺陷?建设性的批评和评论非常受欢迎。

编辑:虽然服务器请求确实使用会话,但它们彼此无关并且不写入会话数据,因此它们没有理由不在服务器上并行发生(除非 PHP 会话有一些我不知道的限制关于)。我们也进行服务器端检查,但我们发现在某些重要事件之前,我们需要立即与服务器进行检查,以便在极少数情况下通知用户某些事情发生了变化。

4

1 回答 1

0

你没有说明你有什么服务器端?出于几个务实的原因,我个人赞成选项 2。

  1. 跨浏览器意味着支持 IE,而 IE 只允许向服务器发送 2 个未完成的请求。我会避免以这种方式同时使用它们,这可能会导致浏览器明显锁定,虽然没有使用同步请求那么严重,但仍然很糟糕。

  2. 通常,此类请求将运行使用某种会话的服务器端代码,这反过来又倾向于将请求限制为按顺序处理,因此无法实现所需的性能增益。

您需要这两个结果,因此该要求是在它们之间创建耦合,如果您编写一个这样的代码,可以选择链接到另一个是其设计的一部分,它知道具体为什么应该足够解耦。

于 2009-03-09T20:28:38.247 回答