require和require.async的区别
本文用seajs来讲解两种模块加载方式require和require.async的区别,类似java里的import,php里的include。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>seajs模块加载器</title>
</head>
<body>
seajs采用CMD规范,模块化开发,模块化要解决的问题:命名冲突、文件依赖关系。一个文件就是一个模块。
<!--<script type="text/javascript" src="scripts/seajs/sea.js" id="seajsnode" data-main="myjs/index"></script>-->
<script src="scripts/seajs/sea.js" id="seajsnode"></script>
<script>
seajs.use("myjs/index");
</script>
</body>
</html>
//test01.js
define(function(require){
console.log("这是test01");
var obj = {
title:"这是test01"
}
return obj;
});
//test02.js
define(function(require){
console.log("这是test02");
var obj = {
title:"这是test02"
}
return obj;
});
1、加载方式不同
require方法的加载方式是提前并行加载,并不是同步加载,看似同步,但还会往下执行,它不会因为一个文件而阻塞其他文件的加载。require.async方法的加载方式是异步按需加载,异步回调执行。
//index.js,1、比较加载方式
define(function(require, exports, module){
if(false) {
require("myjs/test01"); //加载文件:test01.js和test02.js
}else{
require("myjs/test02");
}
});
/*
define(function(require, exports, module){
if(false) {
require.async("myjs/test01"); //加载文件:test02.js
}else{
require("myjs/test02");
}
});
*/
/*
define(function(require, exports, module){
if(false) {
require.async("myjs/test01",function(){ //加载文件:test02.js
require("myjs/test02");
});
}
});
*/
2、加载阶段不同
require的文件在代码分析期加载,require. async的文件在代码执行期加载。
3、执行时间不同
require的文件预加载完成但不执行,require. async的文件加载完后立即执行。
//index.js,2,3、比较加载阶段和执行时间
define(function(require, exports, module){
setTimeout(function(){
require("myjs/test01"); //页面渲染时就开始加载test01.js,代码执行在2s以后
},2000);
});
/*
define(function(require, exports, module){
setTimeout(function(){
require.async("myjs/test01",function(obj){
console.log(obj);
}); //页面加载完成2s后开始加载test01.js,加载完执行代码,将返回值作为参数,执行回调函数
},2000);
});
*/
4、是否有回调函数
在seajs里,require没有回调函数,只能通过变量赋值,require.async可以将返回值作为一个参数放到回调函数中使用。
//index.js,4、比较是否有回调函数
define(function(require, exports, module){
require.async('myjs/test01',function(obj){
console.log(obj); //加载并执行index.js,test01.js,输出obj对象
});
});
/*
define(function(require, exports, module){
require('myjs/test01',function(obj){
console.log(obj); //只加载index.js,不加载test01.js,不执行index.js和test01.js,也不报错
});
});
*/
/*
define(function(require, exports, module){
var obj = require('myjs/test01');
console.log(obj); //加载并执行index.js,test01.js,输出obj对象
});
*/
require和require.async的区别的更多相关文章
- [转]require(),include(),require_once()和include_once()区别
require(),include(),require_once()和include_once()区别 面试中最容易提到的一个PHP的问题,我想和大家共勉一下: require()和include() ...
- <script>标签里的defer和async属性 区别(待补充)
defer与async的区别(表格显示): table th:first-of-type { width: 150px; } table th:nth-of-type(2) { } 区别 defer ...
- url,href和src的区别,defer和async的区别
URL(Uniform Resource Locator):统一资源定位符,互联网上的每个文件都有一个唯一的URL,基本URL包含协议,IP地址,路径和文件名. 重点:herf和src的区别 href ...
- require,include,require_once,include_once的区别
最近面试时被问到,一时间还真没想到太多,仅仅回答了大概的几个,于是回来再确认一下. 以下内容为网络摘抄: ①作用及用法 可以减少代码的重复 include(_once)("文件的路径&qu ...
- require include php5中最新区别,百度上好多错的。
二者报错机制不同,include是warning 继续执行程序,require会报致命错误,中断程序运行. 前者有返回值,后者则没有. 注意了,php5里有一个区别没了,之前说的是require是无条 ...
- require/exports 和 import/export 区别
零.区别 1.require/exports 是 CommonJS 的标准,适用范围如 Node.js 2.import/export 是 ES6 的标准,适用范围如 React 一.间接获取对象 ( ...
- require/load/include/extend的区别
require 一般用于加载一个库,当多次使用require加载一个库时,只有第一次有效,后面的都会加载失败,也就是会返回"false",以为require会追踪文件是否被加载. ...
- 【转载】PHP中require(),include(),require_once()和include_once()区别
关于这方面的知识,这篇文章讲的较全: http://www.jb51.net/article/22467.htm require 的使用方法如 require("MyRequireFile. ...
- [Vue]webpack的require与require.context
1.require 1.1完整路径的require语句: require('tools'); //preset alias tools require('./js/main'); 1.2带表达式的 r ...
随机推荐
- react入门-refs
vue有ref来获取template里面的子组件/子元素,react当然也有: <!DOCTYPE html> <html lang="en"> <h ...
- C++ 多用户模式下同一个exe只能运行一次
1.有时候会遇到多用户模式下一不小心会运行多个exe的问题,所以程序中添加一下代码解决这个问题: BOOL CtestDialogApp::InitInstance() { char exeFullP ...
- Codeforces Round #547 (Div. 3) D
http://codeforces.com/contest/1141/problem/D 题目大意: 鞋子匹配,用一个小写字母表示一种颜色.L[i]表示左脚的颜色,R[i]表示右脚的颜色,只有当L[i ...
- elementUI 表格分页后台排序记录
表格代码 <div class="m-table"> <el-table :data="logs" style="width: 10 ...
- 20155226 2016-2017-2 《Java程序设计》第6周学习总结
20155226 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 1 . 串流 ...
- MFS - MooseFS 文件系统
MFSMooseFS 文件系统 可以实现RAID 功能:节约成本 实现在线扩展:是一种半分布式文件系统. 一.MFS文件系统的组成 1.mfsmaster 元数据服务器. 在整个体系中负责管理管理文件 ...
- HDU 4506 小明系列故事——师兄帮帮忙(二分快速幂)
题意:就是输入一个数组,这个数组在不断滚动,而且每滚动一次后都要乘以一个数,用公式来说就是a[i] = a[i-1] * k;然后最后一位的滚动到第一位去. 解题报告:因为题目中的k要乘很多次,达到了 ...
- 数链剖分(树的统计Count )
题目链接:https://cn.vjudge.net/contest/279350#problem/C 具体思路:单点更新,区间查询,查询的时候有两种操作,查询区间最大值和区间和. 注意点:在查询的时 ...
- C++ socket 网络编程 简单聊天室
操作系统里的进程通讯方式有6种:(有名/匿名)管道.信号.消息队列.信号量.内存(最快).套接字(最常用),这里我们来介绍用socket来实现进程通讯. 1.简单实现一个单向发送与接收 这是套接字的工 ...
- 采用jacob实现word转pdf
网络上已经有很多这方面的内容,在用之前也是参考了好多别人的文章,下面记录下我自己的整合过程.整个过程都比较简单: 开发环境:win8 64位系统,在2008下面部署也是一样的. 文档要求jdk的版本要 ...