jquery $ .post()Ajax是否可以扩展到大量使用,还是保持套接字打开?

Dra*_*ord 5 sockets ajax jquery

我需要构建一个可以处理100个查询/秒的Web级公共站点.我想使用Ajax使其具有交互性.Ajax必须在所有主流浏览器和所有合理的情况下都是防弹的(停止,从客户端重新启动页面;在离开终端后第二天返回;等等)服务器将是一个分布式Linux服务器场.

Jquery $ .post()似乎可以满足要求.

在过去,Ajax是通过聪明的方案实现的,以保持服务器和客户端之间的套接字打开.这种方法然后支持"Ajax Push",又名"HTTP Server Push"或"Comet",这是一种双向通信管道,允许服务器向客户端发起数据包.

我用这种Ajax方法看到的主要问题是它显然在服务器上占用了一个套接字,无限期很长一段时间.这似乎不会扩大规模.次要问题是,一夜之间打破调制解调器连接将破坏管道; 从保存的本地版本重新加载页面可能不会重新建立实时管道; 各种浏览器需要各种不可靠的黑客才能让Ajax首先运行.

基于发布请求,使用严格的"客户端拉取"Ajax模型似乎可以解决所有这些缺点.如果我能获得防弹实施基板,我很高兴放弃未经请求的服务器推送能力.

所以我使用的是一个简单的 调用,这对于Firefox和Safari来说似乎运行良好.
$.post( 'serverAjaxModule.php' ,
{mydata: Dataword },
function(output){ do_handle_results( output); });

但是,我不知道这是在做什么.我知道.post是.ajax的一个宏,并且似乎有一些命令,例如.ajaxSetup和.ajaxStart,它们的名称似乎使它们成为需求.然后就是jquery-ui.min.jsinclude,它几乎可以像设置一样运行.

那么我的问题是:

  1. jquery $ .post是否适用于大规模使用?

  2. 使用旧的连续开放套接字范例实现$ .post,还是每次执行客户端拉动ajax消息时都建立新的套接字连接?启示?

  3. 我是正确的思维,我并不需要调用额外的东西,如.ajaxSetup也不.ajaxStart,等等,我可以先走一步,成功.post的调用$没有任何不寻常的后果是什么?

  4. 这个功能的jquery跨浏览器功能有多好?我可以依靠它简单地为所有合理的现代浏览器工作,还是我必须注意的已知的浏览器?

  5. 这种Ajax技术的方法在古代浏览器方面有多远?.post似乎是使用往返POST技术,它应该是完全通用和防弹的; 但我似乎记得使用旧技术的情况,其中一些浏览器太旧而无法支持Ajax,我们不得不费力地编写代码.现在,那些日子已经过去了,新的jquery?在文明的国际世界中,我有多担心非Ajax支持?

  6. 还有什么需要注意的吗?如果您刚刚开始构建可大规模扩展的实现,那么您希望有人告诉您关于创建动态,交互式Web体验的最重要的一点是什么?

非常感谢您的帮助.

Mih*_*ncu 3

$.ajaxSetup不是必需的,但很有用:

  • 如果您运行 a ,$.post则无法定义错误处理函数,并且调试将很困难 - 在这种情况下,您可以在 ; 中定义通用错误$.ajaxSetup函数
  • 如果您运行 a$.post并接收需要显示的 HTML 数据,并且需要其元素将事件绑定到它们 - 您将能够定义应将哪些事件处理程序重新应用于这些新对象;

$.ajaxStart也不需要。

jQuery UI 是一个用户界面核心库,通常包含一些其他库,例如拖放元素行为、可排序元素行为和一些小部件,如手风琴菜单、模式消息框等。除非您打算实际使用它,否则不需要这样做用于构建前端的 API。

1 它没有(据我所知)不扩展的建设性理由;当然,如果您将其设置为每毫秒向服务器发送请求,则可能会使服务器崩溃(有许多并发用户)或使浏览器崩溃(打开无限循环的连接)或两者兼而有之,但无论哪种情况都是不好的工艺

2 不是,它不保持打开的套接字

3 是

4 它适用于包括 IE6 在内的任何浏览器 - 但某些浏览器(例如 IE6)可能会由于大量 JavaScript 代码(及其内存泄漏)而遇到更大的速度减慢

5 IE6

6

  • 长时间打开的浏览器会像花生酱一样消耗内存;
  • JSON 是你的朋友 - 构建你的应用程序时要考虑到前端逻辑,不要使用通过网络发送的 HTML 来构建它,这会使事情变得复杂(你需要将事件处理程序重新绑定到通过 AJAX 接收到的每个新对象,你几乎没有格式化访问权限到您刚刚收到的 HTML 大型博客等);
  • 获取JSON数据,使用前端模板引擎(例如Mustache.js)使用JSON组合数据;

内存泄漏和/或已加载和未使用的内容通常会在刷新后被清除 - 特别是在 Chrome 中 - 另一方面,Firefox 是一个真正的内存吞噬者,即使没有任何活动,打开它 6-12 小时,你也会看到内存泄漏的增加内存使用情况。