繁体   English   中英

YUI 自定义事件和同步动作

[英]YUI custom events and simultaneous actions

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

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

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

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

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

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

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

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

暂无
暂无

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

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