本文目錄一覽:
- 1、在node環境下怎麼使用commonjs模塊去使用require方法
- 2、webpack 常用loader、Plugins和Mode配置及解析規則
- 3、requirejs 支持 commonjs規範嗎
- 4、javascript同步和非同步的區別與實現方式
- 5、javascript模塊化是什麼及其優缺點介紹
- 6、與AMD和CommonJS相比,UMD有什麼缺點
在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-tw/n/182147.html