簡體   English   中英

ASP.NET長期運行的Ajax請求。 頁面響應度

[英]ASP.NET long-running Ajax Request. Page responsiveness

頁面加載完畢后,我需要立即在頁面的一個用戶控件中啟動數據提取,以使其填充一些顯示在該用戶控件中的網格中的搜索結果。 提取這些搜索結果的查詢可能需要花費相當長的時間(8-10秒)。

我的目標是提出一個Ajax請求,以僅更新頁面中包含用戶控件的部分,以便用戶可以自由地與頁面上的其他元素進行交互,而昂貴的用戶控件則自行加載其自身的數據。

在我當前的方法中,該控件正在加載時,用戶無法與頁面上的任何元素進行交互。 例如,當他們單擊頁面其他位置的按鈕時,直到長時間運行的ajax請求完成,按鈕單擊的回發的Page_Load()才到達。 似乎其他Ajax請求在長期運行的請求后面排隊等候。

這是我的方法(用於Ajax的Telerik控件):

我有一個RadAjaxPanel,它具有一個隱藏按鈕,將導致Ajax回發。 頁面加載時,通過Javascript單擊此按鈕。 在按鈕的單擊處理程序中,有代碼將用戶控件加載到ContentPlaceHolderControl中並加載控件的數據

<telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" LoadingPanelID="LoadingPanel1">
                <asp:PlaceHolder runat="server" ID="PlaceHolderControl">

                      <!-- user control loaded here -->

                    <telerik:RadButton ID="btnRADAjax" runat="server" Style="visibility: hidden;"></telerik:RadButton>

                </asp:PlaceHolder>

調用按鈕執行Ajax回發的Javascript:

  function DoAjaxPostBack() {


            var interval = setInterval(function() 
                {
                    if(document.readyState === 'complete') 
                    {
                        var argmnt='';
                         var ajaxManager =  $find("<%=RadAjaxManager.GetCurrent(Page).ClientID %>");
                        ajaxManager.ajaxRequestWithTarget('<%= btnRADAjax.UniqueID %>', argmnt);

                        clearInterval(interval);
                    }
                 },100)
       }

在pageLoad上:

 If Not IsPostBack Then
            RadScriptManager.RegisterStartupScript(Page, Page.GetType(), "1", "DoAjaxPostBack('');", True)
 End If

這是一種合理的方法,並且沒有辦法讓Ajax請求彼此阻止嗎? 還是有另一種方法可以使長期運行的請求在自己的世界中單獨運行,而又不會干擾其所駐留頁面的響應速度? 我正在考慮嘗試使用IFrame。

謝謝!

我不知道RadAjaxPanel工作原理,但我認為您正在使用ASP.NET的會話鎖系統。

默認情況下,您不能在ASP.NET中使用同一會話運行兩個並發請求。 因此,您的耗時8-10秒的長請求將阻止所有后續請求,直至完成。 這就是為什么直到第一個請求完成才到達Page_Load()的原因。

您可以嘗試調整頁面的EnableSessionState屬性以禁用鎖定。

有關更多信息,請參見此帖子:

我剛剛發現了為什么所有ASP.Net網站都運行緩慢的原因,並且我正在嘗試解決該問題。

調用瀏覽器的“開發工具”->“網絡”選項卡(通常使用F12鍵)並檢查處於“待處理”(或類似狀態)狀態的請求。 如果有任何(可能長時間運行的)請求,則可能是由於在啟用會話狀態時阻止並發請求引起的。 檢查以下資源,以了解有關可能發生這種情況的更多信息以及相關的內部ASP.NET詳細信息:

為什么我不能同時為ASP.NET應用程序執行來自同一會話的兩個請求?

ASP.NET會話狀態概述-並發請求和會話狀態

我剛剛發現了為什么所有ASP.Net網站都運行緩慢的原因,並且我正在嘗試解決該問題。

如果是這樣,可能有必要在此頁面上禁用會話狀態:

<%@ Page ... EnableSessionState="False" %>

或整個應用程序級別:

<system.web>
    <sessionState mode="Off"></sessionState>
</system.web>

並為此目的使用另一種狀態(“ 狀態概述-替代方案” )或另一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM