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 ...
随机推荐
- SQL Server深入理解“锁”机制
相比于 SQL Server 2005(比如快照隔离和改进的锁与死锁监视),SQL Server 2008 并没有在锁的行为和特性上做出任何重大改变.SQL Server 2008 引入的一个主要新特 ...
- 给radio加自己的样式(图片)
$('.choice').click(function() { var display1 = $("#check").prop("checked"); cons ...
- bzoj千题计划184:bzoj1261: [SCOI2006]zh_tree
http://www.lydsy.com/JudgeOnline/problem.php?id=1261 dp[l][r][dep] 区间[l,r]内的节点,根在dep层的最小代价 枚举根i,dp[ ...
- 雨林木风ghostwin7纯净版系统下载
雨林木风ghostwin7纯净版系统下载 关于easyuidatagrid的问题,跪求老司机带带我..... 关于cst_modesys/stat.h一个问题求解答谢谢 [程序]STM32使用SPI接 ...
- MySQL索引背后的数据结构及算法原理 (转)
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- ACM数据对拍程序
#include<cstdio> #include<cstdlib> #include<ctime> int main() { long s,t; while(1) ...
- Maven部署dao工程到私服上——(十三)
1.修改settings.xml 需要在客户端即(部署dao工程)的电脑上配置 maven环境,并修改 settings.xml 文件,配置连接私服的用户和密码 . 此用户名和密码用于私服校验,因为私 ...
- 搜索引擎ElasticSearchV5.4.2系列一之ES介绍
相关博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介绍 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+kibanaV5.4.2+x- ...
- ps命令实用方法.ps -l ps -L详解
一.统计sleep状态的进程. c233 plugins # ps -elf|head -1F S UID PID PPID C PRI NI ADDR SZ WCHA ...
- python3 pandas DataFrame常见用法
df = pandas.read_clipboard() df 获取索引和值 df.index df.values DataFrame的values属性将数据以二维ndarray形式返回,dtype类 ...