【问题标题】:Session Start is very slow with AJAX使用 AJAX 会话启动非常慢
【发布时间】:2013-12-14 13:41:04
【问题描述】:

我使用 Ajax 使用 Twitter Bootstrap 选项卡在我的 div 中加载另一个页面的内容。 我意识到 Ajax 加载请求的时间太长,所以我决定清理代码并只保留“session_start ()”。 而问题正是'session_start()'。


用于测量请求时间的微时间。 以下是测试结果:

PHP WITH session_start() 加载了 AJAX - 29.041733980179 毫秒
没有 AJAX 加载 session_start() 的 PHP - 0.00010895729064941 毫秒

没有 session_start() 的 PHP 加载了 AJAX - 1.6927719116211 毫秒


这是我的 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;

有人知道发生了什么吗?

【问题讨论】:

  • 在 AJAX/常规请求中发送的标头有什么不同吗? session_start 将启动会话,它正在加载一个非常大的数据集吗?
  • 标题相同。如果我直接在浏览器中输入带有 url 的页面,则相同的会话加载速度很快。已经使用 ajax,她表现得很慢。
  • session_start 不是线程安全的,因此它会阻止具​​有相同会话 ID 的多个请求。因此,如果您的页面同时发出多个请求并且所有请求都使用 session_start 加载页面,那么您将排队。这可能是你的问题吗?
  • 请求的发出方式(对于服务器)应该没有区别。您可以记录所有 HTTP 标头吗? @Rob 这是个好建议
  • Ajax call VERY SLOW with PHP 的可能重复项

标签: javascript php jquery ajax twitter-bootstrap


【解决方案1】:

我遇到了几乎相同的问题,它被称为会话锁。当您执行多个 ajax 调用时,服务器会阻止为后面的调用写入会话,因此它们必须等待前面的调用结束。完成会话后使用 session_write_close() 解锁其他呼叫。

这里有更多信息:session_write_close() on php.net

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 2013-12-14
    • 2012-01-24
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多