国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JavaScript寶座:七大框架論劍

開發 前端
在使用方法上,這些框架很多地方都是一致的(模型-視圖-*架構、聲明綁定,等等——詳見下文) ,因此從某種意義講,無論你選擇哪一個,都能得到同樣的好處。

一周前,Throne of JS 大會在多倫多召開,這應該是我參加過的最有料也最不一樣的一次大會。大會官網如是說:

加載整個頁面,然后再“漸進增強”以添加動態行為,這種構建 Web 應用的方式已經不夠好了。要想讓應用加載快,反應靈敏,而且又引領潮流,必須徹底檢討你的開發手段。

這次大會邀請了七大 JavaScript 框架/庫的創建人,他們濟濟一堂,面對面交流各自的技術理念。所謂七大框架/庫分別是:AngularJS、Backbone、Batman、CanJS、Ember、Meteor、Knockout、Spine。

聲明:我在會上講 Knockout,因此我的觀點顯然不是中立的。在這篇文章中,我重點討論這些創建人的思路和技術理念,盡量不提我贊成或反對什么。沒錯,是 8 個框架,不是 7 個。但到底怎么回事兒,會議主辦方也沒有明確給我們解釋過……

JavaScript 寶座:七大框架論劍

文章可長啦,先概述一下:

對許多 Web 開發人員來說,要構建富 Web 應用,使用客戶端框架是理所當然的。如果你什么框架也沒用,那要么你不是在做應用,要么就會錯過很多好東西。

在使用方法上,這些框架很多地方都是一致的(模型-視圖-*架構、聲明綁定,等等——詳見下文) ,因此從某種意義講,無論你選擇哪一個,都能得到同樣的好處。

理念上還是有不少差異,特別是在對框架和庫的看法上,分歧格外大。你的選擇會深刻影響你的架構。

會議本身活潑,新穎,技術小組之間有很多交流和對話。我希望能有更多類似的會議。

技術:共識與分歧

隨著每個 SPA(Single Page Application,單頁應用)技術的逐一展示,一些相當明顯的相似性和差異性浮出了水面。

共識:漸進增強不能建立真正的應用

各技術門派一致認為,真正的 JavaScript 應用必須有適當的數據模型,并具備客戶端渲染能力,而絕不僅僅是服務器處理數據再加上一些 Ajax 和 jQuery 代碼那么簡單。

用 Backbone 創建人 Jeremy Ashkenas 的話說:“現如今,你說‘單頁應用’,都跟說‘不用馬拉的車’差不多了”(意思是,早已經沒那么新鮮了)。

“不用馬拉的車”(horseless carriage)是汽車剛剛發明的時候,人們對它的稱呼。——譯者注

共識:模型-視圖-某某

所有技術門派都堅持模型-視圖分離。有的強調 MVC(Model View Control),有的提到 MVVM(Model View ViewModel),甚至有人拒絕明確說出第三個詞兒(只提模型、視圖,然后加上讓它們協調運作的東西)。對各門派而言,最終結果其實是相似的。

共識:推崇數據綁定

除了 Backbone 和 Spine 之外,其他框架都在自己的視圖里內置了聲明數據綁定的機制(Backbone 的設計理念強調讓用戶“自選視圖技術”)。

共識:IE6已死

在小組討論中,大多數框架的創建者說,他們對 IE 瀏覽器的支持只限于7+(事實上,Ember 和 AngularJS 的起點是 IE8,Batman 需要 ES5“墊片”才能在 IE9 之前的 IE 版本中使用)。這也是大勢所趨:jQuery 2 已經不打算支持 IE9 以下的舊版本 IE 了。

只有 Backbone 和 Knockout 還堅定支持 IE6+(我不清楚 Backbone 的內部實現,但 Knockout 會把 IE6/7那些令人抓狂的渲染及事件方面的怪異行為屏蔽掉)。

共識:許可和源代碼控制

大家都使用 MIT 許可,并且托管在 GitHub 上。

分歧:庫與框架

這是目前最大的分歧。下表對 JavaScript 庫和框架進行了歸類:

*括號中的數字是最近某個時間點 GitHub 上的關注者數量,粗略地代表各自的影響力。

什么意思呢?

JavaScript 庫,插到既有架構中,補充特定功能。

JavaScript 框架,提供一個架構(文件結構啊,等等),你必須遵守它,只要你遵守,那剩下的就全都是處理通用需求了。

