commonjs缺點(ES6 Modules 相對於 CommonJS 的優勢是什麼?)

本文目錄一覽:

在node環境下怎麼使用commonjs模塊去使用require方法

最初的 CommonJS 小組 的參與者們決定弄一份於時下的 JavaScript 編程語言有效,但不必束縛於瀏覽器 JS 環境的限制,的模塊規範。開始的願景是在瀏覽器里使用一些權宜之計, 並希望能藉此影響瀏覽器廠商,促使它們為這種模塊規範的原生支持提供解決方案。權宜之計有:

要麼使用一個服務來轉譯 CJS 模塊成瀏覽器中可用的代碼

要麼使用 XMLHttpRequest(XHR)以文本形式加載模塊,再在瀏覽器中做文本變換、解析的工作

CJS 模塊規範僅允許每文件一個模塊,所以為優化、打包,可使用某種“轉換格式”將多個模塊合併到單個文件。

通過這種方式,CommonJS 小組搞定了依賴引用、如何處理循環依賴,以及如何獲得當前模塊的某些屬性等問題。 但是,他們並沒能接納瀏覽器環境里不可改變、並且仍將影響模塊設計的某些特性:

網絡加載

異步繼承 … 這也同時意味着他們為了實現這個規範,將負擔更多地放到了 Web 開發者身上,而這些權宜之計也使調試變得更麻煩。 調試 eval 的代碼,或者調試多個文件合併之後的單個文件,都有實際使用時的壞處。 這些缺點或許在未來某天會被瀏覽器調試工具解決掉,但結論仍然是:在最普遍的 JS 環境,瀏覽器中,使用 CommonJS 模塊並不是最好的辦法。

webpack 常用loader、Plugins和Mode配置及解析規則

css-loader 用於加載 .css 文件,並且轉換成commonjs 對象;

style-loader 將樣式通過 style 標籤插入到 head 中。

loader 的調用順序是鏈式調用的,是從右到左的,所以在配置 rules 的時候,要注意兩者的先後順序

加載 less 和 less-loader

同 css 解析規則一樣,需要將 less-loader 放置到 use 最右面

進行圖片、字體等的打包,還可設置較小資源的自動base64

優點:可以減少一次http請求

缺點:會使打包文件變大,延長首次加載白屏時間

requirejs 支持 commonjs規範嗎

commonjs是一套javascript標準,requireJS和seajs都有用到這個標準

當然主要還是requireJS的AMD標準

其實要說優缺點可能就是文件大小了,同步加載,異步的並發加載兩個都支持,nodejs一樣能跑,如果中文社區的活躍度的話建議seajs吧,玉伯有時候會在github上面答疑解惑的

javascript同步和異步的區別與實現方式

javascript語言是單線程機制。所謂單線程就是按次序執行,執行完一個任務再執行下一個。

對於瀏覽器來說,也就是無法在渲染頁面的同時執行代碼。

單線程機制的優點在於實現起來較為簡單,運行環境相對簡單。缺點在於,如果中間有任務需要響應時間過長,經常會導致

頁面加載錯誤或者瀏覽器無響應的狀況。這就是所謂的“同步模式”,程序執行順序與任務排列順序一致。對於瀏覽器來說,

同步模式效率較低,耗時長的任務都應該使用異步模式;而在服務器端,異步模式則是唯一的模式,如果採用同步模式個人認為

服務器很快就會出現12306在高峰期的表現。。。。

異步模式的四種方式:

1.回調函數callback

所謂回調函數,就是將函數作為參數傳到需要回調的函數內部再執行。

典型的例子就是發送ajax請求。例如:

$.ajax({

async: false,

cache: false,

dataType: ‘json’,

url: “url”,

success: function(data) {

console.log(‘success’);

},

error: function(data) {

console.log(‘error’);

}

})

當發送ajax請求後,等待回應的過程不會堵塞程序運行,耗時的操作相當於延後執行。

回調函數的優點在於簡單,容易理解,但是可讀性較差,耦合度較高,不易於維護。

2.事件驅動

javascript可以稱之為是基於對象的語言,而基於對象的基本特徵就是事件驅動(Event-Driven)。

事件驅動,指的是由鼠標和熱鍵的動作引發的一連串的程序操作。

例如,為頁面上的某個

$(‘#btn’).onclick(function(){

console.log(‘click button’);

});

綁定事件相當於在元素上進行監聽,是否執行註冊的事件代碼取決於事件是否發生。

優點在於容易理解,一個元素上可以綁定多個事件,有利於實現模塊化;但是缺點在於稱為事件驅動的模型後,流程不清晰。

3.發布/訂閱

發布訂閱模式(publish-subscribe pattern)又稱為觀察者模式(Observer pattern)。

該模式中,有兩類對象:觀察者和目標對象。目標對象中存在着一份觀察者的列表,當目標對象

的狀態發生改變時,主動通知觀察者,從而建立一種發布/訂閱的關係。

jquery有相關的插件,在這不是重點不細說了。。。。回頭寫個實現貼上來

4.promise模式

promise對象是CommonJS工作組提供的一種規範,用於異步編程的統一接口。

promise對象通常實現一種then的方法,用來在註冊狀態發生改變時作為對應的回調函數。

promise模式在任何時刻都處於以下三種狀態之一:未完成(unfulfilled)、已完成(resolved)和拒絕(rejected)。以CommonJS

