最近开始学习模块化开发了,这一篇完全无关任何代码,就来讲一下模块化的发展史,提高一下专业素养。

目录

1.萌芽阶段

2.困境阶段

3.进步阶段

4.发展阶段


JS模块化发展史大致可以分为4个阶段,萌芽,困境,进步,发展,接下来详细介绍各个阶段

1.萌芽阶段

JS在诞生之初,是为了实现页面中的小效果,代码量非常小。因为程序规模太小,所以即使大家知道这门语言存在缺陷,也不会特意去解决,只需要在开发的时候多加注意便可以避免问题。在这一阶段中,因为前端工程量实在太小,所以前后端并没有分离,前端的工作完全可以由后端工程师捎带完成。该阶段发生的大事:

1)1996年,NetScape将JavaScript语言提交给欧洲的一个标准制定组织ECMA(欧洲计算机制造商协会)

2)1998年,NetScape在与微软浏览器IE的竞争中失利,宣布破产

2.困境阶段

随着AJAX的出现,JS在浏览器中扮演的角色开始改变,此时,它已经可以与服务器之间进行交互,以更好的体验来改变数据。在功能丰富的同时,JS代码量也逐渐增长,从最初的几百行,到后来的几万行,前端程序逐渐变得复杂。后端开发者压力逐渐增加,致使一些公司开始招募专业的前端开发者。不过此时,前端开发者的待遇远不及后端开发者,因为前端开发者承担的开发任务相对于后端开发来说,还是比较简单的,通过短短一个月时间的集训,就可以满足前端开发的需求。究其根本,是因为以下问题没有得到解决:

1)浏览器解释执行JS的速度太慢

2)用户端的电脑配置不足

3)更多的代码带来了全局变量污染、依赖关系混乱等问题

以上三个问题成为前端开发挥之不去的阴影和原罪。在这个阶段,前端开发处于一个非常尴尬的境地,它在传统的开发模式和前后端相分离之间无助的徘徊。第二阶段的大事件:

1)IE浏览器制霸市场后,几乎不再更新

2)ES4.0流产,导致JS语言10年间几乎毫无变化

3)2008年ES5发布,仅解决了一些JS的API不足的糟糕局面

3.进步阶段

直到2008年,谷歌的V8引擎发布解决了第一个问题。V8引擎将JS的执行速度推上了一个新的台阶,甚至可以和后端语言媲美。随着摩尔定律持续发酵,个人电脑的配置开始飞跃,第二个问题也得已解决。此时,只剩全局变量污染和依赖混乱的问题,解决了它,前端便可以突破一切障碍,未来无可限量。于是,全世界的前端开发者在社区中激烈的讨论,想要为这个问题寻求解决之道

2008年,有一个名叫Ryan Dahl的小伙子正在为一件事焦头烂额,他需要在服务器端手写一个高性能的web服务,该服务对于性能要求之高,以至于目前市面上已有的web服务产品都满足不了需求。经过分析,他确定如果要实现高性能,那么必须要尽可能的减少线程,而要减少线程,避免不了要用异步的处理方案。一开始,他打算用C/C++语言自己编写,可是这一过程实在太痛苦。就在他一筹莫展的时候,谷歌的V8引擎的发布引起了他的注意。他突然发现,JS引擎不就是最好的实现web服务的语言吗?他天生就是单线程,并且是基于异步的。有了V8引擎的支撑,它的执行速度完全可以撑起一个服务器。而且V8是鼎鼎大名的谷歌公司发布的,谷歌一定会不断优化V8,有这种省钱又省力的好事,我为什么还要自己写呢?于是,他基于开源的V8引擎,对源代码做了一些修改,便快速完成了该项目

2009年,Ryan推出了该web服务项目,命名为node.js。从此JS第一次堂堂正正地入住后端,不再是必须依附属于浏览器的“玩具”语言了。也是此刻开始,人们认识到,JS也是一门真正的语言,它依附与运行环境(运行时)(宿主程序而执行)。node.js的诞生,便把JS中的最后一个问题放到了台前,即全局变量污染和依赖混乱问题

要知道,node.js是服务器端,如果不解决这个问题,分模块开发就无从实现,而模块化开发是所有后端程序必不可少的内容。经过社区的激烈讨论,最终形成了一个模块化方案,即鼎鼎大名的CommonJs,该方案彻底解决了全局变量污染和依赖混乱的问题。该方案一出,立即被node.js支持,于是,nodejs成为了第一个为JS语言实现模块化的平台,为前端接下来的迅猛发展奠定了实践基础,该阶段发生的大事件:

1)2008年,V8引擎发布

2)IE的市场逐渐被Firefox和chrome蚕食,现已无力回天

3)2009年,nodejs发布,并附带commonJS模块化标准

4.发展阶段

CommonJS的出现打开了前端开发者的思路,既然后端可以使用模块化的JS,作为JS语言的老东家浏览器为什么不行呢?于是,有人开始想办法把CommonJS运用到浏览器中。虽然这里面存在诸多困难,但是办法总比困难多,有些开发者就像,既然CommonJS运用到浏览器困难,我们干嘛不自己重新定义一个模块化的标准出来,难道就一定要用CommonJS标准吗

