【发布时间】:2013-05-13 17:40:27
【问题描述】:
我正在使用 ASP .NET 3.5 并寻找一种方法来捆绑我的一堆脚本。我遇到了 ScriptManager 的 CompositeScript 元素。这是用于捆绑的好方法吗?它有任何后果等吗?
【问题讨论】:
标签: asp.net scriptmanager
我正在使用 ASP .NET 3.5 并寻找一种方法来捆绑我的一堆脚本。我遇到了 ScriptManager 的 CompositeScript 元素。这是用于捆绑的好方法吗?它有任何后果等吗?
【问题讨论】:
标签: asp.net scriptmanager
优点和缺点,陷阱与其他脚本捆绑解决方案类似——您首先要最小化,注意脚本的顺序,以 ; 开头的脚本关闭另一个文件中任何未关闭的脚本。
一个 ASP.NET 特定问题是调试/开发体验。如果你结合你的脚本,在 IE 调试器中找到你的代码会更加困难,脚本将有一个机器生成的名称,看起来与其他框架生成的脚本相似,你的代码将被埋在一个更大的文件中。
所以我在后面的代码中注册我的引用并将它们包装在 ifdef DEBUG/endif 和 ifdef RELEASE/endif 中(请务必在项目属性中定义 RELEASE,如果使用此技巧,默认情况下不会发生)。在 RELEASE 版本中,我捆绑了所有脚本,而 DEBUG 版本将文件分开。
此外,根据 Microsoft 的建议,脚本捆绑最适合您在整个网站上需要的文件。如果您有一个包含 A、B、C 的多页站点,并且您的用户通常只访问其中一个,那么为 A、B、C 捆绑文件将为用户提供 2 个额外文件。我认为这是一个糟糕的微优化,因为大多数应用程序都有小的 javascript 文件和大的库,所以一个网站的 JS 捆绑价值不足以担心,除非你有很多流量。
最后,服务器端 ScriptManager 没有提供任何方式来延迟脚本或从客户端动态触发加载(除了在 UI 之后加载脚本),我稍后使用 LAB.js 动态加载脚本......这个有时可以让你推迟一个脚本,直到你知道你需要它,并且可能永远推迟加载该脚本。捆绑该脚本后,如果每个用户需要或不需要它,它将为每个用户加载..
第 2 部分 至少对我来说,另一个问题是,虽然您可以在 web.config 中启用 JS 文件的缓存(目前没有时间查找语法!)并且您还可以使用 expires 标头在 IIS 级别启用缓存,当新版本出现时,ScriptManager 不会帮助您“破坏”缓存。理想情况下,脚本管理工具会诱使浏览器认为脚本位于一个文件夹中,该文件夹会随着上次更新的变化而变化,这样脚本就可以在客户端缓存一年。
我希望我有关于脚本是否被服务器端缓存的信息——我猜他们不是。但是因为用户通常每天最多获取一次脚本——在我的服务器上,它们似乎缓存了 24 小时,所以如果在每次请求时都重新生成脚本并不是很有趣。
最后,如果您将 CDN 用于 jquery 之类的东西(取决于您是公共网络还是 Intranet),那么 4.0 和 4.5 版本可以更容易地告诉 ScriptManager 使用 CDN 并在CDN 已关闭。
【讨论】:
使用 sumfile.js?n={0}
其中 {0} 是您所在建筑物的编号
【讨论】: