作者TonyQ (沉默是金。)
看板Ajax
标题[心得] js 踩到雷 2: 快取
时间Mon Jun 7 20:15:23 2010
所谓的 cache 一直都是网页设计上常碰到的问题,
当我们一切事情都很正常也不想去修改他的时候,
我们恨不得他每个东西都cache 起来,
但是万一刚刚发生惨案,不小心 deploy 炸弹到了网站,
又会哭天抢地想要赶快把这些 cache 给干掉~
cache 也常常是网页设计上的幽灵问题之一,
因为你可能根本就不知道他的存在,也可能因为在不同浏览器的行为,
就让你疏忽了快取造成问题的可能性。
(请注意,我们这里讲的是浏览器把资料存放的 client side cache,
server side 也有可能会把response cache ,
但是那个在这先不谈,而且那跟前端其实比较没有直接关系。)
快取可能导致问题的状况我们简单分列以下两种
1.js file cache
这种状况常发生在「用 script tag载入js档案的情形」,
他的常见症状就是我明明有修改 js 的内容,
却没发生应该有的改变。
这种时候可以透过关闭 browser 的快取设定,
ie可以设定「每次」皆向伺服器要求资料。
基本上非常建议关闭,虽然我们有Cfrl+F5 (in windows)
command + shift +r (in mac)
这个大绝招,不过偶尔还是会手残、浏览器发疯、灵异现象,
就是没有更新的状况。
要怎麽判断确定是不是没更新到咧?
来,跟我一起念 f i r e b u g ,对,就是这样。
打开firebug 开 script tab ,中间有个下拉式选单,
选到你要查的那只 js 看他里面呈现的结果是新的还旧的,
这样就很清楚了。
万一如果是旧的怎麽办??
跟着做以下步骤 1.用浏览器开该 .js 路径,2.按下ctrl+f5
如果这时候还是旧的,那你该检查的就是你是不是更新错档案了,
有时候倒楣一点是会刚好有其他人设定 server cache ,
但是你不知道,我以前接手前人专案时踢过一次这个雷,
非常的痛,你不会想尝试的。
如果碰到的是 server cache ,那重开 server 通常会有帮助。
(再次重申,这种情形大概百中选一或千中选一吧)
另一个方法,跟下一个问题一起讲
2.ajax page cache
这个问题咧,问题本身在於 js 是没问题的,
但是因为他有向 server 要回应,而且还同样的东西要好几次,
结果伺服器就很勤俭的把回应快取起来了。
如果是一般的request 还没有关系,
如果今天这个东西是牵扯到资料更新或者是资料操作,
这可就糗大罗~~~
这个时候我们就要知道,因为我们平常向Server要东西,
server 是用网址(Request URL)来做回应,
所以当我们想要让伺服器每次都认为我们送的是不同回应,
那就很简单,拿 new Date().getTime() 来兜在 url上就好。
ex. $.get("xxx.php?t=12321323213123",{},fn_ok,fn_error);
每次数字都不一样的话就能确保浏览器不会乱乱cache ,
对於这个问题,.js 档的原理也是一样的,
写成 <script type="text/javascript" src="xxx.js?213123"/>
这种表示法(也有人是乾脆就绑版本号,ex v=1,v=2..etc)
---
好~第二篇就介绍到这里~再会
--
这系列技术性的东西不多,但是应该都会「曾经」让人觉得很痛苦的事情。XD
--
我:一半的日子让你说,我听你说你的所有
______________________________________
______________________________________一半的日子我想说,对你说过去的所有:我
_______________________________________________________
在讨论中妥善扮演兼具聆听与分享的角色,是我们一生的课题。
_______________________________________________________
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.137.5.204
1F:推 iam87king:push 06/07 21:16
2F:推 JeremyJoung:这两个问题 我都碰过 1.我是在js内敲版本号 要是号码 06/08 10:11
3F:→ JeremyJoung:不对 就重新一次 2.就是加乱数了 不过我是用流水号 06/08 10:12
4F:推 kurotanshi:大推 cache 问题常常搞死我 orz 06/08 14:24
5F:推 knuckles:我是js档名加流水号 每次一更新就改档名 06/08 17:04
6F:推 iam87king:我是直接清浏览记录 06/08 23:21
7F:→ cloudccw:我是传乱数@@ 06/11 11:17
8F:推 mesak:受益良多 (Y) 06/11 21:05