目前來看,鼓吹框架模型最賣力氣的是 Ember,其創建人 Yehuda Katz 之前是(理念相似的)Rails 和 SproutCore 項目的開發者。他的觀點是,缺少任何組件都不夠給力,都不能說是真正在推動技術進步。相反的觀點說,庫的目的更明確,因而更容易掌握、采用、定制,也有助于把項目風險降到最低,畢竟你的架構不會嚴重依賴任何一個外部項目。根據我參加對話的情況看,現場觀眾也分成了兩派,有支持框架的,也有支持庫的。

請注意,AngularJS 可以說是介于庫和框架之間一種形態:它不要求開發時遵守特定的文件組織方式(與庫類似),但在運行時,它提供一個“應用生命周期”,可以對號入座地把代碼安排進去(與框架類似)。之所以把它歸入框架之列,是因為 AngularJS 團隊樂于接受這個說法。

分歧:靈活,還是整合

每個技術門派都有不同程度的強制性規定:

不難想見,只要某個庫在某方面是開放的,他們的人就會強調只有這樣才能從總體上確保跟第三方庫兼容。同樣,顯而易見的反對意見則是,只有內置才能保證無縫整合。再次,根據我參加的對話,現場觀眾也各持己見,說什么的都有,基本上可以看出每個人對其他技術組合的了解程度。

Ember 的 Tom Dale 說:“我們加入了很多魔法,但都是有用的魔法,換句話說,它們可以分解為常規的操作原語。”

分歧:基于字符串的模板與基于 DOM 的模板

(請參考上面的表格。)對基于字符串的模板,大家幾乎都選擇 Handlebars.js 作為模板引擎,它儼然成了這個領域的霸主,當然 CanJS 用的是 EJS。對基于字符串的模板,支持的人認為“它更快”(不一定),而且“理論上,服務器也可以處理它”(也不一定,因為前提必須是在服務器上運行所有模型代碼,而實踐中根本沒人那么做)。

而基于 DOM 的模板呢,意味著純粹通過在實際標記中綁定來控制流程(each、if,等等),且不依賴任何外部模板庫。支持的聲音有“它更快”(不一定),另外“代碼易讀、易寫,且標記與模板之間沒有隔閡,CSS 如何與之交互也一目了然。”

在我看來,最有吸引力的說法來自 AngularJS 那幫家伙,他們認為在不久的將來,基于 DOM 的模板會得到瀏覽器原生支持。所以我們最好現在就用,從而可以輕松應對未來。AngularJS 來自 Google,所以他們在開發 Chromium 時會考慮這一點,而且也會說服標準主體接納這個建議。

分歧:服務器中立到什么程度

Batman 和 Meteor 明顯依賴服務器:Batman 是為 Rails 設計的,而 Meteor 本身就是服務器。其他大多數都追求服務器中立。但實際上,Ember 的架構、強制性規定,以及某些工具都傾向于 Rails 開發者。當然,Ember 絕對也能跟其他服務器技術搭配,只不過眼下還需要較多手工配置。

#p#

技術門派概覽

以下是所有 JavaScript 庫/框架的基本技術細節。

Backbone

Who: Jeremy Ashkenas 和 DocumentCloud。

What: 

用 JavaScript 實現模型-視圖,MIT 許可。

只有一個文件,1000行代碼,在所有庫中最小!

功能極其專一,只提供 REST 可持久模型及簡單路由和回調(以便你知道何時渲染視圖,但視圖渲染機制由你自己選擇)。

名氣最大,很多大牌站點都在用(也許是因為它最小,容易部署)

Why:

非常小,使用它之前,你完全可以通讀并理解它的源代碼。

不會影響你的服務器架構或文件組織方式。可以在頁面的某一部分內運行——不需要控制整個頁面。

Jeremy 好像進入了一種禪宗所謂的入定的狀態,對一切都能坦然接受。他就像一個大人,看著一群孩子在那里辯論。

Where: GitHub 及 自有站點

When: 至今已誕生近兩年了。

Meteor

Who: Meteor 開發團隊(他們剛募集到 1120 萬美元投資,因此可以全職開發)。

What:

前瞻性極強的一個框架,想不出有誰那么激進過(也許 Derby 算一個)。

將一個服務器端運行時環境(用 Node+Mongo 搭建)和一個客戶端運行時環境銜接起來,讓你的代碼在兩端都能運行,還包含數據庫。利用 WebSockets 實現所有客戶端和服務器之間的同步。

在修改代碼時就“實時部署”——客戶端運行時可以即時更新而不丟失狀態。

可以看看這個視頻,對它的認識就會更全面。

跟會上與我有過交流的所有人一樣,我也衷心希望這個框架獲得成功——Web 開發就需要這種激進的改革才能真正進步。

