2016-07-04 2 views
0

jQuery는 Firefox, Chrome 및 Opera에서 잘 작동하지만 Internet Explorer에서는 이 시작될 때까지 너무 많은 시간이 걸립니다.이 시작됩니다.AJAX 호출을 시작할 때 Internet Explorer가 지연됩니다.

많은 기사를 읽었으며 가능한 한 빨리 코드를 만들려고했지만 클래스, foreach 루프 등의 선택을 피했지만 비교적 빠른 요청을 보내더라도 너무 많은 시간이 걸립니다 시작됩니다. 예 :

function getDisturbanceData() { 
    $body.addClass("loading"); 
    $.ajax({ 
     type: "POST", 
     url: "Default.aspx/GetAllDisturbances", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: JSON.stringify({ 
      "itemsPerPage": itemsPerPage 
     }), 
     success: function (data) { 
      CreateTable(data.d); 
      $body.removeClass("loading"); 
     } 
    }); 
}; 

위의 내용은 $body.addClass("loading");이 시작되기 전에 약 1 초가 걸립니다. 코드 자체가 빠르며 로딩 화면 사이의 시간이 표시되고 테이블이 만들어지는 시간이 다른 브라우저보다 길지 만 사용자가 화면을 볼 수있을 때까지 페이지가 고정됩니다. 나는 코드가 완료 될 때까지 그 시간이 필요하다는 것을 압니다. 왜냐하면 여기에 많은 양의 데이터를로드하기 때문에 (보통 크롬에서 1.4 초) 로딩 화면에 대한 이유가 있지만 그 전에는 시간을 설명 할 수 없기 때문입니다.

추가 정보 : Internet Explorer + Firefox 지원을 위해 ASP.NET 프레임 워크와 webshim.polyfill을 사용합니다. 다음 기본 난 단지 bootstrap.css/js, bootstrap-tokenfield.css/js, jquery-ui.css 수입 자바 스크립트 파일을 ASP.NET과의 standart jquery

에 나는 인터넷 익스플로러에 대해 아무것도 또는 내가 그것을 속도를 할 수 몰라요. 나 좀 도와 주시겠습니까?

추가 정보가 필요하면 원하는 것을 분명하게 물어보고 내가 그런 문제가 없었으므로 어떻게 제공 할 수 있는지 설명 할 수 있다면 친절 할 것입니다.

업데이트 페이지로드시 한 번 호출되는이 코드 부분에 문제가있을 수 있습니까? 그냥 C#을 백엔드에서 세션 변수를 확인하고 true 또는 false를 반환하지만 비동기

function IsUserLogedIn(handleData) { 
$.ajax({ 
    type: "POST", 
    async: !1, 
    url: "logon.aspx/IsUserLogedIn", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     handleData(data.d); 
    } 
}); 

}

갱신 2
내가 아는 지금 무슨 일이 인터넷 익스플로러 아래에서 내 페이지를 느리게하지만 난 완전히 우둔 해요 왜. 이 몇 줄.

<div id="logon_table"> 
    <asp:Label ID="lblName" runat="server" Font-Bold="true" Text="Name:"></asp:Label><br /> 
    <input type="text" ID="txtName" /><br /><br /> 
    <asp:Label ID="lblpwd" runat="server" Font-Bold="true" Text="Passwort:"></asp:Label><br /> 
    <input type="password" id="txtPassword"/><!--this element is the problem--><br /><br /> 
    <input type="button" ID="ButtonLogin" Value="Login" autofocus /> 
    <input type="button" ID="ButtonCancel" Value="Abbrechen" /> 
</div> 

내 페이지 속도가 느려집니다. 내가 그 (것)들을 제거 할 때 모두는 잘 작동한다 - 비록이 성분에 붙어있는 어떤 CSS/js없이조차, 상호 작용은 1s에 의해 연기된다. 모든 클래스와 배경 작업을 모두 제거 할 때 사용자는 링크를 클릭 할 때까지 기다려야합니다. 왜 아무도 알지 못해?

+0

어떻게'getDisturbanceData()'가 호출 되었습니까? 발생한 이벤트와 해당 함수 호출 사이의 모든 코드를 확인해야합니다. –

+0

사용중인 I.E 버전을 제공 할 수 있습니까? –

+0

pageload에서 호출됩니다. 모든 Ajax 요청이 지연되기 때문에 이는 단지 문제가 될 수 있습니다. 버튼을 클릭하여 완전히 비어있는 아약스 요청을받는 경우에도 시작하기 전에 시간이 걸립니다. –

답변

1

페이지 하단의 $(document).ready() 처리기 안에 모든 코드가있는 것으로 의심됩니다. 즉, 브라우저가 DOM이 완전히로드되었다는 것을 알리기 전에 Ajax 리소스를 가져 오는 작업이 시작되지 않습니다.

다음과 같이 코드를 구성하십시오. $(document).ready()의 외부는 :

function getDisturbanceData(itemsPerPage) { 
    // don't use a POST request to GET data 
    return $.ajax({ 
     type: "POST", 
     url: "Default.aspx/GetAllDisturbances", 
     dataType: "json", 
     data: { 
      itemsPerPage: itemsPerPage // jQuery does the JSON serializing 
     }         // (also think whether JSON is necessary to 
    });         // deliver *a single* parameter) 
} 

$('body').addClass("loading"); 
var disturbanceData = getDisturbanceData(25); 

이제 일반 $(document).ready() 핸들러 내부 :

disturbanceData.done(function (data) { 
    CreateTable(data.d); 
}).fail(function (jqXhr, status, error) { 
    // show the error somewhere 
}).always(function() { 
    $('body').removeClass("loading"); 
}); 

이 아약스 자원을로드하기위한 일반적인 팁입니다. 가능한 빨리 요청을 시작하십시오.그런 다음 문서가로드 될 때 결과를 처리하려면 the promise interface of jQuery Ajax requests과 작업하십시오.

+0

+1 용 제다이 예제. 나는 그것이 소비자 퍼블릭 액세스 페이지라면, 구글 페이지 스피드에 부정적인 영향을주기 때문에 머리를 쓰지 않을 것이다. 닫히지 않고 '' 태그 바로 앞에 붙였습니다. 라이브러리가로드되고 javascript가 파싱됩니다. DOM이 이미 준비되어 있기 때문에 DOM을 준비 할 필요가 없습니다. 몇 마이크로 초를 절약하십시오. – Tschallacka

+0

충분히 공정하게, 나는 ''에 관해서 그 비트를 제거했다. – Tomalak

+0

힌트를 주셔서 감사하지만 문제가 해결되지는 않습니다. –

관련 문제