Promise/A

標準為例,promise對象上的then方法負責添加針對已完成和拒絕狀態下的處理函數。then方法會返回另一個promise對象,以便於形成promise管道,這種返回promise對象的方式能夠支持開發人員把異步操作串聯起來,如then(resolvedHandler,

rejectedHandler); 。resolvedHandler

回調函數在promise對象進入完成狀態時會觸發,並傳遞結果;rejectedHandler函數會在拒絕狀態下調用。

Jquery在1.5的版本中引入了一個新的概念叫Deferred,就是CommonJS promise A標準的一種衍生。可以在jQuery中創建

$.Deferref的對象。同時也對發送ajax請求以及數據類型有了新的修改,參考JQuery API。

除了以上四種,javascript中還可以利用各種函數模擬異步方式,更有詭異的諸如用同步調用異步的case

只能用team里同事形容java和javascript的一句話作為結尾:

“寫java像在高速路上開車,寫javascript像在草原上開車”————-以此來形容javascript這種無類型的語言有多自由

but,如果草原上都是坑。

javascript模塊化是什麼及其優缺點介紹

如今backbone、emberjs、spinejs、batmanjs

等MVC框架侵襲而來。CommonJS、AMD、NodeJS、RequireJS、SeaJS、curljs等模塊化的JavaScript撲面而

來。web前端已經演變成大前端,web前端的發展速度之快。

1)我們來看看什麼是模塊化?

模塊化是一種將系統分離成獨立功能部分的方法,可將系統分割成獨立的功能部分,嚴格定義模塊接口、模塊間具有透明性。javascript中的模塊在一些C、PHP、java中比較常見:

c中使用include 包含.h文件;php中使用require_once包含.php文件

java使用import導入包

此中都有模塊化的思想。

2)模塊化的優缺點:

a優點:

可維護性

1.靈活架構,焦點分離

2.方便模塊間組合、分解

3.方便單個模塊功能調試、升級

4.多人協作互不干擾

可測試性

1.可分單元測試

b缺點:

性能損耗

1.系統分層,調用鏈會很長

2.模塊間通信,模塊間發送消息會很耗性能

3)最近的項目中也有用到模塊化,

使用的是seajs,但是當引用到jquery,jquery easyui/或者jquery

UI組件時,有可能會用到很多jquery插件,那這樣要是實現一個很複雜的交互時,模塊間的依賴會很多,使用define()方法引入模塊會很多,不知

有么有什麼好的方法?

4)附:

內聚度

內聚度指模塊內部實現,它是信息隱藏和局部化概念的自然擴展,它標誌着一個模塊內部各成分彼此結合的緊密程度。好處也很明顯,當把相關的任務分組後去閱讀就容易多了。 設計時應該儘可能的提高模塊內聚度,從而獲得較高的模塊獨立性。

耦合度

耦合度則是指模塊之間的關聯程度的度量。耦合度取決於模塊之間接口的複雜性,進入或調用模塊的位置等。與內聚度相反,在設計時應盡量追求鬆散耦合的系統。

與AMD和CommonJS相比,UMD有什麼缺點

linux技巧-使用screen管理你的遠程會話當我們用ssh或是telent遠程登錄到linux服務器上,運行一些長時間的任務,必須等待任務完成才能離開該界面。在此期間不能關閉窗口或者斷開連接。否則這個任務的進程就會別殺掉,一切半途而廢,需要重新執行該任務。 如何解決這個問題? 首先來理解幾個概念: 進程組:一個或多個進程的集合,每個進程組有唯一一個進程組ID,即進程組長進程的ID 會話期:一個或多個進程組的集合,有唯一一個會話期首進程,會話期ID為首進程的ID 會話期可以有一個單獨的控制終端,與控制終端連接的會話期首進程叫控制進程,當前與終端交互的進程為前台進程。 掛斷信號默認的動作為終止程序 當終端借口檢測到網絡連接斷開,將掛斷信號發送給控制進程 如果會話期首選進程終止,則該信號發送到該會話期前台進程組 一個進程退出導致一個孤兒進程組中產生時,如果任意一個孤兒進程組處於stop狀態,發送SIGHUP和SIGCONT信號到該進程組的所有進程。 因此,當網絡斷開或終端窗口關閉後,控制進程收到SIGHUP信號退出,會導致該會話期內其他進程退出 方法一:nohup #nohup command 方法二:screen creen 是一個可以在多個進程間多路復用一個物理終端的窗口管理器。 使用方法: (1),[xuefeng@ku6]# screen screen將創建一個執行shell的全屏窗口,你可以執行任意shell,就像在ssh窗口一樣。 (2),[xuefeng@ku6]#screen vi abc screen創建一個執行vi abc的單獨窗口會話,退出vi 將退出該窗口 (3),還可以在已有screen會話窗口中創建新的窗口,在當前sceen窗口中鍵入C-a c,即Ctrl+a,再按下c鍵。重新控制各窗口中運行的程序。 例如:在一個screen窗口中編輯vi /tmp/abc,之後需要作另外的事情,那麼可以在screen窗口鍵入C-a d,screen會提示暫時中斷會話。繼續前一個會話,#screen -ls 查看會話編號。重新連接screen -r 編號。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/182147.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-24 06:18
下一篇 2024-11-24 06:18

相關推薦

發表回復

登錄後才能評論