2011-04-28 40 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