2 回答

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
NodeJS
定義
一個(gè)Javascript運(yùn)行環(huán)境(runtime),基于Chrome JavaScript運(yùn)行時(shí)建立的平臺(tái), 用于方便地搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。
作用
Node.js 使用事件驅(qū)動(dòng), 非阻塞I/O 模型而得以輕量和高效,非常適合在分布式設(shè)備上運(yùn)行數(shù)據(jù)密集型的實(shí)時(shí)應(yīng)用。
特點(diǎn)
事件驅(qū)動(dòng);
非阻塞I/O;
輕量、可伸縮,適于實(shí)時(shí)數(shù)據(jù)交互應(yīng)用;
單進(jìn)程,單線程;
NodeJS的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
高并發(fā)(最重要的優(yōu)點(diǎn));
適合I/O密集型應(yīng)用;
缺點(diǎn)
不適合CPU密集型應(yīng)用;
CPU密集型應(yīng)用給Node帶來的挑戰(zhàn)主要是:由于JavaScript單線程的原因,如果有長(zhǎng)時(shí)間運(yùn)行的計(jì)算(比如大循環(huán)),將會(huì)導(dǎo)致CPU時(shí)間片不能釋放,使得后續(xù)I/O無法發(fā)起;
Backbone.js
定義
為復(fù)雜Javascript應(yīng)用程序提供模型(models)、集合(collections)、視圖(views)的結(jié)構(gòu)。
作用
適合的應(yīng)用場(chǎng)景是單頁面應(yīng)用,并且頁面上有大量數(shù)據(jù)模型,模型之間需要進(jìn)行復(fù)雜的信息溝通。Backbone 在這種場(chǎng)景下,能很好的實(shí)現(xiàn)模塊間松耦合和事件驅(qū)動(dòng)。
主要組成
model:創(chuàng)建數(shù)據(jù),進(jìn)行數(shù)據(jù)驗(yàn)證,銷毀或者保存到服務(wù)器上;
collection:可以增加元素,刪除元素,獲取長(zhǎng)度,排序,比較等一系列工具方法,說白了就是一個(gè)保存 models的集合類;
view:綁定html模板,綁定界面元素的事件,初始的渲染,模型值改變后的重新渲染和界面元素的銷毀等;
Backbone.js優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
將數(shù)據(jù)和界面很好的分離開來;
將事件的綁定很好的剝離出來,便于管理和迭代;
使得Javascript程序的模塊化更加清晰、明了;
缺點(diǎn)
Model 層比較簡(jiǎn)單,如果要支持 One-To-One 或者 One-To-Many 等復(fù)雜數(shù)據(jù)關(guān)系時(shí)有些力不從心;
Model 只能屬于一個(gè) Collection 這個(gè)設(shè)計(jì),頁面復(fù)雜的時(shí)候會(huì)很受局限;
View 層沒有很強(qiáng)的 Page 管理機(jī)制;

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
Backbone 最適合的應(yīng)用場(chǎng)景是單頁面應(yīng)用,并且頁面上有大量數(shù)據(jù)模型,模型之間需要進(jìn)行復(fù)雜的信息溝通。Backbone 在這種場(chǎng)景下,能很好的實(shí)現(xiàn)模塊間松耦合和事件驅(qū)動(dòng)。 其他適用產(chǎn)品還有微博,網(wǎng)易微博的前端設(shè)計(jì)也是和 Backbone 類似的一個(gè)結(jié)構(gòu)。
Backbone 的優(yōu)點(diǎn)和一些經(jīng)驗(yàn) Tip:
View 的劃分將頁面上的視圖元素解耦,粒度細(xì)化。View 間通過事件和 Model 通訊,避免了 DOM 事件的濫用。
Model 和 Restful 的通訊方式對(duì)于后端人員非常友好。
MVC 架構(gòu)清晰, 我有個(gè)常年寫 Java 沒寫過 JS 的同事看 Backbone 很快就了解了整體設(shè)計(jì),雖然這時(shí)候他還是不會(huì)寫 JS。
Collection/Model 抽象了以前雜亂的 AJAX 請(qǐng)求,CRUD 請(qǐng)求變得非常非常方便。
強(qiáng)烈建議 View -> Model 單向依賴,世界會(huì)美好很多。
配上一個(gè)模塊化加載器例如 SeaJS 會(huì)很爽。
Backbone 的一些缺點(diǎn),或者說一些尚未實(shí)現(xiàn)的 Feature:
Model 層比較簡(jiǎn)單,如果要支持 One-To-One 或者 One-To-Many 等復(fù)雜數(shù)據(jù)關(guān)系時(shí)有些力不從心。還有 一個(gè) Model 只能屬于一個(gè) Collection 這個(gè)設(shè)計(jì),頁面復(fù)雜的時(shí)候會(huì)很受局限。
Model 只有基本的 CRUD 操作,不能很好的擴(kuò)展,Backbone.sync 方法寫的不太靈活,要想擴(kuò)展就得重寫 sync 方法。
View 層沒有很強(qiáng)的 Page 管理機(jī)制,比如通過 URL 切換改變整個(gè)頁面時(shí),頁面上尚存的 View 如何處理?直接銷毀的話,是否要銷毀關(guān)聯(lián)的 Model、Collection?Cache ?。咳绾喂芾?Cache?
內(nèi)存管理需要比較小心,缺乏機(jī)制避免創(chuàng)建重復(fù) Model。
extends override 父類方法的時(shí)候得寫一串的 SuperClass.prototype.someMethod.apply 什么的,就不能實(shí)現(xiàn)個(gè) _super 方法么……
對(duì)調(diào)試非常不友好。
作者有代碼潔癖(也是加分項(xiàng)),this.$el 大家呼喚了這么久才加上,估計(jì)今生也看不到 this._super。
更新慢。
總體來說 Backbone 還很輕,框架很漂亮但是有些細(xì)節(jié)還比較粗糙。用之前要做好對(duì) Backbone 進(jìn)行大量擴(kuò)展甚至 Hack 的準(zhǔn)備。
- 2 回答
- 0 關(guān)注
- 705 瀏覽
添加回答
舉報(bào)