如何使用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 相关文章推荐
JavaScript 设计模式学习 Factory
Jul 29 Javascript
JavaScript DOM元素尺寸和位置
Apr 13 Javascript
js脚本分页代码分享(7种样式)
Aug 19 Javascript
14 个折磨人的 JavaScript 面试题
Aug 08 Javascript
jquery实现网页定位导航
Aug 23 Javascript
完全深入学习Bootstrap表单
Nov 28 Javascript
jquery操作select取值赋值与设置选中实例
Feb 28 Javascript
Vue.js 表单控件操作小结
Mar 29 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
Dec 09 Javascript
Vue 中使用 typescript的方法详解
Feb 17 Javascript
微信小程序实现日历小功能
Nov 18 Javascript
JavaScript实现点击图片换背景
Nov 20 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
建立动态的WML站点(一)
2006/10/09 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
php使用google地图应用实例
2014/12/31 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
Python中的并发编程实例
2014/07/07 Python
python进程管理工具supervisor使用实例
2014/09/17 Python
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
浅谈Python __init__.py的作用
2020/10/28 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
python爬取微博评论的实例讲解
2021/01/15 Python
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
成功的酒店创业计划书
2013/12/27 职场文书
一份创业计划书范文
2014/02/08 职场文书
房地产开发项目建议书
2014/05/16 职场文书
保密工作承诺书
2014/08/29 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python