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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AMD和CMD出生的背景和它们解决的问题

發布時間:2024/2/28 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AMD和CMD出生的背景和它们解决的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是一篇純故事沒有代碼的博客,畢竟ES6官方標準規定了模塊化,這兩位民間出生的規范就差點意思了,所以也不再詳細介紹它倆了。

我們知道CommonJS的工作原理是:當使用require(模塊路徑)導入一個模塊時,node會做以下兩件事(不考慮模塊緩存):

1)通過模塊路徑找到本機文件,并讀取文件內容

2)將文件中的代碼放入到一個函數環境中執行,并將執行后module.exports的值作為require函數的返回結果

正是這兩個步驟,使得CommonJS在node端可以良好的被支持。可以認為,CommonJS是同步完成的,必須要等到加載完文件并執行代碼后才能繼續向后執行

而當瀏覽器遇到CommonJS時,我們想要把CommonJS放到瀏覽器端時,就出現了一些需要解決的問題

1)瀏覽器要加載JS文件,需要從遠程服務器讀取,而網絡傳輸的效率遠遠低于node環境中讀取本地文件的效率。由于CommonJS是同步的,這會極大的降低運行能力

2)如果需要讀取JS文件內容并把它放入到一個環境中執行,需要瀏覽器廠商的支持,可是瀏覽器廠商不愿意提供支持,最大原因是CommonJS屬于社區標準,并非官方標準

基于以上兩點原因,瀏覽器無法支持模塊化,但是這并不代表模塊化不能在瀏覽器中實現。要在瀏覽器中實現模塊化,只要能解決上面兩個問題就行了,解決辦法很簡單:

1)需要遠程加載的JS采用異步處理,加載完成后執行回調函數,即可解決時間浪費的問題?

2)將編寫的模塊直接放到函數中,即可解決模塊代碼需要放置在函數中的問題

基于這種簡單有效的思路,出現了AMD和CMD規范,有效的解決了瀏覽器模塊化的問題

二.AMD

AMD(Asynchronous Module Definition),即異步模塊加載機制。在AMD中,導入和導出模塊代碼,都必須放置在define函數中。

require.js實現了AMD規范

三.CMD

CMD(Common Module Definition),公共模塊定義規范。在CMD中,導入和導出的代碼模塊,都必須放置在define函數中

sea.js實現了CMD規范。

總結

以上是生活随笔為你收集整理的AMD和CMD出生的背景和它们解决的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。