博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CommonJS是如何提高javascript的生产力的
阅读量:4913 次
发布时间:2019-06-11

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

javascript最初的设计没有包括一个良好的代码组织特性,没有import也没有include,从语言上来说非常的不成熟;但是在最初的网络环境中,javascript运转的很好,因为当时的网络环境非常简单,javascript也只是当做一个内嵌在浏览器里的脚本语言,用来帮助程序员完成一些简单的任务。

但是随着硬件性能的提高,网络带宽的提升,用户可以从网络上得到的信息和资源也越来越多,作为唯一一个在网络客户端普遍的编程语言,javascript的任务也就越来越多,从最多不会超过500行的html内嵌脚本,到现在动辄上万行的大型library,如果不能很好的组织代码,是无法完成一个大型项目的。比如说大家写java,如果没有package,那么你开发的类库命名为A, 我非常想复用你写的类库,但是我的老代码里面也已经有了一个A,我要么需要去修改我的代码要么就得在你的代码上再做修改,浪费了人力。特别是,如果你开发的程序一部分是import(module),我开发的东西是include(module),import在我这是用来读取文件,我们这两部分的程序就无法互相复用,都"reinvente wheel“. javascript偏偏没有提供这种功能,于是程序员们自己在语法之上设计类一系列的common practise,也就是约定习惯。

约定习惯对于动态语言来说是非常重要的,因为动态语言不能像静态语言那样在执行前进行编译器检验,在某一刻一个对象一个模块的类型或功能是随时可能会被改变的,语言上没有提供支持的情况下,大家一起形成一个规范的习惯,则能够有效的减少在构建大型项目之间的交流工作。同时也动态语言本身也提供了非常好的灵活性,这也是为什么ror的习惯大于配置相比于spring要更加优秀的原因。

而javascript的一些大牛们也想做这样一件事,统一大家的编程习惯,使得大部分人能够一起来做一个大的项目,而你开发的代码由于遵循了一些共同的接口,我开发项目时就能直接拿来用,中间不需要一个再学习的过程。大大的提高了代码的复用, 所以现在网上如雨后春笋般的爆发出来这么多的javascript的类库,javascript忽然间变得强大了许多,不如测试我知道可以直接去用should.js,访问mongodb可以直接用mongojs。而且我知道我只需要简单的require就可以引用这些类库同时不用担心他们会”弄脏“我自己的代码。这样我再也不需要重写这些功能,也不用去费劲脑筋去整合这些类(以前如果你用了jquery的同时还向利用prototype的时候,非常头痛的要注意加载顺序,否则Date类可能是意想不到的一个lib里的)。

 

那些试图在javascript中建立起一套common practise使之成为javascript程序员都遵循的习惯的人,他们的讨论结果就是。

common js定义了一系列的标准(specification),包括console,filesystem,binary等,所以我们用到console的时候知道一定会有console.log,使用fs的时候可以fs.open,fs.write等。其中最重要的一部分就是定义module,  这个规范里定义了一个javascript的module应该遵循那些标准,这样别人遵循这样的标准就可以轻易的使用这个module。

例子:

在math.js中定义了add方法

// File: math.jsexports.add = function() {    var sum = 0, i = 0, args = arguments, l = args.length;    while (i < l) {        sum += args[i++];    }    return sum;};

 通过使用require('math'),increment.js引用了在math.js中定义的方法

// File: increment.jsvar add = require('math').add;exports.increment = function(val) {    return add(val, 1);};

 program.js中引用increment.js的方法,这里require('increment')实际上返回的是increment.js中的exports

//File: program.jsvar inc = require('increment').increment;var a = 1;inc(a); // 2

 

 

这样分布在世界上不同角落的人可以一起协作开发,你开发filesystem,我开发network,这些类库都可以一起工作了。重复劳动减少,类库越来越丰富的同时开发者的开发工作也越来越容易,因为很多东西在网上可以找到别人开发的library的支持。所以nodejs也很容易的就火了!

转载于:https://www.cnblogs.com/villadora/archive/2012/07/14/2591616.html

你可能感兴趣的文章
PLSQL连接ORACLE配置字符串简介 oracle网络配置 三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora原理解释...
查看>>
分享8年开发经验,浅谈个人发展经历,明确自己发展方向
查看>>
开发使用Node.js的一个小技巧
查看>>
Mike的农场 BZOJ4177
查看>>
IT职场人生系列
查看>>
如何指定个别属性进行transition过渡
查看>>
Python爬虫基础--分布式爬取贝壳网房屋信息(Client)
查看>>
jmeter(十二)关联之正则表达式提取器
查看>>
win7系统复制文件到u盘提示文件过大怎么办
查看>>
The path "" is not valid path to the gcc binary.
查看>>
KMP算法
查看>>
NBUT [1369] A Breaking Computer
查看>>
SonarQube4.4+Jenkins进行代码检查实例之三-单元測试分析
查看>>
【转载】appium自动化环境搭建
查看>>
jsp编译、执行过程
查看>>
NOIP2017游记
查看>>
关于js的在ie和Firefox的差别
查看>>
node-webkit无边框窗口用纯JS实现拖动改变大小
查看>>
Extjs grid combo
查看>>
获取<考试>博文密码!o(*≧▽≦)ツ
查看>>