采用jQuery动态加载JavaScript文件可以减少js文件大小,提供更快的网页加载速度。jQuery中可以采取$.getScript方法异步加载。使用实例如下,相当于$.ajax方法:

$.getScript('ajax/test.js', function() {
  alert('Load was performed.');
});

其它参数可以查看官方的API:传送门

WordPress主题中也可以采取这样的方法动态加载js,实现按需加载,比如在Abook这个主题中,我主要用了两处js的动态加载。

(一)ajax评论绑定和工具栏载入

image

效果就是访问者写评论的同时,载入ajax评论提交按钮的绑定(为免刷新提交评论准备)和评论工具栏(该工具栏来自qiqiboy的文章)的载入,当准备好以后显示载入完成提示和渐显工具栏。方法如下:

先定义一个函数:

var commentjs=function(){
	$.getScript(themeurl+"js/comment.js");//调用评论工具栏和ajax评论提交需要的js
	$('#toolBar').animate({opacity: 'show'}, 300);//载入工具栏
	$('#comment').unbind('focus',commentjs);//取消自身绑定focus的动作,避免重复加载
}

在用户鼠标焦点到评论框时,执行js的加载和绑定,相关代码如下:

$('#comment').bind('focus',commentjs);//绑定上面的commentjs函数

 

(二)实时头像相关js的动态载入

实时头像指的是在新访问者第一次在评论处输入邮箱地址时即时的显示所访客的gravatar头像,问题就是负责转换邮箱地址的一段8kb的js有点大,不想让每次都加载这个家伙。以前我有写一篇通过php结合cookie判断新访客来载入这段js的方法:实时头像

现在我用$.getScript方法同样可以实现:

var gravatarjs=function(){
	$.getScript(themeurl+"js/realgravatar.js");
	$('#email').unbind('focus',gravatarjs);//取消绑定focus的动作
}
$('#email').bind('focus',gravatarjs);

注:代码中themeurl是主题地址。

其实两个js文件并不大,主要是贯彻按需加载js的原则,给有洁癖的同学,折腾完毕~

  1. 17 (2011.07.12 at 19:28) 17楼

    太嗨皮了

  2. 万戈 (2011.07.31 at 18:09) 18楼

    有洁癖的同学,是指我吗?哈哈,这个方法我喜欢

  3. 荒野无灯 (2011.08.01 at 20:48) 19楼

    嗯,这个不错!在优化网站时可以用到D~~~ :grin:

  4. syshack (2011.08.05 at 11:55) 20楼

    单片文章打开后有个返回按钮就好了~不然没法回到文章列表页面,如果点首页返回的话,又需要翻页~

  5. 荒野无灯 (2011.09.14 at 04:16) 21楼

    这是个好方法。不过用原始的加载方法也有优点。
    比如你说的评论框的js,当用户第一次点击时会加载相应js。如果服务器没有缓存设置,那么当再次点击时相应的Js会再次从服务器请求,每次都要重新加载。用户还有,一般只留言一条,如果是admin的话,在回复别人评论时,那就加载了N多次了。

    • winy() (2011.09.16 at 09:44)

      @荒野无灯,调用成功后自动unbind,所以不会出现点击一次加载一次的情况
      除非刷新。不过刷新就和原始的方法一样了,都会有缓存。

  6. Ego008 (2012.02.07 at 00:25) 22楼

    过来学习了,正想在我的博客异步加载gravatar

评论分页: 1 2 3

发布评论

邮箱(必填)

换个背景