Backbone.js 的最佳應用場景有哪些?#zhihu#

hevily發表於2013-12-14

這段時間,想再次瞭解下backbone js的相關知識,就把一些認為不錯的拿過來了;

新版的有道筆記 Web 版(note.youdao.com)也使用了 Backbone。就像其他答案回答的,Backbone 最適合的應用場景是單頁面應用,並且頁面上有大量資料模型,模型之間需要進行復雜的資訊溝通。Backbone 在這種場景下,能很好的實現模組間鬆耦合和事件驅動。 其他適用產品還有微博,網易微博的前端設計也是和 Backbone 類似的一個結構。

Backbone 的優點和一些經驗 Tip:

  • View 的劃分將頁面上的檢視元素解耦,粒度細化。View 間通過事件和 Model 通訊,避免了 DOM 事件的濫用。
  • Model 和 Restful 的通訊方式對於後端人員非常友好。
  • MVC 架構清晰, 我有個常年寫 Java 沒寫過 JS 的同事看 Backbone 很快就瞭解了整體設計,雖然這時候他還是不會寫 JS。
  • Collection/Model 抽象了以前雜亂的 AJAX 請求,CRUD 請求變得非常非常方便。
  • 強烈建議 View -> Model 單向依賴,世界會美好很多。
  • 配上一個模組化載入器例如 SeaJS 會很爽。

Backbone 的一些缺點,或者說一些尚未實現的 Feature:

  • Model 層比較簡單,如果要支援 One-To-One 或者 One-To-Many 等複雜資料關係時有些力不從心。還有 一個 Model 只能屬於一個 Collection 這個設計,頁面複雜的時候會很受侷限。例如這個問題: zhihu.com/question/1984 (補充:Backbone.Relations 外掛是這個問題的一個解決方案github.com/PaulUithol/B By zjhiphop)
  • 同上,Model 只有基本的 CRUD 操作,不能很好的擴充套件,Backbone.sync 方法寫的不太靈活,要想擴充套件就得重寫 sync 方法。
  • View 層沒有很強的 Page 管理機制,比如通過 URL 切換改變整個頁面時,頁面上尚存的 View 如何處理?直接銷燬的話,是否要銷燬關聯的 Model、Collection?Cache 住?如何管理 Cache?
  • 記憶體管理需要比較小心,缺乏機制避免建立重複 Model。
  • extends override 父類方法的時候得寫一串的 SuperClass.prototype.someMethod.apply 什麼的,就不能實現個 _super 方法麼……
  • 對除錯非常不友好。
  • 作者有程式碼潔癖(也是加分項),this.$el 大家呼喚了這麼久才加上,估計今生也看不到 this._super。
  • 更新慢。

總體來說 Backbone 還很輕,框架很漂亮但是有些細節還比較粗糙。用之前要做好對 Backbone 進行大量擴充套件甚至 Hack 的準備。

作者:pw

相關文章