于是很快,AMD规范出炉,它解决的问题和CommonJS一样,但是可以更好地适应浏览器环境。相继的,CMD规范出炉,它对AMD规范进行了改进。这些行为收到了ECMA官方的密切关注,于是2015年,ES6发布,它提出了官方的模块化解决方案——ES6模块化。从此以后,模块化成为了JS本身特有的性质,这门语言终于有了和其他语言较量的资本,成为了可以编写大型应用的正式语言。与此同时,很多开发者、技术厂商早已预见到了JS的无穷潜力,于是有了下面的故事

1)为了使JS能编写大型应用,需要一些解决复杂问题的开发框架

  • 前端开发框架:Angular、React、Vue等
  • 后端开发框架:Express、Koa等
  • 各种后端数据苦驱动出现

2)要开发大型应用,需要第三方库的支持

  • npm包管理器的出现,使用第三方库变得极其方便;
  • webpack等构建工具的出现,专门用来打包和部署

3)既然JS可以放到服务器环境,为什么不能放到其他终端环境呢?

  • Electron发布,可以使用JS语言开发桌面应用程序;
  • RN和Vuex等技术发布,可以使用JS语言编写移动端应用程序;
  • 各种小程序出现,可以使用JS编写依附于其他应用的小程序;
  • 目前还有很多厂商致力于将JS应用到各种其他的终端设备,最终形成大前端生态

可以看到,模块化的出现,是JS通向大型应用的基石,学好模块化,便具备了编写大型应用的基本功。

JavaScript模块化不算漫长的发展史相关推荐

  1. JavaScript模块化 --- Commonjs、AMD、CMD、es6 modules

    随着前端js代码复杂度的提高,JavaScript模块化这个概念便被提出来,前端社区也不断地实现前端模块化,直到es6对其进行了规范,下面就介绍JavaScript模块化. 这篇文章还是希望能给大家一 ...

  2. javascript模块化、模块加载器初探

    最常见网站的javascript架构可能是这样的: 一个底层框架文件,如jQuery 一个网站业务框架文件,包含整站公用业务模块类(如弹框.ajax封装等) 多个业务文件,包含每个具体页面有关系的业务 ...

  3. (转)Javascript模块化编程(一):模块的写法

    转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...

  4. Javascript模块化编程(一):模块的写法

    随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ...

  5. Javascript模块化编程:AMD规范

    一.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写 ...

  6. javascript模块化之CommonJS、AMD、CMD、UMD、ES6

    javascript模块化之CommonJS.AMD.CMD.UMD.ES6 一.总结 一句话总结: CommonJS是同步加载模块,用在服务端:AMD是异步加载模块,用于浏览器端 1.为什么服务器端 ...

  7. JavaScript模块化开发整理

    在网上已经有很多关于模块化开发的文章了,这里还是按照自己的理解来整理一下. 随着项目文件的越来越大和需求的越来越贴近现实(我发现现在客户不如:一个领导说我要审批你们报上来的资料,系统发布以后用的还不错 ...

  8. Javascript模块化编程require.js的用法

    JS模块化工具requirejs教程(一):初识requirejs http://www.runoob.com/w3cnote/requirejs-tutorial-1.html JS模块化工具req ...

  9. Web前端进阶之JavaScript模块化编程知识

    JavaScript是前端三要素之一,也是很多初学Web前端的人遭遇的第一条拦路虎.很多同学表示JavaScript涵盖的知识点太多太复杂.应用也是五花八门完全摸不着头脑.但只要我们一点一点由基础到进 ...

最新文章

  1. Python多线程——LOCK锁
  2. 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”);...
  3. 【数据结构与算法】之深入解析“最长有效括号”的求解思路与算法示例
  4. IT Monitor
  5. 为什么TCP连接要三次握手?
  6. itext jsp页面打印
  7. 服务器jbod扩展_三分钟了解服务器关键技术——RAID
  8. dd命令打包多个文件_Android shell 下dd命令浅析
  9. 运动模糊matlab图像处理,“数字图像处理-MATLAB”运动模糊图像复原.ppt
  10. 数字孪生智慧高铁研究案例
  11. Android实战简易教程五(ListView用法研究)
  12. 【VBS脚本】VBS复制Excel工作簿
  13. Linux---查看内存型号
  14. Squitd代理服务器安装
  15. Sony Ericsson W550c
  16. robocup初学(第一篇)
  17. 虚拟化(一):虚拟化及vmware产品介绍
  18. torch编程-加载预训练权重-模型冻结-解耦-梯度不反传
  19. JAVA使用easyExcel
  20. 《中华人民共和国网络安全法》

热门文章

  1. IP地址的三种表示格式 及 在Socket编程中的应用
  2. 为 Android 编译 MuPDF 查看器
  3. 深入了解什么是Docker
  4. LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复
  5. Nginx 反向代理、动静分离、负载均衡及配置实例
  6. 你知道这 8 种 SQL 错误用法吗?
  7. 又是金三银四,都是Java程序员,你为什么面试总拿不到高薪?
  8. Union-find
  9. 微信小游戏背后的技术优化
  10. 万字长文带你深入浅出 Golang Runtime