是否可以在加载页面之前刷新页面


Is it possible to refresh page before it gets loaded?

如果我的网站被更新了怎么办,我的意思是CSS和一些内容,更新后老访问者回到我的页面时,CSS不会自动刷新,你必须手动刷新页面。好吧,访问者不是专家,他们会首先认为页面已损坏或闪烁。

如何使用Javascript或PHP制作脚本,任何...因此,当有人访问页面/网站时,我希望在向访问者打开之前刷新页面。如果它只在索引页上完成这项工作就可以了。

可能吗?

我在谷歌的帮助下找到了这个脚本,但它不起作用,什么也没发生!

<script type='text/javascript'>
(function()
{
  if( window.localStorage )
  {
    if( !localStorage.getItem( 'firstLoad' ) )
    {
      localStorage[ 'firstLoad' ] = true;
      window.location.reload();
    }  
    else
      localStorage.removeItem( 'firstLoad' );
  }
})();
</script>

最好的选择是"版本化"你的css url:

<link type="text/css" rel="stylesheet" href="my_style_sheet.css" />

成为

<link type="text/css" rel="stylesheet" href="my_style_sheet.css?v=2.1" />

每当您更新样式表时,只需修改 URL。您已将此问题标记为 PHP,因此只需将版本作为变量或常量存储在通用include ed 文件中,这将非常简单:

<link type="text/css" rel="stylesheet" href="my_style_sheet.css?v=<?=CSS_VERSION;?>" />

如果你必须在 Javascript 中执行此操作,你可以让 javascript 将一个具有唯一标签(例如时间戳)的新样式表加载到 head 标签中,但这会浪费带宽并减慢页面加载速度,因为用户最终会下载两个样式表:

var css_file=document.createElement("link");
css_file.setAttribute("rel", "stylesheet");
css_file.setAttribute("type", "text/css");
css_file.setAttribute("href", 'link_to_css.php?random_string='+escape(Math.random()));
document.getElementsByTagName("head")[0].appendChild(css_file);

您还可以在 CSS 标头中设置较短的缓存过期时间(将 css 文件设置为发送 css 标头的文件.php,并添加过期标头:

<?php header("Expires: [DATE IN PAST OR NEAR FUTURE]"); ?>

或者在Web服务器的配置中(例如在Apache中),您可以根据文件类型设置默认缓存标头,因此CSS可以设置为具有快速过期期限。但是,再一次,您的应用程序的性能将略有下降,因为您正在破坏用户浏览器缓存的一些优势。

啊,你需要的叫做"缓存破坏"。Ben D描述的技术很好,但有点太动手了。试试这个:

<link type="text/css" rel="stylesheet"
    href="my_style_sheet.css?<?=filemtime('my_style_sheet.css')?>" />

您还可以考虑其他一些事项,但这是最基本的自动缓存破坏技术。

请注意,通过执行此操作,您可以将缓存超时设置为长值,例如"1 年",因为每次文件更改时,指向文件的链接也会更改。