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基础基础总结----- Date
前言:其实在学习这个的时候,自我感觉学到什么直接查询API就可以了,没有必要再去研究某个方法怎么使用, 重点学习一下经常用到的方法.感觉自己的写的博客,就跟自己的笔记一样,用的是时候,就能快速的查找 ...
- 什么是spu和sku
电商概念SPU与SKU SPU = Standard Product Unit (标准产品单位)SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性.通俗 ...
- POJ 2965 The Pilots Brothers' refrigerator (暴力枚举)
https://vjudge.net/problem/POJ-2965 与poj-1753相似,只不过这个要记录路径.poj-1753:https://www.cnblogs.com/fht-lito ...
- bzoj千题计划262:bzoj4868: [六省联考2017]期末考试
http://www.lydsy.com/JudgeOnline/problem.php?id=4868 假设 最晚出成绩的是第i天 预处理 cnt[i] 表示 有多少个学生 期望出成绩的那一天 &l ...
- bzoj千题计划253:bzoj2154: Crash的数字表格
http://www.lydsy.com/JudgeOnline/problem.php?id=2154 #include<cstdio> #include<algorithm> ...
- 何凯文每日一句打开||DAY8
- PHP魔术方法之__invoke()
将对象当作函数来使用时,会自动调用该方法. class ShowProfile extends Controller { public function __invoke($id) { return ...
- python解析minicap
上篇知道了minicap发送图片的格式,照着官网的app.js代码,改用一个python版的来解析它,适当扩展,可以做个小工具实时显示手机屏幕. 步骤: 一.手机开启minicap服务 adb she ...
- Linux 静态库与动态库
静态库(.a) 一个deal.c usedeal.c 重点 1. gcc -c deal.c 生成 deal.o 2. ar -rsv libdeal.a deal.o 生成 libdeal.a ...
- iOS 提交应用过程出现的错误及#解决方案#images can't contain alpha channels or transparencies
本文永久地址为http://www.cnblogs.com/ChenYilong/p/3977542.html ,转载请注明出处. 当你试图通过<预览>"导出&qu ...