Начало сеанса очень медленно с AJAX

3

У меня есть Ajax для загрузки содержимого другой страницы в моем div с вкладками Twitter Bootstrap. Я понял, что Ajax слишком долго загружает запрос, поэтому я решил очистить код и оставить только "session_start()". И проблема в том, что именно "session_start()".


Microtime используется для измерения времени запросов. Ниже приведены результаты тестов:

PHP С session_start(), загруженный AJAX - 29.041733980179 ms
PHP с session_start(), загруженный без AJAX - 0.00010895729064941 мс

PHP WITHOUT session_start(), загруженный 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;

Кто-нибудь знает, что происходит?

  • 0
    Есть ли какая-либо разница в заголовках, отправляемых по AJAX / обычному запросу? session_start начнет сеанс, загружает ли он очень большой набор данных?
  • 0
    Заголовки одинаковы. Тот же сеанс загружается быстро, если я вхожу на страницу с URL-адресом прямо в браузере. Уже с ajax она представляет медлительность.
Показать ещё 4 комментария

1 ответ

3

У меня была почти такая же проблема, она называется блокировкой сеанса. Когда вы выполняете несколько вызовов ajax, сервер предотвращает запись сеанса для последних вызовов, поэтому им приходится ждать завершения предыдущих вызовов. Используя session_write_close(), когда вы закончите сеанс, разблокируйте другие вызовы.

Здесь дополнительная информация: session_write_close() на php.net

Ещё вопросы

Сообщество Overcoder
Наверх
Меню