在一些jQuery $ .ajax调用之后,网站失去了性能

时间:2013-02-11 15:09:26

标签: ajax performance jquery

我承认我对完整的ajax网站很不错,所以我肯定犯了一些错误。

问题在于: 在http://lamovida.arabianessence.com

每个页面都使用此函数加载$ .ajax调用

function getAjaxPage() {
  $('a.ajaxc').click(function() {
$("li.page_block").find(".wrapper").fadeOut(400).remove();
  hideSplash();
  var $thishref = $(this).attr('href'),
      $thisurl = $thishref.replace("#!/",""),
      $urlArr = $thisurl.split('-'),
      $urlOk = $urlArr[0],
      $dataOk = $urlArr[1];

      $.ajax({
        url : $urlOk + ".php",
    data :  'id='+$dataOk,
    success : function (data,stato) {
      $("#content").css({opacity:1}).fadeIn(400);
      $("li.page_block").html(data);
      $("li.page_block").css('visibility', 'visible');
      $("li.page_block").find(".wrapper").css({opacity:0}).show().animate({opacity:1},1000);

                var $whgt = $(".wrapper").height(),
                    $ctop = ( ( $(window).height() - $whgt ) /2 )-40;

                $("#content").stop().animate({height: $whgt+40, top: $ctop},1000);
                $("li.page_block").css('padding-top',20);

                $('.scrollable').jScrollPane();
                $('.slider>ul>li').jScrollPane();

                getAjaxPage();
            },
            error : function (richiesta,stato,errori) {                     
                alert(errori);
            }
        });
  });
}

每次调用此函数时,内容都会使加载程序变慢,并且在大约20次单击后,事情变得非常糟糕,加载时间也会增长和增长。

我尝试使用Google Chrome的时间轴分析情况,我看到每次点击后浏览器都会占用更多内存。如果我评论getAjaxPage();排在“成功”部分的情况开始变得更好,但当然我失去了所有的内部导航。

我该怎么做才能避免这个问题?

非常感谢所有人!

1 个答案:

答案 0 :(得分:2)

$('a.ajaxc').click()的每次调用都是添加新的事件处理程序,因此每次点击都会导致发出更多请求。第一次单击后,每次单击都会导致两个请求。再次点击?另外三个要求。等

将处理程序放在函数外部,每次单击只有一个AJAX调用:

$(document).ready(function() {
    $('a.ajaxc').click(getAjaxPage);
});

我也没有看到在回调中再次调用getAjaxPage的原因,所以也要删除它以避免无限循环的请求。