这段时间,想再次了解下backbone js的相关知识,就把一些认为不错的拿过来了;

新版的有道笔记 Web 版(http://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 这个设计,页面复杂的时候会很受局限。例如这个问题: http://www.zhihu.com/question/19843899 (补充:Backbone.Relations 插件是这个问题的一个解决方案https://github.com/PaulUithol/Backbone-relational 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

Backbone.js 的最佳应用场景有哪些?#zhihu#的更多相关文章

  1. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

  2. 我对Backbone.js的一些认识

    backbone.js已经不是当前最流行的前端框架了,但是对于我而言,依然具有比较好的学习价值.虽然目前来说,react,vue等mvvm框架非常火热,但是感觉自身还不到去使用这种框架的层次.这些技术 ...

  3. JS编程最佳实践

    最近花了一周时间把<编写可维护的js> 阅读了一遍, 现将全书提到的JS编程最佳实践总结如下, 已追来者! 1.return 之后不可直接换行, 否则会导致ASI(自动分号插入机制)会在r ...

  4. Backbone.js中的where和findWhere

    小编的公司框架用的MVC框架依旧是Backbone.js,老大说框架不重要,重要的是框架的编程思想.于是乎,小编从头开始学习Backbone.走马观花似的看了下API文档,撸起袖子就是干.但是碰到一个 ...

  5. Backbone.js应用基础

    前言: Backbone.js是一款JavaScript MVC应用框架,强制依赖于一个实用型js库underscore.js,非强制依赖于jquery:其主要组件有模型,视图,集合,路由:与后台的交 ...

  6. Backbone.js学习之Backbone.View(视图)

    Backbone.js为复杂WEB应用程序提供模型(models).集合(collections).视图(views)的结构.其中模型用于绑定键值数据和自定义事件:集合附有可枚举函数的丰富API: 视 ...

  7. 前端mvc框架backbone.js入门[转]

    原文地址:http://www.cnblogs.com/zhjh256/p/6083618.html 关于backbone.js的优缺点,这里就不详谈了,网上关于这方面的讨论很多了,而且各种框架之所以 ...

  8. Backbone.js

    Backbone.js是一套JavaScript框架與RESTful JSON的應用程式介面.也是一套大致上符合MVC架構的編程範型.Backbone.js以輕量為特色,只需依賴一套Javascrip ...

  9. 用Backbone.js教程系列的链接

    整理了一下用Backbone.js系列教程链接. Backbone.js入门教程 用Backbone.js创建一个联系人管理系统(一) 用Backbone.js创建一个联系人管理系统(二) 用Back ...

随机推荐

  1. docker安装总结 linux红帽系列

    由于Docker限制分为两个版本CE和EE,所以之前yum里面的docker是老版本,需要先进行卸载,现在的包名叫做docker-ce yum remove docker docker-common ...

  2. iscsi服务器的搭建

    1.在您的存储服务器上,以 root 用户身份使用 yum 命令安装 scsi-t arget -ut ils 软件包. # yum install -y scsi-target-utils 2.把您 ...

  3. 升级vs17中的cordova-simulate

    visual studio 17自带的cordova-simulate有一个bug,动态添加的html代码里面如果带有header,会出现js异常导致后面js程序终止执行,这个问题已经给他们提了iss ...

  4. 表格中上移下移置顶的js操作

    <script> $(function(){  //上移  var $up = $(".up")  $up.click(function() {   var $tr = ...

  5. GPS 与 北斗 初步对比

    一.脉冲 GPS每秒可获得一次卫星星历电文,秒脉冲的误差服从正态分布,锁住的可用卫星达到四颗以上时,授时脉冲的1精度在100 ns以内:当锁住的可用卫星少于四颗时,解算方程组的信息不够充分,授时精度将 ...

  6. Hadoop案例(六)小文件处理(自定义InputFormat)

    小文件处理(自定义InputFormat) 1.需求分析 无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案.将多个小文件合并 ...

  7. 使用递归计算n的阶乘n!

    计算n! 观察公式2可以直接使用递归求解 C++代码如下: #include <iostream> using namespace std; unsigned func(unsigned ...

  8. jquery 上传图片自由截取

    为了使用户能自定义个人头像,需要提供一个对上传图片的截图功能,当前很多网站特别是SNS类网站都提供这样的功能,非常实用.本文主要是利用jQuery的imgAreaSelect插件实现. 首先引入三个文 ...

  9. openssl源码目录结构

    openssl源代码主要由eay库.ssl库.工具源码.范例源码以及测试源码组成. eay库是基础的库函数,提供了很多功能.源代码放在crypto目录下.包括如下内容: 1) asn.1 DER编码解 ...

  10. poj1040 Transportation(DFS)

    题目链接 http://poj.org/problem?id=1040 题意 城市A,B之间有m+1个火车站,第一站A站的编号为0,最后一站B站的编号为m,火车最多可以乘坐n人.火车票的票价为票上终点 ...