zoukankan      html  css  js  c++  java
  • Commonjs

     早就 听说 有 用于 本地编程的javascript  作为本地编程语言的这种特殊应用形式,函数式语言
    由于其固有的易于并行计算的特性

    Javascript 是一个强大面向对象语言官方 javascript 标准 定义的API 是为了构建基于浏览器的应用程序。然而
    并没有 定于一个用于更广泛的应用程序的标准库

    CommonJs API 定义 很多普通应用程序(主要 指非浏览器的应用)使用的API,从而填补了这个空白。它的终极目标是提供一个类似Python
    ,Ruby和Java标准库。这样的话,开发者可以使用 CommonJS API 编写应用程序,然后 这些 应用 可以 运行在不同的Javascript
    解释器 和不同的主机环境中。在兼容Commonjs的系统中,你可以实用Javascript程序开发:
    在 学习 webpack 的时候 了解到
    官方Javascript 标准定义的API 是为了构建基于浏览器的应用程序,但是并没有定义一个用于更广泛
    的应用程序的标准库。 Commonjs APIs定义了很多普通应用程序(主要指非浏览器的应用)使用的API,从而填补了这个空白
    开发者可以使用Commonjs API编写应用程序这些应用可以运行在不同的JavaScript解析器和不同的主机环境中
    CommonJs是一种 规范,Nodejs 便是这种规范的体现 webpack也是以commonjs的形式书写。node.js
    的模块系统,就是参照 Commonjs规范实现的。
    CommonJS 中有一个全局性方法 require() 用于加载模块


    require() 方法接受一个参数,即模块的唯一ID.require根据外部模块ID,返回模块输出的API.如果
    外部模块被require的时候 还没有执行完,require至少应该返回该模块的exports
    如果必须的模块不存在 require方法应该抛出一个异常。


    每个模块中都有一个自由变量 exports,它是一个对象,模块对外输出的API就绑定在这个对象上,且exports 是模块对外输出API唯一的途径
    每个模块中都必须有一个自由变量module,它是对象,这个对象有一个id属性,表示该模块的id.是只读属性。module对象还可以 有一个 uri
    属性 表示这个模块被加载来源
    模块 id是由 “”分开的词组成,每个词必须用 驼峰式 或者是“.”".."模块ID中可以出现“.js”后缀


    var module={
    exports:{}
    };
    (function (module,exports){
    exports.multiply=function(n){return n*1000};
    }(module,module.exports))


    var module={
    exports:{}
    };
    (function (module,exports){
    exports.multiply=function(n){return n*1000};
    }(module,module.exports))

    向一个立即执行的函数中提供 module 和 exports 两个外部变量, 模块 放在立即执行函数里面
    模块的输出值放在module.exports 之中,这样就实现了模块的加载

    CommonJS/AMD/CMD的区别倒是什么?AMD/CMD/CommonJD都是模块化开发的标准,、
    目前对应的实现是RequireJS/SeaJS/nodeJS  CommonJS主要针对服务器端
    其它两个主要针对浏览器端

    AMD/CMD 虽然都是并行加载js文件 但还是有所区别 AMD是预加载 在并行加载js文件的
    同时,还会解析执行该模块(因为还需执行,所以在加载某个模块前,这个模块的依赖模块需要先加载完成)
    而cmd是懒加载 虽然会一开始就并行加载js文件 但是不会执行 而是在需要的时候才执行。


    AMD 特点是 加载快速,尤其遇到多个大文件 因为并行解析 所以同一时间可以解析多个文件
    但是由于并行加载 一步处理加载顺序不一定 可能会造成一些困扰

    cmd的特点是因为只有在使用的同时 才会解析执行 js文件 因此 每个js文件的执行
    顺序在代码中是有体现的 是可控的 缺点是 执行 等待 时间 会叠加 因为每个文件
    执行时是 同步执行(串行执行) 因此时间是所有文件解析执行时间之和 尤其在文件
    较多较大时 这种缺点 尤为明显

    服务器端 javascript应用程序
    命令行工具
    图形界面应用程序
    混合应用程序
    API层面定义
    二进制 二进制数据对象(字节数组/或字符串)
    编码 编码和字符集
    io
    fs
    系统 系统接口
    断言 测试 单元测试
    套接字
    事件队列
    gongren
    控制台

    目前js 仅仅包括基本的API,如果要作为一个 server 端的编程语言,像IO,FS,i18n,package等等特性都没有,
    Commonjs 是一个组织,它让js可以在共同的方向上做努力,来完善js 尽量 Common js现在 还没有一个正式版发布
    但是很多方向的草案的实现都已经取得很好的成果。 现在例如非常流行的Nodejs

    问题在于 commonjs 的这个 module规范设计之初是为了server端设计的,它是一个同步的模式。
    但是 这种模式 并不适合 浏览器端,如果浏览器同步模式 一个一个加载模块 那么打开将会非常的慢

  • 相关阅读:
    计算机网络--->6. 传输层(1)
    问题与解决方案
    现在的状态
    再议学习-一点新的感想
    再次剖析一下自己要做的事
    Not in a good mood.
    ASP.NET知识总结(7.状体保持)
    ASP.NET知识总结(6.一般处理程序动态处理图片(验证码、水印、缩略图))
    ASP.NET知识总结(5.文件上传 文件下载)
    ASP.NET知识总结(4.请求管道中的19个事件)
  • 原文地址:https://www.cnblogs.com/naliang/p/Commonjs.html
Copyright © 2011-2022 走看看