用new Image()预先加载图片真的有用吗?
经常会用到在网页上交替显示图片。很多推荐的作法是用new Image() 预先装载图片。但是用new Image()真的有用吗?
试验:
在后台放一个过滤器捕捉所有 /* 的请求:
doFilter里面简单的打印请求的URL:
html代码:
可以看到打印了三次url。html页面的请求一次。t1.src设值的时候一次。<img src="">的时候一次。
我想这时候如果按按钮改变页面上的图片,应该不会再从服务端载图片了,因为缓存里面已经有了嘛。可是点的时候过滤器仍然是有打印出URL!
看来只要image对象的src一被改变就会发出请求。那预先装载图片不是等于没用吗?
1 楼 scud 2007-09-20 很多server(例如apache)会对请求进行分析, 如果根据 last modified time 判断文件没有改变, 则返回 "304 - 未修改".
请求相同的url并不表明传输回去的内容大小也相同 2 楼 sp42 2007-09-20 推荐CSS Background的方式 3 楼 hax 2007-09-20 你的测试有误。
new Image()绝对可以起到预取作用。
之所以你测试中会有新的请求,估计是以下原因之一:
A. 你的浏览器设置存在问题。例如在IE中默认是“自动”而你可能改成了“每次访问都检查网页更新”。
B. 你的服务器端程序有问题。例如发出了禁止Cache的头。
C. RPWT 4 楼 hax 2007-09-20 注意,IE其实存在图片缓存bug,但是通常它并不会导致一次新的请求,只是会产生多次的WinNET API调用,效果就是有轻微的闪烁。
此外,Filter(AlphaImageLoader)和VML的image,都分别存在一些缓存上的问题(Shame M$)。但是这里并没有涉及到。