如何使用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 相关文章推荐
封装好的省市地区联动控件附下载
Aug 13 Javascript
JS OOP包机制,类创建的方法定义
Nov 02 Javascript
firefox下frameset取不到值的解决方法
Sep 06 Javascript
两种方法实现文本框输入内容提示消失
Mar 17 Javascript
通过url查找a元素应用案例
Apr 29 Javascript
兼容主流浏览器的JS复制内容到剪贴板
Dec 12 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
May 25 Javascript
ligerUI---ListBox(列表框可移动的实例)
Nov 28 Javascript
vue router+vuex实现首页登录验证判断逻辑
May 17 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
Nov 11 Javascript
微信小程序解除10个请求并发限制
Dec 18 Javascript
Node.js学习教程之Module模块
Sep 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编实现程动态图像的创建代码
2008/09/28 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
js 图片等比例缩放代码
2010/05/13 Javascript
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
微信小程序实现点赞业务
2021/02/10 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
装修致歉信
2014/01/15 职场文书
终止劳动合同协议书
2014/04/14 职场文书
小学一年级评语大全
2014/04/22 职场文书
学校安全防火方案
2014/06/07 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
2014年英语工作总结
2014/12/20 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP
Python中第三方库Faker的使用详解
2022/04/02 Python
Nginx 匹配方式
2022/05/15 Servers