浏览 9886 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-20
试验: 在后台放一个过滤器捕捉所有 /* 的请求: doFilter里面简单的打印请求的URL: HttpServletRequest httpRequest = (HttpServletRequest) request; System.out.println("requets url: " + httpRequest.getRequestURI()); chain.doFilter(request, response); html代码: <body> <script> var t1 = new Image(); t1.src = 'ico_unchecked.gif'; function change(){ im.src = t1.src; } </script> <button onclick="change()">change</button> <img id="im" src="ico_checked.gif"> </body> 可以看到打印了三次url。html页面的请求一次。t1.src设值的时候一次。<img src="">的时候一次。 我想这时候如果按按钮改变页面上的图片,应该不会再从服务端载图片了,因为缓存里面已经有了嘛。可是点的时候过滤器仍然是有打印出URL! 看来只要image对象的src一被改变就会发出请求。那预先装载图片不是等于没用吗? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-09-20
很多server(例如apache)会对请求进行分析, 如果根据 last modified time 判断文件没有改变, 则返回 "304 - 未修改".
请求相同的url并不表明传输回去的内容大小也相同 |
|
返回顶楼 | |
发表时间:2007-09-20
推荐CSS Background的方式
|
|
返回顶楼 | |
发表时间:2007-09-20
你的测试有误。
new Image()绝对可以起到预取作用。 之所以你测试中会有新的请求,估计是以下原因之一: A. 你的浏览器设置存在问题。例如在IE中默认是“自动”而你可能改成了“每次访问都检查网页更新”。 B. 你的服务器端程序有问题。例如发出了禁止Cache的头。 C. RPWT |
|
返回顶楼 | |
发表时间:2007-09-20
注意,IE其实存在图片缓存bug,但是通常它并不会导致一次新的请求,只是会产生多次的WinNET API调用,效果就是有轻微的闪烁。
此外,Filter(AlphaImageLoader)和VML的image,都分别存在一些缓存上的问题(Shame M$)。但是这里并没有涉及到。 |
|
返回顶楼 | |