首頁 web前端 js教程 SeaJS 與 RequireJS 的差異對比_AngularJS

SeaJS 與 RequireJS 的差異對比_AngularJS

May 16, 2016 pm 04:28 PM
差異

「歷史不是過去,歷史正在上演。隨著W3C 等規範、以及瀏覽器的飛速發展,前端的模組化開發會逐步成為基礎設施。一切終究都會成為歷史,未來會更好。」——引用玉伯原文最後一段話,我個人也非常認同。既然談到了“未來”,我個人認為:前端 js 模組如果繼續發展,其模組格式很可能會成為未來 WEB 一種標準規範,產生多種實現方式。就好比 JSON 格式一樣,最後成為標準、被瀏覽器原生實作。

誰更有能成為未來的非同步模組標準? SeaJS 遵循 CMD 規範,RequireJS 遵循 AMD 規範,先從這兩種不同的格式說起。

CMD

CMD 模組依賴聲明方式:

複製程式碼 程式碼如下:

define(function (require) {
    var a = require('./a');
    var b = require('./b');
    // more code ..
})

CMD 依賴是就近聲明,透過內部require方法進行聲明。但因為是非同步模組,載入器需要事先載入這些模組,所以模組真正使用前需要擷取模組裡面所有的依賴。無論是加載器即時提取,還是透過自動化工具預先提取,CMD 的這種依賴聲明格式只能透過靜態分析方式實現,這也正是 CMD 的弊端所在。

CMD 規範的弊端

不能直接壓縮:require是局部變量,意味著不能直接的通過壓縮工具進行壓縮,若require這個變數被替換,載入器與自動化工具將無法取得模組的依賴。
模組書寫有額外約定:路徑參數不能進行字串運算,不能使用變數代替,否則載入器與自動化工具無法正確擷取路徑。
規範之外的約定意味著更多的文件說明,除非它們也是規範中的一部分。

註:SeaJS 靜態分析實作是把模組包toString()後使用正規提取require部分得到依賴的模組路徑。

AMD

AMD 模組依賴聲明方式:

複製程式碼 程式碼如下:

define(['./a', './b'], function (a, b) {
    // more code ..
})

AMD 的依賴是提前聲明。這種優勢的好處是依賴無需通過靜態分析,無論是加載器還是自動化工具都可以很直接的獲取到依賴,規範的定義可以更簡單,意味著可能產生更強大的實現,這對加載器與自動化分析工具都是有利的。

AMD 規範的弊端

依賴提前聲明在程式碼書寫上不是那麼友善。
模組內部與 NodeJS 的 Modules 有一定的差異。
關於第二點的問題需要特別說明。其實無論是 CMD 或 AMD 的非同步模組,都無法與同步模組規範保持一致(NodeJS 的 Modules),只有誰比誰更像同步模組而已。 AMD 要轉換為同步模組,除了去掉define函數的包裹外,需要在頭部使用require把依賴聲明好,而 CMD 只需要去掉define函數的包裹即可。

總結

從規範上來說,AMD 更加簡單且嚴謹,適用性更廣,而在 RequireJS 強力的推動下,在國外幾乎成了事實上的非同步模組標準,各大類庫也相繼支持 AMD 規範。

但從 SeaJS 與 CMD 來說,也做了很多好東西:

1、相對自然的依賴宣告風格
2.小​​而美的內部實現
3.貼心的外圍功能設計
4.更好的中文社群支持

如果有可能,我希望看到 SeaJS 也支持 AMD,與前端社區大環境保持一致最終幸福的是廣大開發者。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SpringBoot與SpringMVC的比較及差別分析 SpringBoot與SpringMVC的比較及差別分析 Dec 29, 2023 am 11:02 AM

SpringBoot和SpringMVC都是Java開發中常用的框架,但它們之間有一些明顯的差異。本文將探究這兩個框架的特點和用途,並對它們的差異進行比較。首先,我們來了解一下SpringBoot。 SpringBoot是由Pivotal團隊開發的,它旨在簡化基於Spring框架的應用程式的建立和部署。它提供了一種快速、輕量級的方式來建立獨立的、可執行

深度比較:天璣8200與驍龍的差異分析 深度比較:天璣8200與驍龍的差異分析 Mar 22, 2024 pm 12:48 PM

在行動網路時代,手機的效能一直是用戶關注的焦點之一。而作為手機晶片市場領頭羊的聯發科和高通,其旗下的晶片也備受消費者矚目。近期,聯發科推出了天璣8200晶片,而高通則有其代表性的驍龍系列晶片。那麼,這兩款晶片之間究竟存在著怎樣的差異呢?本文將對天璣8200與驍龍進行深度的比較分析。首先,從製程製程來看,天璣8200採用了最新的6nm製程工藝,而高通驍龍的一些

Oracle11g和Oracle12c版本差異解讀 Oracle11g和Oracle12c版本差異解讀 Mar 07, 2024 pm 02:30 PM

Oracle資料庫一直是企業級資料庫管理系統的領導者之一,其不斷更新迭代的版本也引起了廣泛關注。其中,Oracle11g和Oracle12c兩個版本作為比較代表性的版本,有著許多的差異。本文將針對Oracle11g和Oracle12c的一些重要差異做一些解讀,並附上具體的程式碼範例,幫助讀者更深入地了解這兩個版本的差異。一、架構差異Oracle1

Git 還是版本控制? PHP 專案管理中的關鍵區別 Git 還是版本控制? PHP 專案管理中的關鍵區別 Mar 10, 2024 pm 01:04 PM

版本控制:基礎版本控制是一種軟體開發實踐,允許團隊追蹤程式碼庫中的變更。它提供了一個中央儲存庫,其中包含專案文件的所有歷史版本。這使開發人員能夠輕鬆回滾錯誤,查看不同版本的差異,並協調對程式碼庫的並發變更。 Git:分散式版本控制系統git是一種分散式版本控制系統(DVCS),這表示每個開發人員的電腦都擁有整個程式碼庫的完整副本。這消除了對中心伺服器的依賴,提高了團隊的靈活性和協作能力。 Git允許開發人員建立和管理分支,追蹤程式碼庫的歷史,並與其他開發者共用變更。 Git與版本控制:關鍵區別分散式vs集

深入探討Golang中堆疊的差異 深入探討Golang中堆疊的差異 Mar 13, 2024 pm 05:15 PM

Golang是一門廣受歡迎的程式語言,其在並發程式設計方面擁有獨特的設計理念。在Golang中,堆疊(heap和stack)的管理是一項非常重要的任務,對於理解Golang程式的運作機制至關重要。本文將深入探討Golang中堆疊的差異,並透過具體的程式碼範例來展示它們之間的差異和聯繫。在電腦科學中,堆疊是兩種常見的記憶體分配方式,它們在記憶體管理和資料儲存上有著不同

比較Go語言和Java的差異:語法和程式模式的分析 比較Go語言和Java的差異:語法和程式模式的分析 Feb 01, 2024 am 08:40 AM

Go語言與Java的差異:語法與程式設計模型Go語言和Java都是現代流行的程式語言,具有許多相似之處,但也有許多差異。這些差異主要體現在文法和程式設計模型上。語法1.變數宣告Go語言中,變數宣告需要使用var關鍵字,而Java中則不需要。例如:varaintinta;2.類型推斷Go語言支援類型推斷,即編譯器可以自動推斷變數的類型。例如:a:=10編

品質評測:一加與榮耀的差異 品質評測:一加與榮耀的差異 Mar 23, 2024 pm 12:03 PM

品質評測:一加與榮耀的差異在當今手機市場競爭激烈的環境下,消費者對於手機的品質要求越來越高。在眾多手機品牌中,一加和榮耀作為備受關注的品牌之一,備受消費者青睞。兩者在市場上擁有一定的話語權,但在品質上究竟有何差異?本文將從手機品質、效能、使用者體驗等方面對一加與榮耀進行比較評測,以幫助消費者更好地選擇適合自己的手機品牌。一、外觀設計一加手機一直以簡潔、大氣的

對比Tomcat和Nginx的不同之處和比較分析 對比Tomcat和Nginx的不同之處和比較分析 Dec 28, 2023 am 09:47 AM

Tomcat和Nginx的差異及比較隨著網路的快速發展,網路應用的需求也越來越高,同時Web伺服器也得到了越來越多的關注。 Tomcat和Nginx作為兩個廣泛使用的Web伺服器,在不同的場景下展現出各自的優勢和特點。本文將從不同的角度來對Tomcat和Nginx進行比較,探討它們的差異。一、背景在深入比較Tomcat和Nginx之前,我們先來了解它們的

See all articles