Ale*_*dam 3 javascript java ajax servlets
我有一个软件设计问题,关于处理客户端javascript程序的最佳方法是什么,它依赖于多个(但大部分是连续的,不是同时的),短暂的AJAX调用服务器作为对用户交互的响应[在我的特定情况下,它将是一个facebook-GAE/J应用程序,但我相信这个问题与任何客户端(浏览器)/服务器设计有关].
首先,我问了一个问题:ajax通话的寿命是多少?.根据BalusC的回答(我鼓励它在那里阅读),简短的回答是"这取决于浏览器".所以,现在我还没有真正控制服务器发送响应后发生的事情.
如果AJAX调用的主要用途是从服务器只检索一次数据,是否可以手动销毁它?xhr1.abort()会这样做吗?
或者,最好的选择就是这样吗?手动关闭每个连接(如果可能的话)会给每次调用增加太多开销吗?
是否可以手动设置每个域的限制?
最后(但并非最不重要!),我真的应该为此担心吗?什么是大量的调用足以开始推迟浏览器(特别是一些IE浏览器与BalusC在另一个问题中提到的泄漏错误?请记住,这是我的第一个javascript/java servlets项目.
先感谢您
使用范例XHR
是您不必担心对象会发生什么 - 浏览器的引擎会在幕后为您处理.因此,我认为尝试手动"改进"事物没有任何意义.浏览器开发人员当然知道99.9999%的JS程序员不这样做,因此他们不仅考虑了它,而且可能也针对该场景进行了优化.
除非你手上有一个具体的问题,否则你不应该担心它.
至于限制每个域的AJAX调用数量(并发未完成的调用,或者调用的总调用,或者您可能感兴趣的任何其他度量),解决方案将是古老的CS经典:添加另一层抽象.
在这种情况下,额外的抽象层将是一个函数,通过它可以路由所有AJAX调用; 然后,您可以实现跟踪每个呼叫进度的逻辑(如果您需要,则为每个域),并根据该状态拒绝或推迟传入呼叫.要正确得到它并不容易,但它确实可行.
不过,我建议也并不担心这个,除非和直到你在你的手中一个具体问题.:)
更新:
浏览器会对并发的AJAX调用强制执行自己的限制; 这里有一个非常好的问题:在流行的浏览器中允许多少并发AJAX(XmlHttpRequest)请求?
另外,正如TJ Crowder在评论中提到的那样:确保在完成XHR对象时不要保留对XHR对象的引用,以便它们可以被垃圾收集 - 否则,您自己就会创建资源泄漏.
第二次更新:
有一篇关于在这里重用XHR的博文很好- 它实际上是一系列相关帖子的开头.在不利方面,它已过时,并没有得出任何实际结论.但它涵盖了重复使用XHR的机制.