如何使用headjs来管理和异步加载js


Posted in Javascript onNovember 29, 2016

现在有许多成熟的js模块加载器,比如requirejs和seajs等,但是对一些小的项目来说,它们的功能可能太过于“强大”,也许我们只是想要有一个能动态加载js的功能,或许我们只是想装B一下,让自己写出的页面没有一大堆的这样的东西。前面说的两种js加载器都是更强调模块性,也就是更强调js文件的组织和管理,更适用于大的项目。

就像刚刚说的,我只想有一个js文件加载器,我只需提供给它一个js文件的地址就行了的那种呢?那就进入我们的主题了,使用headjs吧。

首先,我想说一下Javascript的装载和执行。通常来说,浏览器对于Javascript的运行有两大特性:1)载入后马上执行,2)执行时会阻塞页面后续的内容(包括页面的渲染、其它资源的下载)。于是,如果有多个js文件被引入,那么对于浏览器来说,这些js文件被被串行地载入,并依次执行。 而headjs可以异步地把js文件下载到用户的本地,但是不执行,仅当在我们想要执行的时候去执行 。

基本用法

以下是它的基本用法:

// 最简单的例子,异步加载js
head.js("/path/to/file.js");
// 异步加载js,只在js加载成功之后执行后面的函数
head.js("/path/to/file.js", function() {
});
// 并行下载下面的js,并且按顺序加载执行js
head.js("file1.js", "file2.js", ... "fileN.js");
// 并行下载js,并且按顺序加载执行js,加载完成后执行后面的函数
head.js("file1.js", "file2.js", function() {
});
// 类似head.js("file1.js", "file2.js","fileN.js");写法不一样而已
head.js("file1.js");
head.js("file2.js");
head.js("file3.js");
// 还可以这么写
head.js("file1.js").js("file1.js").js("file3.js");

脚本回调

上面的例子说明了最基本的使用,并且回调函数基本和加载放在一起,当我们需要把脚本写在页面底部,而回调函数却在其他地方定义了,不期望在回调函数依赖的脚本还未加载之前执行,我们可以用到head.ready,基本用法如下:

//只有在页面所有head.js加载完成之后才会执行
head.ready(function() {
});
// 简洁的写法如下
head(function(){
});
// 在页面所有head.js加载完成之后才加载file1.js
head.ready("file1.js",function(){
});

脚本别名

可以通过给脚本一个别名方便管理维护理解,使用方法如下:

// 按headjs中的脚本顺序,下载并加载里面脚本,在脚本tool加载完成之后执行下面的回调
head.ready("tools", function() {
 // 调用
 $(".tip").tooltip();
});
// 给脚本起别名
head.js( {jquery: "http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"}, {tools: "http://cnd.jquerytools.org/1.2.5/tiny/jquery.tools.min"}, {heavy: "http://a.heavy.library/we/dont/want/to/wait/for.js"},
 // 别名可选
 "http://can.be.mixed/with/unlabeled/files.js"
);

使用心得

顺便介绍一下小林的一点点使用心得,先把网页全部输出,这时候全部的内容都未依赖脚本,然后再用headjs加载需要的脚本,来使页面动态化,并应用了window.onload事件,防止脚本加载不成功页面一直打转让用户误以为页面还没加载完,下面是详细代码:

<script type="text/javascript" src="http://linjunlong.com/wp-content/themes/L/js/head.min.js" ></script>
<script type="text/javascript">
 window.onload=function() {
 head.js("http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js",
  function() {
  });
 }
</script>

这样做即使无法加载jquery等其他脚本也不会影响网页的使用

以上就是本文的全部内容,希望对大家有所帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript显示表单内元素数量的方法
Apr 02 Javascript
Javascript节点关系实例分析
May 15 Javascript
javascript获取select值的方法分析
Jul 02 Javascript
jQuery动画效果图片轮播特效
Jan 12 Javascript
属于你的jQuery提示框(Tip)插件
Jan 20 Javascript
基于jQuery插件实现点击小图显示大图效果
May 11 Javascript
浅谈javascript中的Function和Arguments
Aug 30 Javascript
javascript常用经典算法详解
Jan 11 Javascript
JS正则表达式完美实现身份证校验功能
Oct 18 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
Feb 09 Javascript
vue 中的 render 函数作用详解
Feb 28 Javascript
vue组件库的在线主题编辑器的实现思路
Apr 03 Javascript
JS针对Array的各种操作汇总
Nov 29 #Javascript
用headjs来管理和加载js 提高网站加载速度
Nov 29 #Javascript
巧用数组制作图片切换js代码
Nov 29 #Javascript
JS插件plupload.js实现多图上传并显示进度条
Nov 29 #Javascript
文件上传插件SWFUpload的使用指南
Nov 29 #Javascript
jquery结合html实现中英文页面切换
Nov 29 #Javascript
基于Three.js插件制作360度全景图
Nov 29 #Javascript
You might like
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
自动更新作用
2006/10/08 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
2017/07/26 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
layui实现三级联动效果
2019/07/26 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
Python中的装饰器用法详解
2015/01/14 Python
python中abs&amp;map&amp;reduce简介
2018/02/20 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
python序列化与数据持久化实例详解
2019/12/20 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
在什么时候需要使用"常引用"
2015/12/31 面试题
茶叶生产计划书
2014/01/10 职场文书
校本教研工作方案
2014/01/14 职场文书
护士求职自荐信范文
2014/03/19 职场文书
党员一句话承诺大全
2014/03/28 职场文书
消防工作实施方案
2014/06/09 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python