[转载]拒绝图片延迟加载,爽爽的看美图 – 杨中科 – 博客园.
有一天我一个朋友访问一个XX图片网站……每个人背后总有几个背黑锅的“朋友”,好吧,我承认那个“朋友”其实是我自己,你能把我怎么的?
这个网站用的是Discuz X2搭建的,启动了Discuz的图片延迟加载的功能。现在很多图片网站为了降低服务器压力都启用了图片延迟加载的机制,也就是只有图片处于可视区域才加载,这样用户没看到的图片就不加载,对于服务器的负载减轻还是帮助很大的。大致的原理是,对于图片标签不是把图片的路径指定到src属性上,src属性指定一个非常小的空白图片,真正的图片地址设置到一个自定义的属性上,比如file,这样img标签就是这样:
<img src=”blank.jpg” file=”00xx.jpg”/>
由于图片的地址指定到了一个自定义属性上,所以img不会去加载那个图片。当图片在浏览器上加载的时候显示的那个非常小的空白图片blank.jpg(如 果不设置初始的src会显示红叉,很难看),而且页面中所有的要延迟加载的图片都是使用blank.jpg,由于blank.jpg加了缓存,这样对服务 器的压力几乎没有。
然后启动一个定时器,定时检测图片是否处于可视区域,如果处于可视区域,则将file属性的值设置到src属性上,这样图片才开始加载。这是伟大程序员的伟大发明,真的很牛。
但是对于用户来讲就没那么爽了,如果网速比较慢的话,每次滚动到一个图片上都要等待它加载很痛苦!而且看XX组图通常要把好几个帖子一起打开,让那些帖子 慢慢后台加载,咱们再一个帖子一个帖子的看,但是一旦有了延迟加载就只能挨个打开再忍耐着它加载看了,不爽呀,Hold不住呀!
程序员用程序员的智慧,问题很好解决,写一个JavaScript脚本把所有图片的file属性一次性设置到src属性上不就ok了吗?写一个JavaScript脚本:
JavaScript: var html= '' ; for ( var i=0;i<document.images.length;i++){ var img = document.images[i]; if (img.file){html+= '<img src=' +img.file+ ' />' ;}};document.write(html+ "<br/>ok" ); |
我这个代码更直接,遍历网页上有file属性的图片,然后构造出一个含有所有图片的html然后输出到浏览器,哈哈页面上只有图片!这段代码是非常简单的JavaScript dom操作代码,看不懂的同学可以参考传智播客的免费.Net视频教程中的JavaScript教程部分。
把上面的代码粘贴到地址栏,按下回车整个网页只有图片了,没有广告、没有文字、只有图片,不要太爽哟!
下面这张延迟加载的原始网页(为了和谐,我费了半天劲才选了一个尺度非常小的组图,同时为了和谐,我把网址、网站名都mosaic了,请谅解):
执行脚本后的页面:
为了用起来更方便把上面的代码添加到收藏夹,打开每个图片帖子以后点击一下收藏夹里这个代码的项,方便更进一步!
如果想用起来更方便一点,可以写一个BHO,每次网页加载完毕的时候自动执行上面的代码,就完全自动化了,我比较懒就不去写了,思路留给大家。