Why: 你實在覺得做常規 Web 開發太無聊了,想找點刺激。

Where: GitHub 和 自有站點

When: 誕生時間不長;除了其核心團隊在用,不知道還有沒有其他站點實際在用 Meteor。不過,這個團隊真是在嚴肅地做著一件前無古人的事。

Ember

Who: Yehuda Katz (之前開發過 jQuery 和 Rails)、Ember 團隊和 Yehuda 的公司 Tilde

What:

構建“超級 Web 應用”所需的一切,MIT 許可。

功能最多,體積最大。

融入了很多設計理念,涉及如何分解并對頁面進行層次控制,以及如何利用一個狀態機驅動的系統聯結各個層次。

正在開發一個功能非常完善的數據訪問庫(Ember.Data)。

要在運行時控制整個頁面,因此不適合開發大頁面上的“富應用區”。

對文件、URL 等都有相當嚴格的一套約束,不過要是不喜歡,你可以重寫,只要你知道怎么做就 OK。

設計靈感來自 Rails 和 Cocoa。

工具:為 Rails 提供項目模板(但如果你手工編寫代碼,也可以使用其他服務器端平臺)。

Why: 常見的問題應該有通用的解決方案——Ember 提供了所有通用解決方案。

Where: GitHub 和 自有站點

When: 尚未發布1.0版,但也快了。然后,API 基本就能穩定下來。

AngularJS

Who: Google(他們內部在使用)。

What:

用 JavaScript 實現模型-視圖-其他,MIT 許可。

基于 DOM 的模板,具備可觀察能力、聲明綁定機制,還有準 MVVM 式的代碼風格(他們自己說是 Model-View-Whatever)

內置基本 URL 路由和數據持久化能力

工具:附帶一個 Chrome 調試器插件,讓你在調試的時候能夠查看模型;還附帶一個 Jasmine 測試框架。

Why:

從概念上講,他們說這個框架相當于一個“填料層”,蓋在當前瀏覽器上,以實現未來的瀏覽器將可能原生具備的能力(即聲明綁定和可觀察能力)。因此,我們現在就應該著手這么來寫代碼了。

對服務器架構或文件組織方式沒有影響。可以用在頁面的某一小部分中——不需要控制整個頁面。

Where: GitHub 和 自有站點

When: 成品級框架,Google 已經搞出來有一段時間了。

Knockout

Who: Knockout 團隊和社區(核心團隊目前有三個人,包括我)。

What:

用 JavaScript 實現模型-視圖-視圖模型(MVVM,Model-View-ViewModel),MIT 許可。

功能集中在富用戶界面元素:基于 DOM 的聲明綁定模板,可觀察的模型加自動依賴檢測。

沒有限定 URL 路由或數據訪問——可組合任意第三方庫(例如,用 Sammy.js 做路由,用純 Ajax 實現存儲)。

在降低使用門檻方面下了很大工夫,提供詳盡的文檔和交互式示例

Why:

只做好一件事(UI),向后兼容到 IE6。

對服務器架構或文件組織方式沒有影響。可以用在頁面的某一小部分中——不需要控制整個頁面。

Where: GitHub 和 自有站點

When: 到現在已經正式發布近兩年了。

Spine

Who: Alex MacCaw。

What:

用 JavaScript 實現 MVC,MIT 許可證。

由最早為O’Reilly 一本書寫的示例代碼發展而來,已成為一個 OSS(Open Source Software,開源軟件)項目。

是 Backbone 的一個衍生版(看名字就知道)。Backbone 和 Spine 都是“脊椎”的意思。——譯者注

Why: 你喜歡 Backbone,但又想要點不一樣的東西

Where: GitHub 和 自有站點

When: v1.0.0已經發布。

Batman

Who: Shopify (一家電子商務平臺公司)的團隊。

What:

在 JavaScript 中實現 MVC,幾乎是專門為 Rails+CoffeeScript 開發者定制的,MIT 許可。

是所有框架中強制性規定最多的。你必須遵守其約定(例如,怎么組織文件和 URL)。否則,就像他們幻燈片中說的,“你還是用其他框架吧”。

非常完善的框架,具有相當豐富的模型、視圖和控制器,還有路由。當然,還有可觀察機制。

基于 DOM 的模板。

Why: 如果你使用 Rails 和 CoffeeScript,你找到親人了。

Where: GitHub 和 自有站點

When: 當前版本 0.9,幾個月內將發布1.0版。

CanJS

Who: Bitovi(一家 JavaScript 咨詢/培訓公司)的團隊。

What:

