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 ...
随机推荐
- JAVA记录-Servlet RequestDispatcher请求转发
RequestDispatcher接口提供将请求转发送到另一个资源的功能,它可能是html,servlet或jsp等. 此接口也可用于包括另一资源的内容.它是servlet协作的一种方式. 在Requ ...
- MongoDB 聚合嵌入的数组(扁平化数据+管道)
MongoDB学习教程 先看下要操作的主要数据结构: { "_id" : "000015e0-3e9c-40b3-bd0d-6e7949f455c0", &qu ...
- [整]Android SlidingMenu Demo 环境搭建
1. 下载ActionBarSherlock https://github.com/JakeWharton/ActionBarSherlock 2. 下载SlidingMenu https://git ...
- [转]Centos 安装Sublime text 3
本文简单介绍在CentOS上安装Sublime text 3, 转自:Centos 安装Sublime text 3 Step 1 :建立软件安装目录 # mkdir /opt # cd /opt S ...
- 2017/05/17 java 基础 随笔
- C# IEqualityComparer类型参数写法
最近在使用Union.Except时,由于默认的对比不太好使,所以需要自定义对比器,下面附上代码. class MaterialListComparer : IEqualityComparer< ...
- pop3设置
- casperjs 知乎登陆
phantom.casperTest = true; phantom.outputEncoding="utf-8"; var fs = require('fs'); var cas ...
- poj1273
赤裸裸的最大流 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstr ...
- unit测试出现异常:Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.commons.util
在进行单元测试时,测试出现异常 Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform ...