如何使用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 相关文章推荐
js 事件小结 表格区别
Aug 13 Javascript
IE8 原生JSON支持
Apr 13 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
Jun 28 Javascript
JQuery操作元素的css样式
Mar 09 Javascript
JavaScript获得url查询参数的方法
Jul 02 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
Apr 20 Javascript
js实现楼层效果的简单实例
Jul 15 Javascript
浅谈JS使用[ ]来访问对象属性
Sep 21 Javascript
jQuery实现复制到粘贴板功能
Feb 11 Javascript
详解微信小程序支付流程与梳理
Jul 16 Javascript
Ajax实现异步加载数据
Nov 17 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程序的国际化实现方法(利用gettext)
2011/08/14 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
jquery validate poshytip 自定义样式
2012/11/26 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
2019/08/08 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
Python与R语言的简要对比
2017/11/14 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
Python日志模块logging基本用法分析
2018/08/23 Python
Python数据集切分实例
2018/12/08 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
浅析使用Python搭建http服务器
2019/10/27 Python
Python如何操作docker redis过程解析
2020/08/10 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
干部下基层实施方案
2014/03/14 职场文书
合作协议书模板
2014/10/10 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
关于观后感的作文
2015/06/18 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书