如何最好地控制ASP.NET中多个javascript文件的加载?
我正在研究如何提高相当复杂的ASP.NET站点的页面加载性能和呈现时间 由于使用了许多ASP.NET控件,这些控件本身包含javascript文件(只需使用script标记),某些页面最多会加载相同的javascript 10次。此外,一些javascript必须在页面的早期加载,而其他javascript最好在页面的最后加载。我希望在onload事件之后动态加载一些,而不是显式地包含在页面中 我考虑的方法是让所有不同的控件在一个中心位置注册它们对特定javascript文件的需求,该位置反过来控制脚本标记的生成(从而避免重复)以及它们插入到生成的输出中的位置。这还可以方便地在缩小的javascript文件和完整的javascript文件之间进行动态切换(例如,在查询字符串中添加debug=true将使文件按filename.debug.js而不是filename.compressed.js加载) 使用此解决方案,它还可以基本上生成一个javascript文件名数组,由自定义onload javascript函数用于动态加载脚本如何最好地控制ASP.NET中多个javascript文件的加载?,asp.net,javascript,Asp.net,Javascript,我正在研究如何提高相当复杂的ASP.NET站点的页面加载性能和呈现时间 由于使用了许多ASP.NET控件,这些控件本身包含javascript文件(只需使用script标记),某些页面最多会加载相同的javascript 10次。此外,一些javascript必须在页面的早期加载,而其他javascript最好在页面的最后加载。我希望在onload事件之后动态加载一些,而不是显式地包含在页面中 我考虑的方法是让所有不同的控件在一个中心位置注册它们对特定javascript文件的需求,该位置反过来
实现这一目标的最佳方式是什么?使用或扩展ScriptManager之类的工具,创建自定义控件,重写页面对象?在控件的Page_Load方法中,可以注册javascript以进行输出(确认尚未注册后) 例如: 注意:如果希望有一个JS块而不是一个单独的文件,可以使用
.RegisterClientScriptBlock()
但是,这会在页面的表单标记打开后不久输出脚本标记。要在页面末尾附近(即在关闭表单标记之前)输出脚本,请使用.RegisterStartupScript()
方法
ClientScriptManager script = Page.ClientScript;
if (!script.IsStartupScriptRegistered("StartupAlert"))
{
script.RegisterStartupScript(this.GetType(), "StartupAlert",
"<script type='text/javascript' src='Public/Alert.js'></script>");
}
ClientScriptManager script=Page.ClientScript;
如果(!script.isstartupscript已注册(“StartupAlert”))
{
script.RegisterStartupScript(this.GetType(),“StartupAlert”,
"");
}
但是,假设您在特定位置绝对需要它,您可以添加一个返回脚本标记的静态(或VB.NET中的“共享”)只读属性,以及一个告诉控件是否输出脚本标记的布尔属性。在这种情况下,在您的ASPX中,您可以执行以下操作
<body>
<!-- any place -->
<uc1:myControl ID="myControl1" runat="server" jsOutput="False" />
<!-- elsewhere -->
<asp:Literal ID="litJS" runat="server" OnLoad="litJS_Load" />
</body>
然后编程
litJS\u Load
将发送方的文本属性设置为myControl类的静态属性返回的字符串。在控件的Page\u Load方法中,您可以注册javascript进行输出(确认尚未注册)
例如:
注意:如果希望有一个JS块而不是一个单独的文件,可以使用.RegisterClientScriptBlock()
但是,这会在页面的表单标记打开后不久输出脚本标记。要在页面末尾附近(即在关闭表单标记之前)输出脚本,请使用.RegisterStartupScript()
方法
ClientScriptManager script = Page.ClientScript;
if (!script.IsStartupScriptRegistered("StartupAlert"))
{
script.RegisterStartupScript(this.GetType(), "StartupAlert",
"<script type='text/javascript' src='Public/Alert.js'></script>");
}
ClientScriptManager script=Page.ClientScript;
如果(!script.isstartupscript已注册(“StartupAlert”))
{
script.RegisterStartupScript(this.GetType(),“StartupAlert”,
"");
}
但是,假设您在特定位置绝对需要它,您可以添加一个返回脚本标记的静态(或VB.NET中的“共享”)只读属性,以及一个告诉控件是否输出脚本标记的布尔属性。在这种情况下,在您的ASPX中,您可以执行以下操作
<body>
<!-- any place -->
<uc1:myControl ID="myControl1" runat="server" jsOutput="False" />
<!-- elsewhere -->
<asp:Literal ID="litJS" runat="server" OnLoad="litJS_Load" />
</body>
然后编程
litJS\u Load
将发送方的文本属性设置为myControl类的静态属性返回的字符串。如前所述,通过控件的加载事件使用脚本注册是一个好主意,如果它们是编译控件,您还可以将它们作为嵌入式资源引用。。。如果您使用的是ASP.NETAjax,则可以使用,它可以将页面中的脚本合并到一个连续块中进行下载
关于脚本性能,Firefox扩展中也包含了这方面的建议
除了将脚本作为外部资源外,还应该在服务器上启用压缩,这可以减少各种脚本的下载。更不用说缩小包含的脚本。如前所述,通过控件的加载事件使用脚本注册是一个好主意,如果它们是已编译的控件,您还可以将它们作为嵌入式资源引用。。。如果您使用的是ASP.NETAjax,则可以使用,它可以将页面中的脚本合并到一个连续块中进行下载 关于脚本性能,Firefox扩展中也包含了这方面的建议 除了将脚本作为外部资源外,还应该在服务器上启用压缩,这可以减少各种脚本的下载。更不用说缩小包含的脚本了