RPM*_*984 14 asp.net asp.net-mvc bundle dynamic-content asp.net-optimization
我正在使用我的ASP.NET MVC 3 Web应用程序中的新ASP.NET捆绑功能(使用System.Web.Optmization 1.0.0-beta预发行版).
效果很好.
但是,我们有一些存储在数据库中的动态 CSS/JS.
我希望将这个添加到我的核心包的单独包中,比如说"DynamicBundle".我知道怎么做,不是问题.
现在我的问题是,当在数据库中更改此CSS/JS时,需要"刷新"该捆绑包,以便将这些文件的内容重新读入捆绑包.
基本上,我需要ASP.NET重新生成附加到包URL的魔术guid /字符串.
理想情况下,我只想刷新特定的包,而不是整个包表.
有没有办法做到这一点?
编辑:
好的第二个问题,无法弄清楚如何将动态CSS/JS添加到捆绑包中.bundle.AddFile
获取文件的虚拟路径,但它不是物理文件,而是字符串.我怎么会这样做?当然我不必先写出字符串到文件?
编辑2: 所以我决定不捆绑我的动态内容.有两个原因:
所以我所做的是在运行时手动缩小我的动态css/js(一次,然后缓存).这样我只需清除缓存就可以轻松刷新它.
话虽这么说,这仍然是一个相关的问题(刷新包)所以我会把它打开..
那个"魔法guid/string"是组合文件内容的散列.
您可以使用以下工作流程对此进行测试,该工作流程假设您拥有mybundle.css
.如果你使用Fiddler观察流量,你会看到它请求像哈希一样的东西
http://localhost:20206/mybundle.css?v=-6520265193368900210
Run Code Online (Sandbox Code Playgroud)
现在,根据需要"触摸"其中一个文件而不实际更改内容.该文件较新(LastModified/LastWrite更新),但是哈希保持不变,因为它是从相同的组合内容计算的.你甚至可以在文件中添加空格,因为它们会被缩小.
http://localhost:20206/mybundle.css?v=-6520265193368900210
Run Code Online (Sandbox Code Playgroud)
接下来,实际做出改变.也许将边框设置为2px而不是1px.哈希将立即改变,因为提供哈希的内容已经改变.
http://localhost:20206/mybundle.css?v=-4725541136976015445
Run Code Online (Sandbox Code Playgroud)
最后,将边框设置回原来的状态(在上例中,返回1px)."魔法弦"实际上并非随机或魔法.相反,它返回到从内容计算的匹配单向哈希.
http://localhost:20206/mybundle.css?v=-6520265193368900210
Run Code Online (Sandbox Code Playgroud)
现在您可以轻松地休息,哈希只在需要时更新,无需人工干预.
至于你问题的其他部分,
当在数据库中更改此CSS/JS时,需要"刷新"该捆绑包,以便将这些文件的内容重新读入捆绑包.
我想我们只是扭转了这种想法.我们更新文件以触发刷新,而不是刷新捆绑包以触发重新读取.当ASP.NET看到文件发生变化时,它会重新组合内容并更新散列.
归档时间: |
|
查看次数: |
2645 次 |
最近记录: |