Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何有效地管理“浏览器缓存”;CMS-like";网站_Javascript_Html_Css_Perl_Caching - Fatal编程技术网

Javascript 如何有效地管理“浏览器缓存”;CMS-like";网站

Javascript 如何有效地管理“浏览器缓存”;CMS-like";网站,javascript,html,css,perl,caching,Javascript,Html,Css,Perl,Caching,(很抱歉发了这么长的帖子……我尽量简明扼要。) 我是全球超过10000多家演讲会公共演讲俱乐部使用的免费“类似CMS”网站系统的唯一志愿者开发者。俱乐部输入内容和配置设置,系统使用自定义模板为他们生成一个免费网站。系统非常动态,因此浏览器缓存管理是一个关键考虑因素。尽管我在这些论坛上做了很多与此相关的研究,但我仍在努力想出一个健壮的缓存管理策略,该策略适用于我的300000多名用户的各种浏览器。我控制软件的所有方面,包括Perl服务器代码、MySQL数据库、HTML和javascript。我在服

(很抱歉发了这么长的帖子……我尽量简明扼要。)

我是全球超过10000多家演讲会公共演讲俱乐部使用的免费“类似CMS”网站系统的唯一志愿者开发者。俱乐部输入内容和配置设置,系统使用自定义模板为他们生成一个免费网站。系统非常动态,因此浏览器缓存管理是一个关键考虑因素。尽管我在这些论坛上做了很多与此相关的研究,但我仍在努力想出一个健壮的缓存管理策略,该策略适用于我的300000多名用户的各种浏览器。我控制软件的所有方面,包括Perl服务器代码、MySQL数据库、HTML和javascript。我在服务器上使用ExpiresByType设置了htaccess

我正在为javascript库、CSS文件等使用cache buster查询参数。将RevDate查询参数中的Perl代码修补到自定义javascript文件和自定义CSS的HTML中:

<script src="/js/jQuery-File-Upload/js/jquery.fileupload.js?v=9.9.3"></script>
<script src="/js/FTH/utilities.min.js?2015-06-11"></script>
// In the HTML template: <script src="/js/FTH/utilities.min.js?{{RevDate}}"></script>
(据我所知,让服务器输出缓存控制头似乎比使用元标记更好,但不确定原因。)

尽管采用了所有这些方法,但我仍然会遇到与缓存相关的问题(例如,缓存未失效),特别是在使用Google Chrome时,如果我没有在HTML头中包含以下强制重新加载脚本:

<script>
  {{DOCCOOKIE}}  // Set first so that a reload does not lose cookies 
   (function TriggerReload(){
     var getCookieRevDate = function(){ 
         return ((document.cookie.match(/(?:^|; )FTH2\.RevDate=([^;]*)/) || [])[1] || ''); 
     }, 
     RD = getCookieRevDate(), 
     key = "FTH2.RevDate";
     if (RD === "{{RevDate}}") { return; } // Cookie revision date matches server revision date. No reload necessary.
     document.cookie = key + "={{RevDate}}; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/"; 
     if (RD && getCookieRevDate() === "{{RevDate}}"){ location.reload(true); }  // Revision date was changed on server, and has been successfully stored locally and read back.
    }());
</script>

{{DOCCOOKIE}}//首先设置,以便重新加载不会丢失cookie
(函数triggerload(){
var getCookieRevDate=函数(){
return((document.cookie.match(/(?:^ |)FTH2\.RevDate=([^;]*)/)| |[])[1]| |');
}, 
RD=GetCookiierEvdate(),
key=“FTH2.RevDate”;
如果(RD==“{{RevDate}}”){return;}//Cookie修订日期与服务器修订日期匹配。无需重新加载。
document.cookie=key+“={{RevDate}};expires=Fri,1999年12月31日23:59:59 GMT;path=/”;
如果(RD&&getCookiierevDate()==“{{RevDate}}”){location.reload(true);}//修订日期已在服务器上更改,并已成功存储在本地并读回。
}());
如果可能的话,我想去掉这个重载脚本,同时保持一个健壮的缓存管理策略。然而,到目前为止,我还无法在没有强制重新加载的情况下,使系统在修订日期更改时正确地使缓存的JavaScript和内容无效。最终,我的Chrome用户(主要)抱怨了很多问题,我不得不告诉他们手动重新加载。(我有一个链接,用于定位。重新加载(true)作为手动备用。)

对于如何改进我正在做的工作,以提供具有良好性能的有效缓存管理策略,有人有什么建议吗

print $COOKIE;
print "Content-type: text/html; charset=UTF-8\n";
# The following have been added to the above...
print "Cache-Control: no-cache\n";
print "Pragma: no-cache\n\n";
<script>
  {{DOCCOOKIE}}  // Set first so that a reload does not lose cookies 
   (function TriggerReload(){
     var getCookieRevDate = function(){ 
         return ((document.cookie.match(/(?:^|; )FTH2\.RevDate=([^;]*)/) || [])[1] || ''); 
     }, 
     RD = getCookieRevDate(), 
     key = "FTH2.RevDate";
     if (RD === "{{RevDate}}") { return; } // Cookie revision date matches server revision date. No reload necessary.
     document.cookie = key + "={{RevDate}}; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/"; 
     if (RD && getCookieRevDate() === "{{RevDate}}"){ location.reload(true); }  // Revision date was changed on server, and has been successfully stored locally and read back.
    }());
</script>