如何在 MVC5 中为 Bundle 启用缓存
How can I enable caching for Bundles in MVC5
我已经在我的 MVC 项目中创建了样式和脚本包,如下所示。现在我还需要为包启用缓存。有什么方法可以控制这些包的缓存持续时间吗?
bundles.Add(new StyleBundle("~/bundles/css").Include(
"~/lib/bootstrap/css/bootstrap.min.css",
"~/lib/owlcarousel/owl.carousel.min.css",
"~/lib/owlcarousel/owl.theme.default.min.css",
"~/StylesCdn/google-font.css",
"~/assests/css/common.min.css"
));
bundles.Add(new StyleBundle("~/bundles/bottomcss").Include(
"~/lib/chartist/scss/chartist.min.css",
"~/lib/chartist/chartist-plugin-tooltip.min.css",
"~/StylesCdn/export.min.css"
));
bundles.Add(new ScriptBundle("~/bundles/js").Include(
"~/lib/bootstrap/js/jquery.min.js",
"~/assests/js/homelayout.min.js"
));
bundles.Add(new ScriptBundle("~/bundles/bottomjs").Include(
"~/lib/bootstrap/js/bootstrap.min.js",
"~/lib/owlcarousel/owl.carousel.min.js",
"~/assests/js/app.min.js",
"~/Content/Validation.min.js",
"~/assests/js/InvestmentCalculator.min.js",
"~/assests/js/common.min.js",
"~/assests/js/BindDate.min.js"
));
默认情况下,浏览器会缓存包,除非您手动禁用它。在服务器端你无能为力。
如前所述,在大多数情况下(如果不是全部),包源将缓存在服务器和浏览器中(但这取决于您使用的实际服务器软件)。
"but when i reload the page it will render every time"
捆绑包本身不呈现,它们是已解析(它们是 JS / CSS 资源)。之后,解析结果用于渲染页面。
JS / CSS 解析步骤是否有效完成(有或没有 "caching" 解析结果)取决于浏览器实现,并且不可能通过服务器端编程、脚本编写来影响或设置。
好的,所以其他答案似乎并不完全正确。您可以通过更改 web.config 中的 'staticContent' 元素来影响浏览器尝试缓存这些文件的方式。 (前提是您使用的是 IIS7 或更高版本)
这会影响缓存 header 静态内容(例如 images/scripts)的内容。例如您可以通过设置以下内容来提供 max-age header 和日期:
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00" />
</staticContent>
可以在此处的文档中找到有关可以设置的内容的进一步阅读:
https://docs.microsoft.com/en-us/iis/configuration/system.webserver/staticcontent/clientcache
我已经在我的 MVC 项目中创建了样式和脚本包,如下所示。现在我还需要为包启用缓存。有什么方法可以控制这些包的缓存持续时间吗?
bundles.Add(new StyleBundle("~/bundles/css").Include(
"~/lib/bootstrap/css/bootstrap.min.css",
"~/lib/owlcarousel/owl.carousel.min.css",
"~/lib/owlcarousel/owl.theme.default.min.css",
"~/StylesCdn/google-font.css",
"~/assests/css/common.min.css"
));
bundles.Add(new StyleBundle("~/bundles/bottomcss").Include(
"~/lib/chartist/scss/chartist.min.css",
"~/lib/chartist/chartist-plugin-tooltip.min.css",
"~/StylesCdn/export.min.css"
));
bundles.Add(new ScriptBundle("~/bundles/js").Include(
"~/lib/bootstrap/js/jquery.min.js",
"~/assests/js/homelayout.min.js"
));
bundles.Add(new ScriptBundle("~/bundles/bottomjs").Include(
"~/lib/bootstrap/js/bootstrap.min.js",
"~/lib/owlcarousel/owl.carousel.min.js",
"~/assests/js/app.min.js",
"~/Content/Validation.min.js",
"~/assests/js/InvestmentCalculator.min.js",
"~/assests/js/common.min.js",
"~/assests/js/BindDate.min.js"
));
默认情况下,浏览器会缓存包,除非您手动禁用它。在服务器端你无能为力。
如前所述,在大多数情况下(如果不是全部),包源将缓存在服务器和浏览器中(但这取决于您使用的实际服务器软件)。
"but when i reload the page it will render every time"
捆绑包本身不呈现,它们是已解析(它们是 JS / CSS 资源)。之后,解析结果用于渲染页面。
JS / CSS 解析步骤是否有效完成(有或没有 "caching" 解析结果)取决于浏览器实现,并且不可能通过服务器端编程、脚本编写来影响或设置。
好的,所以其他答案似乎并不完全正确。您可以通过更改 web.config 中的 'staticContent' 元素来影响浏览器尝试缓存这些文件的方式。 (前提是您使用的是 IIS7 或更高版本)
这会影响缓存 header 静态内容(例如 images/scripts)的内容。例如您可以通过设置以下内容来提供 max-age header 和日期:
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00" />
</staticContent>
可以在此处的文档中找到有关可以设置的内容的进一步阅读:
https://docs.microsoft.com/en-us/iis/configuration/system.webserver/staticcontent/clientcache