本文用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的区别的更多相关文章

  1. [转]require(),include(),require_once()和include_once()区别

    require(),include(),require_once()和include_once()区别 面试中最容易提到的一个PHP的问题,我想和大家共勉一下: require()和include() ...

  2. <script>标签里的defer和async属性 区别(待补充)

    defer与async的区别(表格显示): table th:first-of-type { width: 150px; } table th:nth-of-type(2) { } 区别 defer ...

  3. url,href和src的区别,defer和async的区别

    URL(Uniform Resource Locator):统一资源定位符,互联网上的每个文件都有一个唯一的URL,基本URL包含协议,IP地址,路径和文件名. 重点:herf和src的区别 href ...

  4. require,include,require_once,include_once的区别

    最近面试时被问到,一时间还真没想到太多,仅仅回答了大概的几个,于是回来再确认一下. 以下内容为网络摘抄: ①作用及用法  可以减少代码的重复 include(_once)("文件的路径&qu ...

  5. require include php5中最新区别,百度上好多错的。

    二者报错机制不同,include是warning 继续执行程序,require会报致命错误,中断程序运行. 前者有返回值,后者则没有. 注意了,php5里有一个区别没了,之前说的是require是无条 ...

  6. require/exports 和 import/export 区别

    零.区别 1.require/exports 是 CommonJS 的标准,适用范围如 Node.js 2.import/export 是 ES6 的标准,适用范围如 React 一.间接获取对象 ( ...

  7. require/load/include/extend的区别

    require 一般用于加载一个库,当多次使用require加载一个库时,只有第一次有效,后面的都会加载失败,也就是会返回"false",以为require会追踪文件是否被加载. ...

  8. 【转载】PHP中require(),include(),require_once()和include_once()区别

    关于这方面的知识,这篇文章讲的较全: http://www.jb51.net/article/22467.htm require 的使用方法如 require("MyRequireFile. ...

  9. [Vue]webpack的require与require.context

    1.require 1.1完整路径的require语句: require('tools'); //preset alias tools require('./js/main'); 1.2带表达式的 r ...

随机推荐

  1. java基础基础总结----- System

    常用的方法: 细节分析:

  2. Codeforces 662 C. Binary Table

    http://codeforces.com/contest/662/problem/C 题意:n行m列01矩阵,每次可以反转一行或一列,问最后最少可以剩下多少个1 n只有20,把行状态压缩 操作奇数次 ...

  3. hdu 5385 The path

    http://acm.hdu.edu.cn/showproblem.php?pid=5385 题意: 给定一张n个点m条有向边的图,构造每条边的边权(边权为正整数),令d(x)表示1到x的最短路,使得 ...

  4. bzoj千题计划225:bzoj2143: 飞飞侠

    http://www.lydsy.com/JudgeOnline/problem.php?id=2143 分层图最短路 把能够弹跳的曼哈顿距离看做能量 dp[i][j][k]表示在(i,j)位置,还有 ...

  5. Spring Cloud(十四)Config 配置中心与客户端的使用与详细

    前言 在上一篇 文章 中我们直接用了本应在本文中配置的Config Server,对Config也有了一个基本的认识,即 Spring Cloud Config 是一种用来动态获取Git.SVN.本地 ...

  6. 《Linux命令行与shell脚本编程大全》第十一章 构建基本脚本

    11.1使用多个命令 $date;who   //  命令列表,加入分号就可以,这样会依次执行.参见5.2.1节 注意区分$(date;who),这个是进程列表,会生成一个子shell来执行 Shel ...

  7. javascript类式继承最优版

    直接看实例代码: <!doctype html> <html lang="en"> <head> <meta charset=" ...

  8. Java NIO 之 Buffer(缓冲区)

    一 Buffer(缓冲区)介绍 Java NIO Buffers用于和NIO Channel交互. 我们从Channel中读取数据到buffers里,从Buffer把数据写入到Channels. Bu ...

  9. linux笔记_day11_shell编程

    1.条件测试类型: 整数测试 字符测试 文件测试 条件测试的表达式: [ expression ] 必须有空格 [[ expression ]] test expression 整数比较 : -eq  ...

  10. kernel——make menuconfig的实现原理【转】

    转自:https://blog.csdn.net/hpr1992/article/details/41048693 .系统移植可以分为配置系统和编译系统两大块,其中通过命令makemenuconfig ...