我使用Ajax通过Twitter Bootstrap选项卡加载我div中另一个页面的内容。 我意识到Ajax加载请求的时间太长,所以我决定清理代码并只留下'session_start()'。 而问题恰恰是'session_start()'。
Microtime用于衡量请求的时间。
以下是测试结果:
PHP with session_start()用AJAX加载 - 29.041733980179 ms
没有AJAX加载的session_start()的PHP - 0.00010895729064941 ms
PHP WITHOUT session_start()用AJAX加载 - 1.6927719116211 ms
这是我的Javascript代码:
$(function() {
$("#MainTabs").tab();
$("#MainTabs").bind("show", function(e) {
var contentID = $(e.target).attr("data-target");
var contentURL = $(e.target).attr("href");
if (typeof(contentURL) != 'undefined')
$(contentID).html('<img src="<?php echo IMG_DIR; ?>loading/loading-large.gif" width="64" />').load(contentURL, function(){
$("#MainTabs").tab();
});
else
$(contentID).tab('show');
});
$('#MainTabs a:first').tab("show");
});
这是我的PHP代码:
<?php
$start = microtime(TRUE); // Start counting
set_time_limit(0);
// session_start();
$temp = microtime(TRUE) - $start;
echo $temp;
exit;
有谁知道发生了什么事?
答案 0 :(得分:4)
我遇到了几乎相同的问题,它被称为会话锁。当您执行多个ajax调用时,服务器会阻止后一个调用的会话写入,因此他们必须等待先前的调用结束。完成会话后使用session_write_close()
解锁其他通话。
以下是更多信息:session_write_close() on php.net