我正在实现一个典型的服务器推送(Comet)应用程序。我在长轮询XHR和iFrames之间选择。它们各自有哪些优缺点?我知道跨站点限制和iFrame是一个相当笨重的组件... 还有其他区别吗?例如,传输的“可靠性”或对组件的控制级别?
你认为,有没有一种正确答案来决定哪种方法更好,还是两者都有各自的使用场景?
先提前感谢你。
P.S. 我已经有了一个非常好的XHR实现,但我想考虑其他选择。
我正在实现一个典型的服务器推送(Comet)应用程序。我在长轮询XHR和iFrames之间选择。它们各自有哪些优缺点?我知道跨站点限制和iFrame是一个相当笨重的组件... 还有其他区别吗?例如,传输的“可靠性”或对组件的控制级别?
你认为,有没有一种正确答案来决定哪种方法更好,还是两者都有各自的使用场景?
先提前感谢你。
P.S. 我已经有了一个非常好的XHR实现,但我想考虑其他选择。
https://developer.mozilla.org/en/XMLHttpRequest
当您发出长时间请求时,2个连接限制非常重要:如果您占用了两个管道,其他任何内容都无法通过!您必须小心地设置一个所有页面代码共享的单一通道。但是在Firefox上,您现在可以获得一些余地,但前提是您使用XHR。如果要使其智能手机友好,可能需要担心的一件事是运营商可以并且会在数据通过他们的网络时进行干扰。通常是为了压缩它。
由于 iframe 方法在某种程度上流式传输带有一些 JS 的网页,因此对于运营商来说,它更像一个网页,更容易被干扰。在这种情况下,我的主要关注点是将其缓存起来,以防止泄漏 - 他们不太可能改变您实际 JS 的含义。
如果您实际返回 XML,则 XHR(特别是)不太可能被运营商干扰。
当然,好的运营商会理解发生了什么,并让两种方法都起作用。但并非所有运营商都是好的。
这是一个难以判断和计划的问题,但值得考虑。
我不知道您在比较iframe和longpull时的意思,但我认为iframes非常危险,并且由于您提到的浏览器限制,它们往往使开发变得更加困难。另一方面,使用长轮询XHR应该更容易实现,因为它与您当前的XHR实现相比具有同步性。
毫无疑问,XHR是更干净的解决方案,并具有先前提到的所有优点。
由于代码易于实现,我建议您同时进行测试,并在多个平台上进行测试。创建两个应用程序,它们将显示错过的投票数量,并请求十几个朋友在尽可能多的设备上运行该应用程序。
然后回报结果!
我认为长轮询XHR是更好的选择,原因如下:
这是未来的趋势。iFrames正在迅速失去市场。
我认为这是数据和显示更好的分离方式。您可以获取数据,然后在客户端处理显示。这也将允许您使用相同的数据源并针对不同平台以不同方式显示它。在PC Web浏览器上显示将与在iPhone上显示不同。