我想知道动态修改bundle集合的意义(比如在加载页面时)。我尝试将新脚本文件添加到bundles集合(最初在app_start中创建)。它在我的初始测试中工作正常, - 我注意到的一个区别是浏览器没有缓存捆绑的脚本和样式(每次刷新时发送新的请求)。我想知道在初始提取之后是否有办法强制缓存bundle脚本/样式。
我将我的静态脚本和样式加载到app_start本身的bundle集合中。但我在主页加载中有一段代码,用于检查页面特定脚本或样式的存在(例如,假设正在加载页面ABC.aspx,此代码将在Scripts文件夹中查找ABC.js的存在,样式文件夹中的ABC.css)。如果它存在,它将被加载到页眉。这是我尝试将其添加到捆绑包的地方。将这些条件脚本/样式作为默认包集合的一部分的最佳方法是什么?
我的生产环境是一个Web场。那么我应该特别做些什么来让服务器上的url V哈希保持相同?
我读过“郝恭”here的评论,解释了webfarms的捆绑缓存问题(404中的结果),处理这个问题的最佳方法是什么?
答案 0 :(得分:1)
AFAIK,在构建捆绑包时,对内容进行哈希处理,以便为其创建唯一的密钥(url中的额外参数)。
因此,如果您要修改其内容,哈希将会更改,因为它实际上代表不同的捆绑包。这样做的全部目的是在内容发生变化时进行缓存清除。
您所看到的行为是因为捆绑包不打算以这种动态方式使用,因为它违背了捆绑包的内容是静态的(因此可以缓存)。
为什么不为每个页面创建一个单独的包? 这样,包含所有共享代码的“common”包将被缓存并重用,并且在加载ABC.aspx页面时,你总是加载你的“abc”包,它将对内容进行自己的版本控制而不是影响公共图书馆。
另外,在每个页面上修改捆绑包还有一个缺点:
如果每个页面都提供不同的捆绑包,那么客户端将一遍又一遍地收到共享库的所有代码,每个页面一次。即使缓存了。例如:将JQuery与每个页面一起发送是没有意义的。