如何使用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 相关文章推荐
QQ邮箱的一个文本编辑器代码
Mar 14 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
Apr 16 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
May 27 Javascript
js使用正则实现ReplaceAll全部替换的方法
Jul 18 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
JavaScript实现的字符串replaceAll函数代码分享
Apr 02 Javascript
JavaScript中string对象
Jun 12 Javascript
Javascript实现快速排序(Quicksort)的算法详解
Sep 06 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
Dec 08 Javascript
JavaScript多线程运行库Nexus.js详解
Dec 22 Javascript
js设置鼠标悬停改变背景色实现详解
Jun 26 Javascript
vue 动态添加class,三个以上的条件做判断方式
Nov 02 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
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
如何在PHP中进行身份认证
2006/10/09 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
在Python的Django框架中包装视图函数
2015/07/20 Python
Django URL传递参数的方法总结
2016/08/28 Python
Django 路由系统URLconf的使用
2018/10/11 Python
Python3中的bytes和str类型详解
2019/05/02 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
用Python进行websocket接口测试
2020/10/16 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
python绘制高斯曲线
2021/02/19 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
项目专员岗位职责
2013/12/04 职场文书
应届毕业生自我鉴定范文
2013/12/27 职场文书
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
中学音乐课教学反思
2016/02/18 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL
HTML常用标签超详细整理
2022/03/19 HTML / CSS