如何使用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 相关文章推荐
使用GruntJS构建Web程序之构建篇
Jun 04 Javascript
jQuery中的编程范式详解
Dec 15 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
Mar 23 Javascript
Bootstrap图片轮播组件使用实例解析
Jun 30 Javascript
CSS3 3D 技术手把手教你玩转
Sep 02 Javascript
xcode中获取js文件的路径方法(推荐)
Nov 05 Javascript
JavaScript获取键盘按键的键码(参照表)
Jan 10 Javascript
解决html input验证只能输入数字,不能输入其他的问题
Jul 21 Javascript
React.Js添加与删除onScroll事件的方法详解
Nov 03 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 Javascript
JS数组方法some、every和find的使用详情
Oct 05 Javascript
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
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获取程序执行的时间
2013/06/09 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
php fread读取文件注意事项
2016/09/24 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
[原创]图片分页查看
2006/08/28 Javascript
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
jQuery textarea的长度进行验证
2009/05/06 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
微信小程序开发摇一摇功能
2019/11/22 Javascript
Python代码的打包与发布详解
2014/07/30 Python
Python处理中文标点符号大集合
2018/05/14 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
Python中断多重循环的思路总结
2019/10/04 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
python/golang 删除链表中的元素
2020/09/14 Python
python excel多行合并的方法
2020/12/09 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
机械专业应届毕业生自荐书
2014/06/12 职场文书
先进学校事迹材料
2014/12/30 职场文书
市场督导岗位职责
2015/04/10 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
在redisCluster中模糊获取key方式
2021/07/09 Redis
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS