【问题标题】:How to best control loading of multiple javascript files in ASP.NET?如何最好地控制 ASP.NET 中多个 javascript 文件的加载?
【发布时间】:2009-04-09 04:56:02
【问题描述】:

我正在考虑改进一个相当复杂的 ASP.NET 网站的页面加载性能和渲染时间。

由于使用了大量本身包含 javascript 文件的 ASP.NET 控件(通过简单地使用脚本标签),某些页面加载相同的 javascript 最多 10 次。此外,一些 javascript 必须在页面的早期加载,而其他的最好在最后包含。有些我想在 onload 事件之后动态加载,而不是显式包含在页面中。

我正在考虑的方式是让所有不同的控件在一个中心位置注册它们对特定 javascript 文件的需求,从而控制脚本标签的生成(从而避免重复)以及它们插入的位置生成的输出。这也使得在缩小和完整的 javascript 文件之间动态切换变得容易(例如,将 debug=true 附加到查询字符串将使文件由 filename.debug.js 而不是 filename.compressed .js)。

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

实现此目的的最佳方法是什么?使用或扩展类似 ScriptManager、制作自定义控件、覆盖 Page 对象?

【问题讨论】:

    标签: asp.net javascript


    【解决方案1】:

    在控件的 Page_Load 方法中,您可以注册您的 javascript 以供输出(在确认它尚未注册后)。

    例如,

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

    注意:如果你想要一个 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>");
    }
    

    假设您在特定位置绝对需要它,但是,您可以添加一个返回脚本标记的静态(或 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_Load将发送者的Text属性设置为myControl类的静态属性返回的字符串。

    【讨论】:

      【解决方案2】:

      如前所述,通过控件的 Load 事件使用脚本注册是个好主意,如果它们是编译控件,您也可以将它们作为嵌入式资源引用...如果您使用的是 ASP.Net Ajax,则可以使用ScriptManager 可以将页面中的脚本合并到一个连续的块中以供下载。

      Yahoo has a lot of information 也涉及脚本性能,对此的建议也包含在 Firefox 的 YSlow 扩展中,它扩展了 firebug

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

      【讨论】:

        猜你喜欢
        • 2011-06-26
        • 2011-10-12
        • 2013-02-09
        • 2012-11-11
        • 1970-01-01
        • 2020-11-25
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多