淘宝百度等网站 js 的版本升级后,如果 IE 没有手动清除缓存,是如何保证浏览器上的 js 新版本的?

2014-09-15 09:33:50 +08:00
 FreeBSD
刚接触前端,最近做一个项目,页面变化巨大。老版本升级到新版本后,页面部分js/css没有更新。
页面出现和诡异的情况。
4567 次点击
所在节点    问与答
19 条回复
jsonline
2014-09-15 09:36:43 +08:00
1. a.js?t=20140915
2. a.js -> 47A246-a.js
jsonline
2014-09-15 09:37:22 +08:00
3 去掉 last modified
wanglongbiao2010
2014-09-15 09:38:45 +08:00
Internet选项,常规,浏览历史,设置,每次访问网页时刷新
是这个意思吗?
FreeBSD
2014-09-15 09:39:38 +08:00
@jsonline 是说最后到浏览器上的js名字叫47A246-a.js,那页面上引用这个js的地方也需要修改?
FreeBSD
2014-09-15 09:40:48 +08:00
@wanglongbiao2010 对手动清除是这个意思。但用户不希望每次升级版本都手动清除。
FreeBSD
2014-09-15 09:41:40 +08:00
@jsonline 能否稍微详细点说?
jsonline
2014-09-15 09:53:58 +08:00
你首先要弄清楚浏览器会缓存哪些文件。
你使用方法1就行了,在更新的文件后面加时间戳。
手机,详细不了。
daxingplay
2014-09-15 10:51:14 +08:00
淘宝用的是版本号,比如x.x.x/xxx.js这种
oott123
2014-09-15 11:08:26 +08:00
verhash 吧。
在引用前端文件的时候就要加上版本号,你可以选择后端渲染的时候函数、改模板文件,改 gulpfile/gruntfile 来实现。
qsun
2014-09-15 11:14:48 +08:00
这是我们的


```
class Assets {
/* For static file */
public static function url($asset_filename) {
if (App::environment('local', 'testing')) {
return $asset_filename;
} else {
return Config::get('app.cdn_url') . '/assets/' . md5(file_get_contents(app_path() . '/../public/' . $asset_filename)) . $asset_filename;
}
}
}
```

生成的话会这样的URL http://static.haifanghui.com/assets/4a5c1dc6d1c0b45b96bdff0a38860bbf/build/all.min.css
Phariel
2014-09-15 11:36:07 +08:00
x.x.x/built.js
built.js?version=x.x.x
第一种好一些,grunt做起来方便
FreeBSD
2014-09-15 11:42:47 +08:00
@Phariel 那是不是说每次修改js的时候需要去同时修改这个版本号?第一种是否只单纯改前台的代码?
likuku
2014-09-15 12:03:43 +08:00
@FreeBSD 只想说你的用户 ID ....乍看还以为是在 freebsd 板块问 js 问题。
imn1
2014-09-15 12:06:31 +08:00
解决方案楼上都写了,我就不再重复了

http://bbs.kafan.cn/forum.php?mod=viewthread&tid=1744552&extra=page%3D3%26filter%3Dtypeid%26typeid%3D720
我在卡饭写的东西,里面写了网页reload/refresh的几种方式区别,和一个扩展(修改)

可以自己再google进一步了解header和浏览器缓存的关系,可以在后台发送header控制浏览器缓存
这个对于做前端的你可能比较困难,一般除非项目把js/css也纳入版本控制,否则后台都不管这事,权当涨姿势吧
cxe2v
2014-09-15 12:42:55 +08:00
一楼是常见的方法之一,之前研究一个网站的时候就发现这个方法了,当时还不明白怎么回事
cougar
2014-09-15 13:12:21 +08:00
参数版本号最简单
jevonszmx
2014-09-15 13:17:59 +08:00
最简单就是时间戳,每次静态文件改动,前台html中时间戳变一下就好了
tinyhill
2014-09-15 19:09:31 +08:00
两种策略:

1. 时间戳或版本参数,如 aaa/xxx.css?t=20140915.css
2. 时间戳或版本目录,如 aaa/20140915/xxx.css
Phariel
2014-09-15 19:13:01 +08:00
@FreeBSD 要用一个server handler来承载你加载js和css的页面,里面用从服务器获取的版本号变量来控制你加载的url组成,这个值和你版本号的文件夹保持一致。或者用grunt打包成release版本的过程中,把页面上的特定版本号tag replace成版本号,一个是运行时解释,一个是编译时解释。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/133475

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX