2012-01-21

CommonJS 和 RequireJS 有什麼不同 ?

阿舍自從開始接觸 node.js 之後才發現,Javascript 的發展真是出乎阿舍的預料哩 ! 各種用途和應用的東西還真是不少哩 ! 而今天,阿舍要提到的這個 CommonJS 呢,是為了讓 Javascript 的應用可以走出瀏覽器,讓 Javascritp 能夠適用於開發一般應用程式的而定義的 Javascript API 標準、規範和建議,目前,已經有許多的 JavaScript 引擎都有實作 CommonJS 的定義 API,像阿舍正在學的 node.js 就是其中的一個哩 !

Credit : webification.com

而 RequireJS 不像 CommonJS 那麼的偉大,RequireJS 就如它的名字一樣,主要是提供 JavaScript 載入模組的功能 ( 註: Javascrip 用 Require 指令來載入引用模組 ),也就是所謂的 Module Loader,RequireJS 提供一種稱為「非同步模組定義 (Asynchronous Module Definition)」( 簡稱為 AMD ) 的模組載入方式,這種方式可以同時間讀取所有引用和相依的模組,不像 CommonJS 所定義的規範是以同步的方式一個一個檔案的載入方式,確保所有相依模組的檔案都載入後才執行。

在網路的執行環境上,在瀏覽器上要等到所有的 Javascriot 模組都載入完成後才執行的話,如果網路的狀況不佳,就可能會發生網頁開很慢的問題,尤其是,有採用像 JQuery 和 Dojo 這樣的 Javascript Library 的時候,相關的檔案下載不下來,就會跑不出東西來哩 ! 而在這種狀況下,採用 AMD 的 Module Loader 相對的,就比較有優勢,所以,才會說 CommonJS 的 Module Loader 不適合用來開發瀏覽器的程式哩 !

以上是阿舍目前對 AMD 的瞭解,改天試試後,如果有什麼不同,阿舍會再來更新的,另外,阿舍有看一下採用 RequireJS 的寫法,發現,要改用 AMD 的方式來載入模組的話,寫程式的方式也改變,並不是只要改採用 RequireJS 就可以了,如果有興趣的話,可以看一下阿舍下面列的參考資料哩 !

參考資料
amdjs
RequireJS
CommonJS
The power of the Asynchronous Module Definition
Unified codebases with Dojo, Node, and RequireJS: the holy grail of DRY code
Asynchronous CommonJS Modules for the Browser (and Introducing Transporter)

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