代码之家  ›  专栏  ›  技术社区  ›  stpe

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

  •  1
  • stpe  · 技术社区  · 17 年前

    我正在研究如何提高复杂ASP.NET站点的页面加载性能和呈现时间。

    由于使用了许多本身包含JavaScript文件的ASP.NET控件(只需使用脚本标记),某些页面最多可加载10次相同的JavaScript。另外,一些javascript必须在页面的早期加载,而其他的则最好在末尾加载。一些我希望在onload事件之后动态加载,而不是在页面中显式包含。

    我考虑的方法是让所有不同的控件在一个中心位置注册它们对特定javascript文件的需求,该中心位置反过来控制脚本标记的生成(从而避免重复)以及它们插入到生成的输出中的位置。这还可以方便地在小型化和完整的javascript文件之间进行动态切换(例如,将debug=true附加到查询字符串将使文件加载 文件名.debug.js 而不是 文件名.compressed.js )

    使用这个解决方案,它还可以基本上生成一个由自定义的onload javascript函数用于动态加载脚本的文件名的javascript数组。

    最好的方法是什么?使用或扩展类似于scriptmanager的内容,创建自定义控件,重写页面对象?

    2 回复  |  直到 17 年前
        1
  •  1
  •   David    17 年前

    在控件的page-load方法中,可以注册输出的javascript(在确认它尚未注册之后)。

    例如。,

    ClientScriptManager script = Page.ClientScript;
    if (!script.IsClientScriptIncludeRegistered("AlertHello"))
    {
        script.RegisterClientScriptInclude("AlertHello", "Public/AlertHello.js");
    }
    

    注意:您可以使用 .RegisterClientScriptBlock() 如果您想要一个JS块而不是一个单独的文件。

    但是,这会在打开页面的表单标记后很快输出脚本标记。在页面末尾(即,在 关闭 表单标记),使用 .RegisterStartupScript() 方法。

    ClientScriptManager script = Page.ClientScript;
    if (!script.IsStartupScriptRegistered("StartupAlert"))
    {
        script.RegisterStartupScript(this.GetType(), "StartupAlert",
               "<script type='text/javascript' src='Public/Alert.js'></script>");
    }
    

    但是,假设您绝对需要它在特定的位置,您可以添加一个静态(或在vb.net中为“shared”)只读属性来返回脚本标记,以及一个布尔属性来告诉控件是否输出脚本标记。在这种情况下,在你的ASPX中,你可以做一些像…

    <body>
      <!-- any place -->
      <uc1:myControl ID="myControl1" runat="server" jsOutput="False" />
      <!-- elsewhere -->
      <asp:Literal ID="litJS" runat="server" OnLoad="litJS_Load" />
    </body>
    

    然后程序 litJS_Load 将发送方的文本属性设置为MyControl类的静态属性返回的字符串。

        2
  •  0
  •   Tracker1    17 年前

    如前所述,通过控件的加载事件使用脚本注册是一个好主意,如果它们是已编译的控件,您还可以将它们作为嵌入资源引用…如果您使用的是ASP.NET AJAX,则可以使用 ScriptManager 它可以将页面内的脚本合并到一个连续的块中进行下载。

    Yahoo has a lot of information 关于脚本性能,相关建议也包含在 YSlow 火狐扩展,扩展 firebug .

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

    推荐文章