关于在我们的解决方案(APS.NET Webforms)中正确实现JavaScript,我们正在努力.
根据最佳实践,我们希望在页面底部拥有所有(或至少尽可能多)的javascript,因此页面首先加载HTML和CSS,并提供更好的用户体验.
我们的项目中有很多jQuery代码通常特定于某些控件,因此我们不希望在每个页面上加载它们.
目前jQuery本身,包括jQuery UI位于页面的顶部,因此我们可以在控件中使用jQuery(从js文件或有时是内联代码),但是,我们希望将所有内容移到底部页.我们已经在页面底部添加了一个contentplaceholder("JavascriptFooter"),因此我们可以从页面页脚中的页面放置javascript,但我们仍然停留在控件上.
这是什么最佳做法?我们是否应该将所有JS外部化并在JS中检查是否加载了控件?但是我们会一直展示太多的东西.或者还有另一种方式吗?
首先,我建议从 CDN 加载 Jquery。这是谷歌的代码:
<script type="text/javascript">
document.write(["\<script type='text/javascript' src='",
("https:" == document.location.protocol) ? "https://" : "http://",
"ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'>\<\/script>"].join(''));
</script>
Run Code Online (Sandbox Code Playgroud)
这样,如果访问者已在另一个站点上获得此服务,则该内容将已被缓存。此外,它会在从不同主机传送时并行下载。
我也同意@ctorx - 你应该使用文档就绪执行。
此外,您可以ScriptManager在每个控件后面的代码中使用并创建所有控件特定的 JS(如果该控件是唯一使用该 JS 的对象,那么无论如何这可能是一个好主意) - 所有这些代码都呈现在页面底部。
例子:
Page pg = (Page)System.Web.HttpContext.Current.Handler; // or this.Page in .ascx
ScriptManager.RegisterStartupScript(pg, typeof(Page), "myJS", "[... your code ]", true);
Run Code Online (Sandbox Code Playgroud)