Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何最好地控制ASP.NET中多个javascript文件的加载?_Asp.net_Javascript - Fatal编程技术网

如何最好地控制ASP.NET中多个javascript文件的加载?

如何最好地控制ASP.NET中多个javascript文件的加载?,asp.net,javascript,Asp.net,Javascript,我正在研究如何提高相当复杂的ASP.NET站点的页面加载性能和呈现时间 由于使用了许多ASP.NET控件,这些控件本身包含javascript文件(只需使用script标记),某些页面最多会加载相同的javascript 10次。此外,一些javascript必须在页面的早期加载,而其他javascript最好在页面的最后加载。我希望在onload事件之后动态加载一些,而不是显式地包含在页面中 我考虑的方法是让所有不同的控件在一个中心位置注册它们对特定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函数用于动态加载脚本


实现这一目标的最佳方式是什么?使用或扩展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扩展中也包含了这方面的建议

除了将脚本作为外部资源外,还应该在服务器上启用压缩,这可以减少各种脚本的下载。更不用说缩小包含的脚本了