1,公司的网站全是静态页面组成,每当发布完成之后,用户访问的时候还是老的页面。
2,清除历史记录,再次访问 访问到的才是新的页面。
3,但是一直清除历史记录不太现实,所以请问各位有什么好的解决方案?
谢谢!
1,公司的网站全是静态页面组成,每当发布完成之后,用户访问的时候还是老的页面。
2,清除历史记录,再次访问 访问到的才是新的页面。
3,但是一直清除历史记录不太现实,所以请问各位有什么好的解决方案?
谢谢!
优雅一点的方法,可以用webpack,gulp之类的工具编译打包你的js,css等文件,然后添加版本号。
一般一点的方法,修改完js或者css之后,你自己手动给文件添加一个后缀(比如时间戳),例如,原来的js名叫"index.js",那你修改了一些代码之后,上线之前可以将其修改为"index20170913.js"。用户端浏览器就会加载你最新的js了。
这个问题主要是浏览器缓存的问题,一般浏览器为了性能考虑会把js,css文件缓存在用户本地,这样等用户再次访问这个网页的时候就可能不会再去下载这些资源。所以,给你的资源改个名就好了。
还是看你的业务情况吧,我觉得静态网站可能js的量会稍小一点,所以可以这样手动去改。但真心建议引入webpack,项目比较大的话,手动改根本不现实。
看你的标签里引入node.js,也可以你用node写一个脚本,自动地去更改js的名字,注意,还需要改html里引入的js名字哦!
可以让它在一定时间自动更新,比如设置一个5分钟自动更新一次!
设置一个缓冲更新的时间:
$cacheTime = 10*30
获取到文件的路径:
$cacheFile = "cache/static.html";
在每次获取静态页面的时候利用filemtime获取到文件修改的时间:
if(file_exists($cacheFile) && time() - $cacheTime > filemtime($cacheFile)) {
...一些代码...
}
当用户访问的时候,如果已经过了 300 秒,那么就重新生成新的静态页面。
每次都即时显示,那还要做缓存干什么。你在CDN服务器做静态分发的时候是会制定策略的,而且发布以后可以在CDN那边清理缓存,针对CSS和JS文件的缓存,加上对应版本号,就可以确保每次更新的时候获取的是最新的,图片直接缓存一年都没问题,页面一般根本不会频繁更改的,所有需要的数据都是ajax异步加载来的。所以,你主要对JS和CSS做好处理就可以了。
根据楼主的场景,最简单的方式就是设置Cache-Control: no-cache
,意思就是,每次用户访问页面,都需要跑到服务器校验本地副本是否过期。如果过期,服务器返回新的网页。
更详细复杂的设置,比如设置缓存时长等,可以参考《web性能优化之:no-cache与must-revalidate深入探究》
看你的标签有nodejs,你可以用gulp之类的工具,帮你hash文件名——这其实是CDN最佳实践的一种。因为只要文件发生变化,那么hash文件名就会发生变化,这样用户会立刻获取到最新的资源,并一直缓存到过期。
如果你使用的是angular这样的工程项目,甚至angular-cli自带产品环境打包就有hash文件名的功能,这属于前端最佳实践。
10 回答11.6k 阅读
2 回答3.1k 阅读✓ 已解决
5 回答2.2k 阅读
3 回答2.7k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答2.4k 阅读✓ 已解决
在访问链接url后面加上"?time=" + new Date().getTime(); 当然随机数也行