zoukankan      html  css  js  c++  java
  • amd和cmd区别

    AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。

    CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。

    对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。

    不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。

    CMD 推崇 as lazy as possible.

    CMD 推崇依赖就近,AMD 推崇依赖前置。

    // CMD
    define(function(require, exports, module) {
    var a = require('./a')
    a.doSomething()
    // 此处略去 100 行
    var b = require('./b') // 依赖可以就近书写
    b.doSomething()
    // ... 
    })

    // AMD 默认推荐的是

    require.config({
      paths: {
        'jquery': '../vendor/jquery-1.12.0.min',
        'jquery-ui':'../assets/js/jquery-ui.min',
        'd3': "../vendor/d3.v3",
        // 'dagre-d3': "../vendor/dagre-d3",
        'dagre-d3': "../assets/compress/dagre-d3.min",
        'interact': "../vendor/interact.min",
        'mousetrap': "../vendor/mousetrap.min",
        'sinbad': '../sinbad/js/sinbad.min',
        'bootstrap':'../assets/js/bootstrap',
        'ace':'../assets/js/ace', //ace框架
        //'aceCode':'../vendor/editor/ace', //ace代码插件
        'aceCode':'../assets/compress/ace-code.min',
        'aceElements':'../assets/js/ace-elements',
        'slimscroll':'../vendor/transparent-dark/lib/slimScroll/jquery.slimscroll.min', //light blue scroll插件
        'modify':'../statics/flow/modify',
      },
      shim: {
        'jquery-ui': {
          deps: ['jquery']
        },
        'bootstrap': {
          deps: ['jquery'],
          exports: 'bootstrap'
        },
        'editor': {
          deps: ['aceCode']
        }
      }
    });
    上面requirejs === require
    ///
    require([
      'd3',
      'property',
      'sinbad',
      'editor',
      'jquery-ui',
      'bootstrap',
      'modify',
      'aceCode',
      'link-rules',
    ], function (d3, property, sinbad,editor, scroll) {
      console.log(1)
      require('jquery-ui');
    });
    上面requirejs === require === define

    shim,是依赖,{deps:"xxx"}


    define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
    a.doSomething()
    b.doSomething()
    })

    AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。

    CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹。

    1. 定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。Sea.js 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 环境中。
    2. 遵循的规范不同。RequireJS 遵循 AMD(异步模块定义)规范,Sea.js 遵循 CMD (通用模块定义)规范。规范的不同,导致了两者 API 不同。Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。
    3. 推广理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。Sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。
    4. 对开发调试的支持有差异。Sea.js 非常关注代码的开发调试,有 nocache、debug 等用于调试的插件。RequireJS 无这方面的明显支持。
    5. 插件机制不同。RequireJS 采取的是在源码中预留接口的形式,插件类型比较单一。Sea.js 采取的是通用事件机制,插件类型更丰富。
  • 相关阅读:
    laravel5.1框架简介及安装
    数据结构之队列定义及基本操作实现
    PHP之闭包详解
    数据结构之栈定义及基本操作实现
    PHP之MVC微型框架简单搭建
    对web应用中单一入口模式的理解及php实现
    php面向对象编程学习之高级特性
    数据结构之链表定义及基本操作实现
    数据结构之数组定义及基本操作
    感悟
  • 原文地址:https://www.cnblogs.com/MDGE/p/11038746.html
Copyright © 2011-2022 走看看