博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
require和require.async的区别
阅读量:4687 次
发布时间:2019-06-09

本文共 2277 字,大约阅读时间需要 7 分钟。

本文用seajs来讲解两种模块加载方式require和require.async的区别,类似java里的import,php里的include。

  
seajs模块加载器seajs采用CMD规范,模块化开发,模块化要解决的问题:命名冲突、文件依赖关系。一个文件就是一个模块。
//test01.jsdefine(function(require){  console.log("这是test01");  var obj = {    title:"这是test01"  }  return obj;});
//test02.jsdefine(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对象});*/

转载于:https://www.cnblogs.com/camille666/p/require_requireasync.html

你可能感兴趣的文章
批处理文件中的路径问题
查看>>
appium+python 环境搭建
查看>>
WampServer下修改和重置MySQL密码
查看>>
hibernate出现No row with the given identifier exists问题
查看>>
为什么wait()和notify()属于Object类
查看>>
Part2_lesson3---ARM寄存器详解
查看>>
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同!
查看>>
导入properties时的坑
查看>>
python——网络编程
查看>>
Spark的39个机器学习库
查看>>
Electron学习笔记(一)
查看>>
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
查看>>
配置NRPE的通讯
查看>>
VS2005编译VTK5.10.1
查看>>
shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言
查看>>
总结上海永辉云商高级前端职位面试题集
查看>>
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>