ajax调用内联javascript代码而不是document.ready的性能

时间:2011-04-28 00:33:22

标签: jquery asp.net html dom

为了获得更好的性能,我正在进行ajax调用,只要服务器开始渲染即可 响应。我正在将ajax调用作为内联网用户控件的内联。

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

我将完成ajax调用并将值存储在全局变量中。我包括 母版页中的jquery。我不想在document.ready中进行调用,因为它等待dom准备就绪。现在我有以下问题。

  1. 我如何确保jquery得到 在此内联代码触发之前加载
  2. 有没有更好的办法 获得性能,因为这是一个客户端 到服务器调用

1 个答案:

答案 0 :(得分:2)

  1. 浏览器会按照它们看到的顺序阻止和处理<script>个标签 - 这就是人们使用$(document).ready停止发生这种情况的原因。如果你确保你的jQuery.js包含在页面前面而不是这段代码中,你应该没问题。

  2. 如果您不是在.ascx控件中内嵌该脚本块,而是调用ClientScriptManager.RegisterClientScriptBlock()进行注册,则可以在页面顶部提供该脚本,而不是在包含控制的点,可能会使性能略有提高。

  3. 编辑:一些额外的解释。

    处理页面时,浏览器将按照HTML中存在的顺序点击<script>标记。如果是,它需要加载脚本然后运行它,如果标签具有src属性 - 如jQuery.js那样 - 或者只是运行脚本(如果它是内联JavaScript)。但它必须按照服务的顺序一次完成这些。请查看this video以了解此情况。

    这就是为什么,如果你的jQuery.js包含在你的内联ajax调用之前,你不必担心在你的内联代码触发之前加载jQuery。所以不要担心问题的第一部分。

    至于问题的第二部分,如果ajax调用是用户控件中的内联JavaScript,它将位于HTML的中间位置(取决于页面中包含控件的位置)。如果你使用ClientScriptManager.RegisterClientScriptBlock(),ASP.NET会在页面顶部注入脚本(非常接近<body>的顶部,尽管在viewstate和其他一些ASP.NET样板之后)所以它会稍早处理。我怀疑这种差异不太可能是显着的,除非你的页面非常大并且控件接近结束。

    这有帮助吗?