当我使用JQuery一起发送两个ajax请求时。。的响应
例如
$.ajax
({
type: "POST",
url: 'ajax.php'
});
$.ajax
({
type: "POST",
url: 'ajax2.php'
});
ajax.php、ajax2.php这两个文件包含一个用于循环的伪文件,耗时约5秒
FireBug屏幕
POST localhost/ajax.php 200 OK 4.77s
POST localhost/ajax.php 200 OK 4.37s
在这里,每个请求大约需要5秒才能执行。。。。。
当我在symfony做同样的例子时,我得到了不同的结果
$.ajax
({
type: "POST",
url: 'module/action1'
});
$.ajax
({
type: "POST",
url: 'module/action2'
});
动作1、动作2是两个动作,只包含一个用于循环的伪动作,耗时约5秒。
FireBug屏幕
POST localhost/web/frontend_dev.php/module/action1 200 OK 4.47s
POST localhost/web/frontend_dev.php/module/action2 200 OK 9.87s
请注意在第一个请求完成后执行的第二个请求,我不知道为什么会发生
当一个请求进来,并且它试图启动一个会话时,php将检查此时是否正在使用同一个会话。如果是,则新请求必须等待,直到另一个请求完成,或者释放会话锁定。
您的情况如下:
- 第一个请求到达,锁定会话
- 第二个reauest到达,试图锁定会话,必须等待
- [5秒睡眠]
- 第一个请求完成,释放锁定
- 第二个请求启动,实现会话锁定
- [5秒睡眠]
- 第二个请求完成
默认情况下,symfony会在每个请求开始时启动会话。
在纯PHP中,您可以使用session_write_close()
释放会话文件的锁。Symfony有sfUser类,它封装了会话功能性,您需要调用它的shutdown()
方法。
请注意,如果您稍后在该请求中修改任何会话数据,它将不会被保存。
要获得更详细的解释,请阅读PHP会话写锁定以及如何在symfony中处理它。
symfony可能对ajax请求做了一些事情。如果你尝试会发生什么:
$.ajax
({
type: "POST",
url: 'module/action1',
async: true
});
$.ajax
({
type: "POST",
url: 'module/action2',
async: true
});