日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CommonJs, AMD/RequireJs,CMD/seajs

發(fā)布時(shí)間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CommonJs, AMD/RequireJs,CMD/seajs 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JavaSript模塊化

在了解AMD,CMD規(guī)范前,還是需要先來(lái)簡(jiǎn)單地了解下什么是模塊化,模塊化開(kāi)發(fā)?
模塊化是指在解決某一個(gè)復(fù)雜問(wèn)題或者一系列的雜糅問(wèn)題時(shí),依照一種分類的思維把問(wèn)題進(jìn)行系統(tǒng)性的分解以之處理。
模塊化是一種處理復(fù)雜系統(tǒng)分解為代碼結(jié)構(gòu)更合理,可維護(hù)性更高的可管理的模塊的方式。
可以想象一個(gè)巨大的系統(tǒng)代碼,被整合優(yōu)化分割成邏輯性很強(qiáng)的模塊時(shí),對(duì)于軟件是一種何等意義的存在。對(duì)于軟件行業(yè)來(lái)說(shuō):解耦軟件系統(tǒng)的復(fù)雜性,使得不管多么大的系統(tǒng),也可以將管理,開(kāi)發(fā),維護(hù)變得“有理可循”。
那么在理想狀態(tài)下我們只需要完成自己部分的核心業(yè)務(wù)邏輯代碼,其他方面的依賴可以通過(guò)直接加載被人已經(jīng)寫(xiě)好模塊進(jìn)行使用即可。
首先,既然是模塊化設(shè)計(jì),那么作為一個(gè)模塊化系統(tǒng)所必須的能力:

  • 定義封裝的模塊。
  • 定義新模塊對(duì)其他模塊的依賴。
  • 可對(duì)其他模塊的引入支持。
  • commonjs

    commonjs起初是服務(wù)端模塊的規(guī)范,nodejs就是采用這個(gè)規(guī)范。
    CommonJs原來(lái)是叫ServerJs,從名字可以看出是專攻服務(wù)端的,為了統(tǒng)一前后端而改名CommonJs。它的規(guī)范是一個(gè)單獨(dú)的文件就是一個(gè)模塊。加載模塊使用require方法,該方法讀取文件并執(zhí)行,最后導(dǎo)出一個(gè)exports對(duì)象
    例如:
    // foo.js

    //私有變量 var test = 123; function foobar(){this.foo = function(){}this.bar = function(){} } var foo = new foobar() //exports對(duì)象上的方法和變量是公有的。 exports.foo = foo;

    // require 方法默認(rèn)讀取js文件,所以可以省略js后綴

    var test = require('./foo').foo; test.bar();

    commonjs是同步加載模塊,所以加載完成后才能執(zhí)行后面的操作。服務(wù)端require一個(gè)模塊,加載的模塊文件一般都是已經(jīng)存在本地硬盤(pán),所以加載起來(lái)比較快,消耗的時(shí)間可以忽略,就沒(méi)有必要采用異步方式的來(lái)加載。但是如果我們考慮到瀏覽器端的話,就肯定知道,同步加載,阻塞頁(yè)面的渲染,造成頁(yè)面白屏,或者卡死等現(xiàn)象,對(duì)于用戶體驗(yàn)肯定是不友好的。

    另外,資源的加載方式與服務(wù)端完全不同,在瀏覽器端,需要從服務(wù)端來(lái)下載這個(gè)文件,然后運(yùn)行里面的代碼才能得到API,需要花費(fèi)一個(gè)http請(qǐng)求,也就是說(shuō),require后面的一行代碼,需要資源請(qǐng)求完成才能執(zhí)行。由于瀏覽器端是以插入<script>標(biāo)簽的形式來(lái)加載資源的(ajax方式不行,有跨域問(wèn)題),沒(méi)辦法讓代碼同步執(zhí)行,所以像commonjs那樣的寫(xiě)法會(huì)直接報(bào)錯(cuò)。所以就有了AMD,CMD。

    AMD(Asynchromous Module Definition)

    字面意思”異步模塊定義”,就是一種規(guī)范。依賴前置(依賴在使用之前都必須提前加載)。requirejs可以簡(jiǎn)單理解為AMD規(guī)范的一種實(shí)現(xiàn)。
    AMD寫(xiě)模塊的api如下:
    define(id,dependencies,factory);
    //通過(guò)數(shù)組引入依賴,回調(diào)函數(shù)通過(guò)形參傳入依賴

    // 依賴一開(kāi)始就寫(xiě)好 define([‘someModule1’,’someModule2’],function(someModule1,someModule2){ function foo(){ //something someModule1.test(); } return {foo:foo}; });

    CMD(Common Module Definition)

    CMD規(guī)范是國(guó)內(nèi)發(fā)展出來(lái)的,CMD是SeaJS在推廣過(guò)程中對(duì)模塊定義的規(guī)范化產(chǎn)出。
    CMD推崇:

    • 一個(gè)文件一個(gè)模塊,所以經(jīng)常就用文件名作為模塊id
    • 依賴就近,所以一般不在define的參數(shù)中寫(xiě)依賴,在factory中寫(xiě)
      factory有三個(gè)參數(shù):function(require, exports, module)

    require是 factory 函數(shù)的第一個(gè)參數(shù)
    require(id) 是一個(gè)方法,接受 模塊標(biāo)識(shí) 作為唯一參數(shù),用來(lái)獲取其他模塊提供的接口
    exports 是一個(gè)對(duì)象,用來(lái)向外提供模塊接口
    module 是一個(gè)對(duì)象,上面存儲(chǔ)了與當(dāng)前模塊相關(guān)聯(lián)的一些屬性和方法

    //CMD

    // 定義模塊 myModule.js define(function(require, exports, module) {//依賴可以就近書(shū)寫(xiě) var $ = require('jquery.js') $('div').addClass('active'); }); // seajs.use實(shí)現(xiàn)模塊系統(tǒng)的加載啟動(dòng) 加載模塊 seajs.use(['myModule.js'], function(my){ });

    AMD,CMD區(qū)別

    最明顯的區(qū)別就是對(duì)依賴模塊的執(zhí)行時(shí)機(jī)處理不同

    AMD推崇依賴前置,在定義模塊的時(shí)候就要聲明其依賴的模塊,并且所有的依賴模塊都是先執(zhí)行。
    對(duì)應(yīng)的require.js在js程序中的依賴模塊的執(zhí)行順序和書(shū)寫(xiě)順序不一定一致,哪個(gè)先下載下來(lái),哪個(gè)先執(zhí)行。所有模塊都加載執(zhí)行完后會(huì)進(jìn)入require的回調(diào)函數(shù),執(zhí)行主邏輯。
    CMD推崇就近依賴,是一種按需加載的模式,定義一個(gè)模塊的時(shí)候不需要立即制定模塊之間的依賴模塊,只有在用到某個(gè)模塊的時(shí)候再去require
    對(duì)應(yīng)的seajs在js程序中的執(zhí)行順序是按照順序結(jié)構(gòu)的,當(dāng)遇到require某模塊的時(shí)候再去調(diào)用某些模塊。

    共同點(diǎn):
    都是異步加載模塊。

    RequireJS和SeaJS與CommonJS的比較(嚴(yán)格意義上前兩者與后者不該放在一起比較,因?yàn)榍皟烧呤且?guī)范的具體實(shí)現(xiàn),而后者是一種規(guī)范)

    總結(jié)

    以上是生活随笔為你收集整理的CommonJs, AMD/RequireJs,CMD/seajs的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲AV成人无码精品久久盆瓶 | 美女100%露胸无遮挡 | 亚洲精品在线观看免费 | 色天堂视频 | 精品黄色在线观看 | 国产成人精品一区二三区 | 护士人妻hd中文字幕 | 99国产一区| 999精品国产| 亚洲午夜无码久久 | 欧美在线视频网站 | 黄色的网站免费观看 | 91成人精品一区在线播放 | 一级黄网站 | 免费在线视频一区二区 | av中文资源在线 | 天天射夜夜骑 | 96日本xxxxxⅹxxx17 | 欧美日韩在线免费观看 | 成人xx视频 | 香蕉视频在线观看网站 | 91精品国产aⅴ一区二区 | 国产a√精品区二区三区四区 | 国产乱淫精品一区二区三区毛片 | 一区二区欧美在线 | 床戏高潮做进去大尺度视频网站 | 亚洲天堂v | 日韩欧美资源 | 韩日a级片| 亚洲国产欧美日韩在线 | 岛国精品资源网站 | 国产视频一区二区在线观看 | 欧美亚洲天堂 | 在线永久看片免费的视频 | 黄色片网站在线 | 国产免费91 | 国产最爽的乱淫视频国语对白 | 欧洲性猛交 | 伦在线 | 天天综合日日夜夜 | 中文在线日韩 | 关秀媚三级 | 亚洲AV无码一区二区三区性 | 冲田杏梨 在线 | 日本www在线观看 | 农村少妇无套内谢粗又长 | 玖玖视频网 | 红桃视频在线播放 | 日本在线资源 | 国产又粗又猛又爽又黄91精品 | 色香天天 | 亚洲va在线∨a天堂va欧美va | 精品国产一区二区三区久久久蜜月 | 亚洲国产成人在线视频 | 99国产精品久久 | 放荡的少妇2欧美版 | 97人人精品 | 成人av图片 | 深田咏美在线x99av | 久久国产精品免费视频 | 女人被男人躁得好爽免费视频 | 国产精品国产三级国产aⅴ浪潮 | xxxxx在线观看| 九九热在线免费视频 | 日本福利在线观看 | 欧美亚洲在线视频 | 99欧美精品| 无码国产精品久久一区免费 | 99久久精品免费看国产 | 性歌舞团一区二区三区视频 | 色一区二区三区 | 1000部av| 在线观看视频色 | 樱花av在线 | 日韩激情综合网 | 国精产品一二三区精华液 | 伊人福利在线 | 天天操天天弄 | 国产精品久久久久久影视 | 日韩成人一区二区 | 69精品丰满人妻无码视频a片 | 美女三级黄色 | 亚洲电影在线观看 | 黄色三级网站在线观看 | 午夜色网 | 农民人伦一区二区三区 | 午夜尤物 | 伊久久| 高清免费视频日本 | 美女在线网站 | 久久国产主播 | 亚洲美女激情视频 | 综合久 | 欧美国产在线视频 | 精品久久久久久久久久久久久久久久久久 | 中文字幕一区二区三区四区 | 91插插插插插插插 | 你懂的视频在线播放 | 亚洲影院中文字幕 |