额,貌似有段时间没正儿八经写日志了…,偶们前端组的blog近期也要上线,这也算篇凑数特供稿,哈哈,有时间再整理一下以前能让大家看明白的弄上去,不过密码我给忘了…
——————————————-
网站最近搞了次优化,效果比较明显,以前不敢用的动态加载(我自己起得,洋名叫lazy load,这样翻译应该也算得体,延迟加载也说得过去..)终于派上了用场.

总的来说是这样的:

  1. 页面加载时不会初始化的脚本不引用,不显示的ui用的样式不加载.用户交互用到时加载.
  2. 除用户可视区域外的图片不加载,用户有滚屏操作时加载.

具体实现:

1 . 实现js和css的动态加载
适用 : 页面的pv较高,功能模块较多,每次刷新页面都需要重复解析和渲染.
缺点 : 用户从点击一个按钮到函数响应,中间会有静态的下载和解析的一段延迟(有客户端缓存会好的多)
优化 : 为了尽量让用户感觉不到延迟,我们在登录页面预载的一些经常用到的脚本(由于网站的更新周期固定,所以脚本仅会在更新当天预载)
实现 :

XN.dynamicLoad(
{
files : ['http://s.xnimg.cn/a2328/csspro/module/poke.css',
'http://s.xnimg.cn/a2252/jspro/xn.app.poke.js'],
funcs : ['doPoke']
});
Copy Code 

以上代码是人人网个人主页中的一段代码,用来动态加载打招呼的功能,files注册需要动态加载进来的静态,funcs注册触发加载的函数名.这个东西以前写过一篇不太成熟的文章

2 . 实现图片的动态加载
适用 : 现在仅对新鲜事动了刀,因为新鲜事里图片变动太快,客户端缓存率太低.整个页面图片动态加载没有必要,因为很多模块都是固定的,本来客户端就有缓存.
缺点 : 这个东东很冒险,上线之后发现ff3.0刷新之后图片全白了,正在优化实现代码…
优化 : 既然问题那么多,为了便于维护,仅对ie和ff两种用户比较多的浏览器才用这种方法.
实现 :

<img needclip="1" width="50" height="50" lala="http://hdn.xnimg.cn/photos/hdn221/20091006/1415/tiny_IgCp_4728e019118.jpg" src="http://s.xnimg.cn/a.gif" onload="feed_img_delay_load(this);" />
Copy Code 

以上是人人网home页新鲜事中的一段代码,图片的src=”http://s.xnimg.cn/a.gif”是一个1×1像素的空白gif,而它的真正地址被存在”lala”这个属性中(有人问我为什么要起个lala呢…随意起得了,起个dongganchaoren就有点长了…),onload中的feed_delay_load是关键,1×1的图片加载完毕后会调用它,它首先会判断图片是否在可视区域,如果是把它显示出来,如果不是把图片放到加载队列里.然后会有一个定时器检测屏幕滚动,从队列里加载图片.

优化效果 :
试过才知道,真的好用…