我在实现lazyload预加载之后,就图片load所需要的时间和原来的页面加载所需要的时间进行了一个对比,发现似乎使用了lazyload实现延缓加载的页面所需要的加载时间更长(虽然是同一网页,但是头部稍有差别,不知道是不是头部多了几张图片的问题),这是为什么,附图两张:(google浏览器下测试)
使用过lazyload的页面:
原来的页面:
我想问的是为什么加载感觉反而变慢了
lazyload.js 延è¿å è½½æææ¯ä¸ºäºå¿«éå±ç°é¡µé¢å¾çï¼æ¯å¦å¾å¤å±çå¾çï¼æ件æ¯è¾å¤§ï¼è¿ä¸ªæ件ç®çä¸æ¯ä¸ºäºèçæå¡å¨èµæºï¼èæ¯ä¸ºäºæµè§ä½éªï¼å¦æä½ æå¨å°åºé¨ï¼å ¶å®ä¹æ¯ä¸æ ·çæ¶èæå¡å¨èµæºãæ¯æéæ©æ§ç请æ±å¾çï¼å¾å¤äººæ²è§£äºè¿ä¸ªææï¼å ¶å®æ件并没æç»ä½ è约带宽ï¼èæ¯è ¾åºæ¥ç»è§è§åºåçå¾çã
æå¾å¤å¾ç为主çç½ç«å©ç¨è¿ä¸ªè½å¤§å¤§æé«ç¨æ·ä½éªï¼ä½æ¯æä¸ç¹ä¸å¥½å°±æ¯å¯¹æç´¢å¼æä¸å好ï¼å 为èèçå°çä¸æ¯çå®å°åï¼é£ä¹å¦ä½è§£å³ç±»ä¼¼é®é¢å¢ï¼å
¶å®è¿ä¸ªé®é¢å¯ä»¥å©ç¨jsé¿å
æã代ç å¦ä¸ï¼
页é¢å¾çåæ³å¦ä¸
è¿æ ·ææä¸å½±åï¼åªæ¯å©ç¨äºjQueryç便å©ï¼$(document).ready()å¨ææ¡£domå è½½å®æ¯å°±å é¤äºsrcï¼æ以ä¸ä¼æ请æ±ï¼è¿æ ·å°±ç¸å½äºå¨æ们使ç¨åï¼æ¯å©ç¨jså é¤çsrcï¼èä¸æ¯æ们ç¨åºä¸è¾å
¥å¾çã
这个是兼容:ie6/7/8, firefox 3.5.5, opera 10.10, safari 4.0.4, chrome 3.0
【基本原理】
首先要有一个容器对象,容器里面是_elems加载元素集合。
用隐藏或替换等方法,停止元素加载内容。
然后历遍集合元素,当元素在加载范围内,再进行加载。
加载范围一般是容器的视框范围,即浏览者的视觉范围内。
当容器滚动或大小改变时,再重新历遍元素判断。
如此重复,直到所有元素都加载后就完成。
【容器对象】
程序一开始先用_initContainer程序初始化容器对象。
先判断是用window(窗口)还是一般元素作为容器对象:
当容器滚动或大小改变时,就会通过事件绑定(例如scroll/resize)自动执行_load加载程序。
ps:如果不能绑定事件(如resize),应手动执行load或resize方法。
当容器大小改变(resize)时,还需要先执行_getContainerRect程序获取视框范围。
要获取视框范围,一般元素可以通过_getRect方位参数获取程序来获取。
但如果容器是window就麻烦一点,测试以下代码:
包括以下几种模式:
vertical:垂直方向加载模式
horizontal:水平方向加载模式
cross/cross-vertical:垂直正交方向加载模式
cross-horizontal:水平正交方向加载模式
dynamic:动态加载模式
其中"dynamic"模式是一般的加载方式,没有约束条件,但也没有任何优化。
其余都属于静态加载模式,适用于加载对象集合元素的位置(相对容器)或大小不会改变(包括加载后)的情况。
其中两个正交方向加载模式("cross"模式)适用于两个方向都需要判断的情况。
程序会对静态加载的情况尽可能做优化,所以应该优先选择静态加载模式。