如何使用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 31 Javascript
基于jQuery UI CSS Framework开发Widget的经验
Aug 21 Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 Javascript
用jquery修复在iframe下的页面锚点失效问题
Aug 22 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
Oct 28 Javascript
用队列模拟jquery的动画算法实例
Jan 20 Javascript
js仿新浪微博消息发布功能
Feb 17 Javascript
Bootstrap Table使用整理(一)
Jun 09 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
Jul 27 Javascript
写gulp遇到的ES6问题详解
Dec 03 Javascript
node中使用es6/7/8(支持性与性能)
Mar 28 Javascript
微信小程序收藏功能的实现代码
Jun 19 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
360通用php防护代码(使用操作详解)
2013/06/18 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
javaScript复制功能调用实现方案
2012/12/13 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
Python中每次处理一个字符的5种方法
2015/05/21 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
Django中信号signals的简单使用方法
2019/07/04 Python
Django之路由层的实现
2019/09/09 Python
python读文件的步骤
2019/10/08 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
详解rem 适配布局
2018/10/31 HTML / CSS
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
销售人员个人求职信
2013/09/26 职场文书
通信工程专业求职信
2014/06/04 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
珍爱生命主题班会
2015/08/13 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
七年级作文之雪景
2019/11/18 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers
mysql中between的边界,范围说明
2021/06/08 MySQL