摘要:模塊化總結(jié)最近重新復習的模塊化的相關(guān)知識,總結(jié)一下,僅供自己理解和大家參考。模塊化的優(yōu)點可維護性根據(jù)定義,每個模塊都是獨立的。良好設計的模塊會盡量與外部的代碼撇清關(guān)系,以便于獨立對其進行改進和維護。
模塊化總結(jié)
模塊化的優(yōu)點最近重新復習的模塊化的相關(guān)知識,總結(jié)一下,僅供自己理解和大家參考。
可維護性:根據(jù)定義,每個模塊都是獨立的。良好設計的模塊會盡量與外部的代碼撇清關(guān)系,以便于獨立對其進行改進和維護。維護一個獨立的模塊比起一團凌亂的代碼來說要輕松很多。
命名空間:在JavaScript中,最高級別的函數(shù)外定義的變量都是全局變量(這意味著所有人都可以訪問到它們)。也正因如此,當一些無關(guān)的代碼碰巧使用到同名變量的時候,我們就會遇到“命名空間污染”的問題。
模塊化規(guī)范commonJS現(xiàn)在比較流行的模塊化規(guī)范主要有commomJS,AMD, CMD ,ES6 ,現(xiàn)在逐一說明一下.
commonJS 是服務器端的模塊化規(guī)范,node.js就是參照commonJS規(guī)范實現(xiàn)的。commonJS中有一個全局的方法require() 用來加載模塊。
function myModule(){ this.hello = function(){ return "hello"; } this.goodbye = function(){ return "gooodbye!"; } } module.exports = myModile;
其實module變量代表當前模塊.
這樣就可以在其他模塊中使用這個模塊
var myModule = require("myModule"); var myModuleInstance = new myModule(); myModuleInstance.hello(); myModuleInstance.goodbye();
關(guān)于commonJS的更多,見CommonJS規(guī)范
AMDcommonJS 定義模塊的方式和引入模塊的方式還是比較簡單的,但不適合瀏覽器端,因為commonJS是同步加載的。而AMD是異步加載的,下面我們來說說AMD的書寫規(guī)范。
通過define()來定義模塊
//main.js define(["mylib"],function(mylib){ function foo(){ mylib.doSomething(); } return { foo:foo; } })
define的第一個參數(shù)是依賴的模塊,必須是一個數(shù)組。通過return來暴露接口。
通過require()來加載模塊,模塊的名字默認為模塊加載器請求的指定腳本的名字。
require(["main"],function(main){ alert(main.foo()); })
require.js就是根據(jù)AMD規(guī)范實現(xiàn)的,優(yōu)點為:
實現(xiàn)js文件的異步加載,避免網(wǎng)頁失去響應;
管理模塊之間的依賴性,便于代碼的編寫和維護。
CMDCMD是國內(nèi)玉伯大神在開發(fā)SeaJS的時候提出來的,也是異步模塊定義。
CMD和AMD的區(qū)別:
CMD相當于按需加載,定義一個模塊的時候不需要立即制定依賴模塊,在需要的時候require就可以了,比較方便;而AMD則相反,定義模塊的時候需要制定依賴模塊,并以形參的方式引入回調(diào)函數(shù)中。
// CMD define(function(require, exports, module) { var a = require("./a") a.doSomething() // 此處略去 100 行 var b = require("./b") // 依賴可以就近書寫 b.doSomething() // ... })
// AMD 默認推薦的是 define(["./a", "./b"], function(a, b) { // 依賴必須一開始就寫好 a.doSomething() // 此處略去 100 行 b.doSomething() ... })
關(guān)于 require.js 和 sea.js 的區(qū)別詳見SeaJS與RequireJS最大的區(qū)別
ES6ES6在語言規(guī)格的層面上,實現(xiàn)了模塊功能,而且實現(xiàn)得相當簡單,完全可以取代現(xiàn)有的CommonJS和AMD規(guī)范,成為瀏覽器和服務器通用的模塊解決方案。
ES6模塊主要有兩個功能:export和import
export用于對外輸出本模塊(一個文件可以理解為一個模塊)變量的接口
import用于在一個模塊中加載另一個含有export接口的模塊。
// a.js var sex="boy"; var echo=function(value){ console.log(value) } export {sex,echo}
// b.js //通過import獲取a.js文件的內(nèi)部變量,{}括號內(nèi)的變量來自于a.js文件export出的變量標識符。 import {sex,echo} from "./a.js" console.log(sex) // boy echo(sex) // boy
各種模塊化方案優(yōu)缺點對比:
模塊化方案 | 優(yōu)點 | 缺點 |
---|---|---|
commonJS | 復用性強 ,使用簡單 ,實現(xiàn)簡單 有不少可以拿來即用的模塊,生態(tài)不錯 |
同步加載不適合瀏覽器 瀏覽器的請求都是異步加載 不能并行加載多個模塊。 |
AMD | 異步加載適合瀏覽器 可并行加載多個模塊 |
模塊定義方式不優(yōu)雅,不符合標準模塊化 |
ES6 | 可靜態(tài)分析,提前編譯 面向未來的標準 |
瀏覽器原生兼容性差,所以一般都編譯成ES5 目前可以拿來即用的模塊少,生態(tài)差 |
對比學習,效果更好哦~~~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/83843.html
摘要:我是這一期的主持人黃子毅本期精讀的文章是。模塊化需要保證全局變量盡量干凈,目前為止的模塊化方案都沒有很好的做到這一點。精讀本次提出獨到觀點的同學有流形,黃子毅,蘇里約,,楊森,淡蒼,留影,精讀由此歸納。 這次是前端精讀期刊與大家第一次正式碰面,我們每周會精讀并分析若干篇精品好文,試圖討論出結(jié)論性觀點。沒錯,我們試圖通過觀點的碰撞,爭做無主觀精品好文的意見領(lǐng)袖。 我是這一期的主持人 ——...
摘要:本書概括以軟件系統(tǒng)為例,重點講解了應用架構(gòu)中的物理設計問題,即如何將軟件系統(tǒng)拆分為模塊化系統(tǒng)。容器獨立模塊不依賴于具體容器,采用輕量級容器,如獨立部署模塊可獨立部署可用性模式發(fā)布接口暴露外部配置使用獨立的配置文件用于不同的上下文。 本文為讀書筆記,對書中內(nèi)容進行重點概括,并將書中的模塊化結(jié)合微服務、Java9 Jigsaw談談理解。 本書概括 以Java軟件系統(tǒng)為例,重點講解了應用架構(gòu)...
摘要:來源于阿賢博客模塊化今天給大家寫一篇關(guān)于前端模塊化開發(fā)知識點。前端模塊化開發(fā)那點歷史模塊化是指在解決某個復雜混雜問題時,依照一種分類的思維把問題進行系統(tǒng)性的分解以之處理。 來源于:阿賢博客 javascript模塊化 今天給大家寫一篇關(guān)于前端模塊化開發(fā)知識點。 前端模塊化開發(fā)那點歷史 模塊化: 是指在解決某個復雜、混雜問題時,依照一種分類的思維把問題進行系統(tǒng)性的分解以之處理。模塊...
摘要:模塊化數(shù)據(jù)中心供應商聲稱他們的預制可重復的解決方案解決了這個問題,因為他們可以迅速支持增加負載和業(yè)務需求。施耐德電氣日前為他們的模塊化數(shù)據(jù)中心產(chǎn)品線發(fā)布了款不同的參考設計。對于IT技術(shù)的發(fā)展,或許有很多技術(shù)帶來的是管理模式上的改變,有些帶來的是直接效率的提升,模塊化這個概念就是如此,模塊化近幾年不光被應用在了很多硬件產(chǎn)品上,對于數(shù)據(jù)中心來說,模塊化的應用所帶來的是數(shù)據(jù)中心產(chǎn)業(yè)質(zhì)的飛躍。其實模...
摘要:一類是集裝箱數(shù)據(jù)中心,這個模塊化數(shù)據(jù)中心是將所有的風火水電布線全在一個標準貨柜內(nèi)部完成,形成一個可以移動的數(shù)據(jù)中心,本來集裝箱數(shù)據(jù)中心主要用于臨時搭建的環(huán)境,但正好符合模塊化設計理念,被數(shù)據(jù)中心引入進來,在一些大型數(shù)據(jù)中心里有部署。數(shù)據(jù)中心引入模塊化設計,目的也一樣,要實現(xiàn)數(shù)據(jù)中心業(yè)務快速部署、應用靈活,提供標準化接口,主要有三類應用。模塊化指的是解決一個復雜問題時,自頂向下逐層把系統(tǒng)劃分成...
摘要:規(guī)范則是非同步加載模塊,允許指定回調(diào)函數(shù),可以實現(xiàn)異步加載依賴模塊,并且會提前加載由于主要用于服務器編程,模塊文件一般都已經(jīng)存在于本地硬盤,所以加載起來比較快,不用考慮非同步加載的方式,所以規(guī)范比較適用。 JS模塊化 模塊化的理解 什么是模塊? 將一個復雜的程序依據(jù)一定的規(guī)則(規(guī)范)封裝成幾個塊(文件), 并進行組合在一起; 塊的內(nèi)部數(shù)據(jù)/實現(xiàn)是私有的, 只是向外部暴露一些接口(...
閱讀 3287·2021-11-24 09:38
閱讀 2161·2021-11-23 09:51
閱讀 1753·2021-10-13 09:39
閱讀 2628·2021-09-23 11:53
閱讀 1410·2021-09-02 15:40
閱讀 3662·2019-08-30 15:54
閱讀 1138·2019-08-30 13:04
閱讀 2569·2019-08-30 11:01