YUI自定义事件和同步操作

时间:2009-03-09 15:54:29

标签: php javascript events yui

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

  1. 同步AJAX调用:这是我继承的,它已经消失了。它会导致浏览器和系统锁定,但它确实允许您在单个执行线程中保持响应的处理。
  2. 菊花链:进行AJAX调用以执行第一次检查,如果通过,则在第一次检查的回调中进行第二次检查。处理第二次检查,如果通过,我们就成功了。这是最直接的解决方案,但它看到不必要地将我的两张支票结合在一起。我也觉得序列化检查是不必要的,会降低性能。
  3. 自定义事件:使用YUI的Event模块和自定义事件实用程序,同时触发两个AJAX调用。为每个成功案例创建一个自定义事件,并让处理AJAX响应的回调为每次成功检查抛出相应的事件。然后,每个事件的处理程序可以订阅另一个事件,如果它被抛出,那么我们已经成功完成。
  4. 我的问题涉及第三种方法,即我赞成的方法。我喜欢这样的事实:我的处理程序只通过抛出的事件连接,并且AJAX调用可以同时发生。我想知道的是,还有其他人以这种方式使用过这个模块吗?我可以期待什么样的陷阱?我担心我可能会为自己的竞争状况做好准备 - 我该怎样才能减轻这种情况?最后,对于任何读过这篇文章的人来说,还有更好的方法吗?我的清单是非详尽的,还是设计存在根本缺陷?建设性的批评和评论非常受欢迎。

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

1 个答案:

答案 0 :(得分:0)

你没有说明你有什么服务器端?我个人赞成备选方案2,但有几个实际的原因。

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

  2. 这些请求通常会运行使用某种会话的服务器端代码,这反过来会导致请求依次限制处理,因此无法实现所需的性能提升。

  3. 你需要两个结果,因此需要在它们之间创建一个耦合,如果你编写一个这样的代码,可选地链接到另一个是它的设计的一部分,它知道具体应该解耦的原因。