用 JavaScript 實現 MVC,MIT 許可。

REST 可持久模型、基本的路由、基于字符串的模板。

知名度不高(我也是上周才聽說它的),但它的前身卻是原來的 JavaScriptMVC 項目

Why: 旨在集上述各技術門派之所長,提供與它們類似的功能,同時又保持體積小巧。

Where: GitHub 和 自有站點

When: 1.0 版已經發布了。

總結

如果你正在考慮選型的問題,想知道上面這些框架/庫中的哪一個最適合你的新項目,那我建議你重點關注以下兩點。

功能范圍。你想讓這個框架或庫為你做多少事兒?你的項目是從頭做起,因而需要一個能貫穿始終的完整的各項功能齊備的架構嗎?或者,你其實更喜歡自己來挑選模式和庫?對不同的項目,不同的團隊,任何選擇都有價值,都是正確的。

設計美學。你看過它們的代碼嗎,用沒用過自己選擇的框架構建出了一些小巧的應用?你喜歡這樣做嗎?不要只看它們的說明或者功能列表就作出選擇:那些信息有價值,但不全面。打個比方,如果你置自己主觀的編碼經驗于不顧,那就像在選擇小說時只看它有幾章幾節,或者在找對象時只看其簡歷或個人描述。

盡管存在分歧,但我認為所有技術門派有一個重大的共性:它們都踐行了模型與視圖分離的思想。而這個思想早在 Web 誕生之前就已存在,到現在差不多有 20 年歷史了。這么說吧,就算你只做一個基本的 Web 應用的 UI,在客戶端應用這一思想也永遠是正確的。

原文鏈接:Rich JavaScript Applications – the Seven Frameworks

原文鏈接:http://www.ituring.com.cn/article/8108

李松峰的博客:http://www.cn-cuckoo.com/

【編輯推薦】

 

責任編輯:張偉 來源: 李松峰的博客
相關推薦

2012-08-06 10:34:26

JavaScript框架

2016-12-02 09:01:53

頂級JavaScript框架

2017-02-28 08:59:03

2019-09-18 18:56:34

JavascriptOOP前端

2009-12-01 14:35:06

Linux忠告

2018-09-10 06:00:12

2017-07-05 14:21:30

框架TensorFlowTheano

2025-10-27 13:08:03

2020-02-25 15:04:48

深度學習編程人工智能

2017-03-01 13:36:41

TensorFlowTheano框架

2018-04-11 14:13:29

物聯網信息技術互聯網

2020-12-22 09:55:55

IT首席信息官CIO

2015-07-08 08:51:11

SDN

2022-05-23 08:09:42

物聯網IOT

2015-03-20 15:34:35

戴爾云計算DELL

2020-12-18 10:35:27

IT技術領導者

2010-08-09 14:37:00

認證證書

2021-05-07 09:00:00

JavaScript開發代碼

2018-03-13 07:05:10

區塊鏈中心化比特幣

2009-08-04 11:36:55

點贊
收藏

51CTO技術棧公眾號

