防止角度模板的浏览器缓存

时间:2014-06-30 18:40:08

标签: javascript html angularjs caching

我一直在研究这个问题,这个问题非常简单: 现代浏览器(chrome / FF)是缓存内容,html页面等。
当您发布新版本时,angular GET这些模板。但是,由于浏览器提供这些页面的缓存版本而不是新的更新版本。

我已经阅读了关于如何实现这一目标的2000篇文章。 没有“meta”标签对我有用..(例如:Using <meta> tags to turn off caching in all browsers?) 唯一有效的方法是通过添加一些参数值http://bla.com?random=39399339来手动管理文件的版本。 然而,如果有时只需要“明确的缓存”(主要是版本之间),这真的很烦人且难以维护。

浏览器是否有可能无法提供简单,受控的方式来手动“清除缓存”。无论是在服务器还是客户端方式?

P.S。 Angular模板使管理变得更加困难。

2 个答案:

答案 0 :(得分:0)

这是一个有很多答案的问题,这取决于你的服务器等......

  • 通常不会缓存HTML文件
  • AngularJS使用$ templateCache服务(在应用程序运行时)首次调用模板后缓存模板
  • 您可以使用带有grunt或gulp的html2js在一个JavaScript文件中编译模板
  • 很多人不依赖客户端缓存,etags等...并为静态资源添加版本,哈希,后缀和/或前缀uri

答案 1 :(得分:0)

我正在使用拦截器。如果请求包含精确的url块(模板路径)我设置标题“Cache-Control”:“no-cache,must-revalidate”

$httpProvider.interceptors.push(function($q,ngToast) {

        return {
            request: function(config){
                if(config.url.includes('some_url_to_your_template')){
                    Object.assign(config.headers,{"Cache-Control": "no-cache, must-revalidate"});

                }

                return config;
            }
        }
})