为了获得更好的性能,我正在进行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准备就绪。现在我有以下问题。
答案 0 :(得分:2)
浏览器会按照它们看到的顺序阻止和处理<script>
个标签 - 这就是人们使用$(document).ready
,停止发生这种情况的原因。如果你确保你的jQuery.js包含在页面前面而不是这段代码中,你应该没问题。
如果您不是在.ascx控件中内嵌该脚本块,而是调用ClientScriptManager.RegisterClientScriptBlock()
进行注册,则可以在页面顶部提供该脚本,而不是在包含控制的点,可能会使性能略有提高。
编辑:一些额外的解释。
处理页面时,浏览器将按照HTML中存在的顺序点击<script>
标记。如果是,它需要加载脚本然后运行它,如果标签具有src
属性 - 如jQuery.js那样 - 或者只是运行脚本(如果它是内联JavaScript)。但它必须按照服务的顺序一次完成这些。请查看this video以了解此情况。
这就是为什么,如果你的jQuery.js包含在你的内联ajax调用之前,你不必担心在你的内联代码触发之前加载jQuery。所以不要担心问题的第一部分。
至于问题的第二部分,如果ajax调用是用户控件中的内联JavaScript,它将位于HTML的中间位置(取决于页面中包含控件的位置)。如果你使用ClientScriptManager.RegisterClientScriptBlock()
,ASP.NET会在页面顶部注入脚本(非常接近<body>
的顶部,尽管在viewstate和其他一些ASP.NET样板之后)所以它会稍早处理。我怀疑这种差异不太可能是显着的,除非你的页面非常大并且控件接近结束。
这有帮助吗?