日韩中文字幕| 国产在线欧美日韩| julia一区二区中文久久94| 成人精品网站在线观看| 69日小视频在线观看| 日韩电影不卡一区| 日韩久久久久久| 色婷婷精品国产一区二区三区| 蜜桃专区在线| 91麻豆国产福利在线观看| 欧美大肥婆大肥bbbbb| 亚洲欧洲日本韩国| 亚洲国产91精品在线观看| 国产精品麻豆免费版| 91国产一区| 亚洲综合在线中文字幕| 一道本一区二区三区 | 国产精品久久久久久模特| 久久精品亚洲精品国产欧美kt∨ | 好吊色欧美一区二区三区| 伊人精品综合| 成人频在线观看| 免费观看日韩毛片| 国产精品久久久久久久久久免费看| 深夜福利一区二区| 美女写真理伦片在线看| 日韩精品在线观| 亚洲一一在线| 国产激情视频一区二区在线观看| 久久网站热最新地址| 毛片在线播放a| 亚洲色图自拍| 色与欲影视天天看综合网| 欧美性猛交一区二区三区精品| 欧美日韩国产在线一区| 在线免费av网站| 成人免费精品视频| 无码aⅴ精品一区二区三区浪潮 | 久热精品在线| 国产在线88av| 高清日韩av| 一区二区免费在线观看| 91av免费看| 91精品国产电影| 日韩中文视频免费在线观看| 欧美精品高清视频| 亚洲色图都市小说| 91在线你懂得| 日本aⅴ亚洲精品中文乱码| 一区二区三区四区在线观看国产日韩| 蜜臀av国内免费精品久久久夜夜| 日本男人操女人| 国内自拍欧美激情| 欧美探花视频资源| 国产福利一区二区| 免费观看在线色综合| 久久亚洲精选| 毛片av一区二区| 日韩激情在线观看| 久久成人国产| 三级不卡在线观看| 91超碰在线电影| 日韩国产高清污视频在线观看| 欧美手机在线视频| 欧美伊人久久大香线蕉综合69 | 小嫩嫩12欧美| 天堂久久一区| 日韩三级av| 国产亚洲综合色| 一区二区三区四区精品在线视频| 中文字幕视频一区| 亚洲精品日韩一| 国产目拍亚洲精品99久久精品| 成人在线视频免费观看| 最新超碰在线| 免费看黄视频网站| 成r视频免费观看在线播放| 色av男人的天堂免费在线| 国产视频二区在线观看| www免费在线观看| 日本三级视频在线观看| 欧美调教sm| 久久91导航| 欧美黄色a视频| 成人一级视频| 日韩有码中文字幕在线| 日韩av综合中文字幕| 色婷婷久久久亚洲一区二区三区 | 欧洲激情综合| 亚洲精品国产偷自在线观看| 久久久一二三| av一二三不卡影片| 美腿丝袜亚洲综合| 伊人久久大香线蕉| www 久久久| 日韩电影毛片| 成人动漫视频在线观看| 性欧美69xoxoxoxo| 国产一区欧美日韩| 久久精品视频在线免费观看| 亚洲男人的天堂av| 国产午夜精品麻豆| 欧美成人三级视频网站| 国产成人午夜视频网址| 欧美一区二区视频17c | 亚洲摸下面视频| 亚洲一区第一页| 99理论电影网| 日韩精品中午字幕| 国产午夜精品福利| 欧美一二三四区在线| 色综合久久中文字幕综合网小说| 毛片不卡一区二区| 精品国产自在精品国产浪潮| 日韩亚洲第一页| 成人疯狂猛交xxx| 国产精品伊人日日| 亚洲天堂网一区| 在线网址91| 精品人人人人| 精品一区二区三区久久| 亚洲一二三区在线观看| www.日韩.com| 欧美日本亚洲| 成人欧美一区二区三区视频| 伊人再见免费在线观看高清版 | 一区二区三区av电影| 欧美在线视频不卡| 番号集在线观看| 动漫h在线观看| 国产黄色一级电影| 日本a级黄色| 日韩制服一区| www.成人精品免费网站青椒| 亚洲综合网中心| 国产69精品久久久久孕妇| 18视频在线观看网站| 日韩在线你懂的| 久久久久久久久久久99999| 日韩精品影音先锋| 精品一区2区三区| 日韩肉感妇bbwbbwbbw| 日韩免费福利视频| 夜夜嗨一区二区| 日韩精品一区二区三区四区| 91九色视频在线| 成本人h片动漫网站在线观看| 欧美成人精品一级| 99久精品国产| 欧美喷潮久久久xxxxx| 国产精品视频yy9099| heyzo在线观看| 九九热爱视频精品视频| 国产精品久久三| 美女少妇精品视频| 日韩欧美在线一区二区| 一本久道综合色婷婷五月| 在线观看免费视频一区二区三区| 91成人精品观看| aaa欧美日韩| 亚洲第一二三四五区| 亚洲欧美日产图| 色呦呦在线免费观看| 国产精品国产三级国产在线观看| 亚洲一区二区视频在线| 婷婷在线视频| 一区二区三区国产盗摄| 精品国产一区二区精华| 本网站久久精品| 26uuu久久天堂性欧美| 俺去了亚洲欧美日韩| 国产黄色片免费在线观看| 一区二区三区在线资源| 午夜激情久久久| 成人免费视频网站| 理论片午夜视频在线观看| 99久久99久久免费精品蜜臀| 91国产美女在线观看| 六十路在线观看| 欧美日韩日本国产亚洲在线 | 波多野结衣综合网| www.久久爱.com| 亚洲mv在线观看| 欧美 日韩 国产一区| 色婷婷精品视频| 亚洲人成在线观看一区二区| 欧美一区二区三区四区在线| 一区二区免费电影| 免费看av成人| 国产精品v片在线观看不卡| 亚洲日本欧美| 日本a级片久久久| 精品无码国模私拍视频| 国产综合色在线视频区| 日韩 欧美 高清| 久久精品网站免费观看| 日本成本人片免费观看| 欧美性猛交xxxx富婆| 678在线观看视频| 欧美一区二三区|