Sha*_*aun 3 ajax performance jquery http
如果我有一个jQuery POST调用,则类似于:
$.post(url : "myserver/1", data : params, success: function () {
$.post(url : "myserver/2", data : params2);
});
Run Code Online (Sandbox Code Playgroud)
这将打开多少个HTTP连接?我假设它打开2。
我正在尝试复制网页在Python脚本(作为性能测试类型脚本)中的作用。如果这样做的话,速度会更快:(伪代码)
for i in 0 to 5000:
Open HTTP Connection
POST
POST
Close HTTP Connection
Run Code Online (Sandbox Code Playgroud)
与
for i in 0 to 5000:
Open HTTP Connection
POST
Close
Open HTTP Connection
POST
Close
Run Code Online (Sandbox Code Playgroud)
我认为第二项测试是浏览器将要执行的操作。我本质上是想复制该页面5000次点击(背对背)的速度。显然,我可以并行执行此任务-但这不是我想要的
现在,假设jquery正在建立2个HTTP连接,是否有一种简单的方法来维持持久连接?
jQuery无法控制连接的数量-浏览器会随心所欲地打开(通常2-8个),然后通过它们推送您的请求。您的代码可能只会打开一个连接,因为您在启动第二个请求之前正在等待第一个请求完成。
您当然不能在javascript中使用线程,但是您可以一次发起任意多个请求,这样可以最大程度地利用浏览器所允许的连接数。
您可能想要类似:
var CONCURRENCY=4, qty = 5000, cnt = 0
function testOnce() {
cnt = cnt + 1;
if (cnt >= qty) { return; }
$.post(url : "myserver/" + cnt, data : params, success: testOnce)
}
for (var i=0; i<CONCURRENCY; i++) {
testOnce()
}
Run Code Online (Sandbox Code Playgroud)
即使这样,您也只会打开几个连接并通过这些连接发送所有请求。这实际上并不会给您的服务器应用程序以您所希望的击败,包括tcp设置和拆卸。浏览器经过专门设计,可避免重击任何一台服务器。如果您发出过多请求,它们将等待您浏览器的网络管理器中的可用连接。
如果您在服务器上禁用了http keep-alive,则距离会更近,但这可能无法实现或可能会影响结果。禁用此选项后,将强制每个请求建立新的连接。但这是不现实的悲观。一切取决于。实际的负载测试并不是那么容易。但是通常您不需要如此现实-您真正想要测试什么?
Wireshark将向您展示实际发生的一切。
| 归档时间: |
|
| 查看次数: |
8362 次 |
| 最近记录: |