也谈模块加载,吐槽CMD
先吐槽CMD,不要没头没脑的搞出个CMD,没意思。
大家都看AMD好了,异步模块加载机制,CMD并没有改变这个模式。
模块加载的关口就是getCurrentScript,每次define被调用的时候,识别出是哪个脚本在调用它,把javascript内容解析出来,
识别出依赖的模块,(就是里面有require的资源部分),在执行前先准备好这些资源。
当然这里面有若干相对路径的转换。
AMD很好,人人都喜欢异步工作方式,所以QQ、email比电话更受欢迎,有什么事情我准备好了再回复你。
但是人也是有控制欲的,人喜欢别人以同步方式工作,恨不得别人停下手里所有事立刻为自己服务。
所以我对AMD不满足,使用过Node.js后,非常喜欢require的同步加载方式,请注意是同步模块加载,SMD就不叫了,就是require。
require(src) 三个参数,
src 是资源相对路径,
内部步骤
1.var str=ajax(src); 获取脚本内容
2.var fn=new Function("module","require");
3.var module={},newReq=hitch(require,base);/*构造一个新的require,绑定上下文参数 base指新的目录*/
4.fn(module,newReq);
5.return module.exports;
模块脚本编写样例:
module.exports={a:10,b:10,sum:function(x,y){return x+y;}};/*返回一个对象*/
或者
module.exports=function(a,b){return a+b}/*返回一个函数,函数是一等公民*/
所有人都能看得到的就是阻塞问题,浏览器的UI进程被阻塞,如果模块加载花费太多时间,会出现浏览器不响应,甚至假死
这时候是多么希望有中断和唤醒机制啊, thread.sleep()
再换个思路,如果合理控制模块的大小,缓存,确保浏览器本地有所需的所有模块,那这个阻塞问题就不会成为大问题,
从缓存中读文件时毫秒级别。
这就需要用到离线应用程序功能了。
下一篇文章 离线应用程序尝试
也谈模块加载,吐槽CMD的更多相关文章
- 构建服务端的AMD/CMD模块加载器
本文原文地址:http://trock.lofter.com/post/117023_1208040 . 引言: 在前端开发领域,相信大家对AMD/CMD规范一定不会陌生,尤其对requireJS. ...
- js模块加载之AMD和CMD
当我写这篇文章的时候,sea.js已经逐渐退出历史的舞台,详细链接.不过任何新事物的出现都是对旧事物的取其精华,去其糟粕,所以了解一下以前模块的加载也是一件好事. js模块化的原因自不比多说,看看HU ...
- 对于模块加载:ES6、CommonJS、AMD、CMD的区别
运行和编译的概念 编译包括编译和链接两步. 编译,把源代码翻译成机器能识别的代码或者某个中间状态的语言. 比如java只有JVM识别的字节码,C#中只有CLR能识别的MSIL.还简单的作一些比如检查有 ...
- Javascript模块化编程之CommonJS,AMD,CMD,UMD模块加载规范详解
JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问 题进行系 ...
- 浅谈js模块加载方式(初级)
1.简介: 前端模块化开发日渐鼎盛,如何将零散的插件或者是普通的js脚本文件统一管理及引用,是众多开发者共同的目标.本人是从事.net开发的,最近对前端的一些东西特别的感兴趣,也会尝试的夹杂一点自己 ...
- 使用RequireJS并实现一个自己的模块加载器 (一)
RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...
- 【模块化编程】理解requireJS-实现一个简单的模块加载器
在前文中我们不止一次强调过模块化编程的重要性,以及其可以解决的问题: ① 解决单文件变量命名冲突问题 ② 解决前端多人协作问题 ③ 解决文件依赖问题 ④ 按需加载(这个说法其实很假了) ⑤ ..... ...
- seajs实现JavaScript 的 模块开发及按模块加载
seajs实现了JavaScript 的 模块开发及按模块加载.用来解决繁琐的js命名冲突,文件依赖等问题,其主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载. 官方文档:http:/ ...
- JS模块加载器加载原理是怎么样的?
路人一: 原理一:id即路径 原则.通常我们的入口是这样的: require( [ 'a', 'b' ], callback ) .这里的 'a'.'b' 都是 ModuleId.通过 id 和路径的 ...
随机推荐
- HanLP的分词统计
HanLP的分词效果鄙人研究了HanLP,他的分词效果确实还可以,而且速度也比较快,10的数据是9000毫秒 @SneakyThrows@Overridepublic LinkedHashMap< ...
- 左叶子之和(sum-of-left-leaves)
LeetCode题目--左叶子之和(sum-of-left-leaves) 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 ...
- ubuntu下vi不能正常使用的解决方法
现象 ubuntu中vi在编辑状态下方向键不能用,还有回格键不能删除等我们平时习惯的一些键都不能使用. 原因 ubuntu预装的是vim tiny版本,需要的是vim full版本. 方案 $sudo ...
- RDS 事务型数据库sql
-- 替换json中数据 select SUBSTRING_INDEX(SUBSTRING_INDEX('[{"channelCode":"MOBIL",&qu ...
- C语言入门编程需要掌握的核心要点有哪些? 为你总结了这20个!
摘要: C语言作为编程的入门语言,学习者如何快速掌握其核心知识点,面对茫茫书海,似乎有点迷茫.为了让各位快速地掌握C语言的知识内容,在这里对相关的知识点进行了归纳. 引言 C语言精简的语法集和标准库, ...
- go http爬虫
1 package main import ( "fmt" "io/ioutil" "net/http" ) func main() { r ...
- centos平台scp通过密钥远程复制文件(免密登录)
一,说明:两台机器的平台和ip 1,a服务器: centos8:ip:121.122.123.47 版本 [root@yjweb ~]# cat /etc/redhat-release CentOS ...
- Jmeter入门(2)- 基本使用
一. JMeter入门脚本 学习例子 向百度发送请求 添加测试计划,默认会有一个测试计划 添加线程组 在测试计划上右键 ==> 添加 ==> 线程(用户) ==> 线程组 添加HTT ...
- sql左连接查询+右表带有条件的实现
select * from A表 a left join B表 b on a.id=b.a_id and b.字段='/*条件*/' ; 可查出左表所有数据 select * from A表 a le ...
- Docker学习笔记之-在虚拟机VM上安装CentOS 7.8
虚拟机VM版本:VMware Workstation Pro 16 中文虚拟机软件专业版 到官网下载即可,或者也可以通过下边链接下载 下载地址: http://www.epinv.com/post/1 ...