2011-04-28 34 views
0

爲了獲得更好的性能,我一旦做出響應,就會發出一個ajax調用,一旦服務器開始呈現 響應。我正在將ajax調用爲dotnet用戶控件的內聯。ajax調用爲內嵌JavaScript代碼而不是document.ready的性能

<script type="text/javascript"> 
    // make ajax call here 
    $.ajax({ 
     url: '/test.aspx', 
     success: function(data) { 
     // store the data in a global variable 
     }  
    });          
</script> 

我會完成Ajax調用和值在全球variable.I存儲正在包括 在母版頁jquery的。我不想在document.ready中打電話,因爲它等待dom準備就緒。現在我有以下問題。

  1. 我如何才能確保jQuery的獲取 加載這個內嵌代碼觸發
  2. 之前有沒有什麼更好的方法來做到 增益性能,因爲這是一個客戶端 服務器調用

回答

2
  1. 瀏覽器會按照它看到的順序阻止和處理<script>標籤 - 這就是爲什麼人們使用$(document).ready,到stop從發生。如果你確定你的jQuery.js被包含在頁面的前面,而不是這個代碼,你應該沒問題。

  2. 如果不是在你的.ascx控件中內嵌腳本塊,你可以調用ClientScriptManager.RegisterClientScriptBlock()來註冊它,你可以讓該腳本在頁面的頂部而不是在控件的位置被包括在內,這可能會導致性能的邊際增加。

編輯:一些額外的解釋。

當處理一個頁面時,瀏覽器將按照它們存在於HTML中的順序點擊<script>標籤。當它發生時,它需要加載腳本然後運行它,如果標記具有src屬性 - 就像jQuery.js一樣 - 或者只是在腳本內嵌JavaScript時運行該腳本。但它必須按照它們的服務順序一次一個地做。查看this video以查看此信息。

這就是爲什麼如果你的jQuery.js包含在你的內聯ajax調用之前,你不需要擔心jQuery在你的內聯代碼觸發之前被加載。所以不要擔心你的問題的第一部分。

對於問題的第二部分,如果ajax調用是用戶控件中的內聯JavaScript,它將位於HTML中間的某個位置(取決於您的頁面上控件所在的位置)。如果您使用ClientScriptManager.RegisterClientScriptBlock(),ASP.NET將在頁面頂部注入腳本(儘管位於視圖狀態和其他ASP.NET樣板之後,但仍位於<body>的頂部附近),因此它將稍早處理。儘管如此,我懷疑這種差異不太可能是重要的,除非你的頁面非常大,並且控制接近結束。

這有幫助嗎?

+0

感謝卡森,讓我通過它,並按照你的建議。 – kobe 2011-04-28 01:55:41

+0

你能否再解釋我1和2之間的區別。 – kobe 2011-04-28 01:59:09

+0

@ kobe,我補充說明一些。 – Carson63000 2011-04-28 02:16:01

相關問題