2 回答
TA贡献1790条经验 获得超9个赞
NodeJS
定义
一个Javascript运行环境(runtime),基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。
作用
Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。
特点
事件驱动;
非阻塞I/O;
轻量、可伸缩,适于实时数据交互应用;
单进程,单线程;
NodeJS的优缺点
优点
高并发(最重要的优点);
适合I/O密集型应用;
缺点
不适合CPU密集型应用;
CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;
Backbone.js
定义
为复杂Javascript应用程序提供模型(models)、集合(collections)、视图(views)的结构。
作用
适合的应用场景是单页面应用,并且页面上有大量数据模型,模型之间需要进行复杂的信息沟通。Backbone 在这种场景下,能很好的实现模块间松耦合和事件驱动。
主要组成
model:创建数据,进行数据验证,销毁或者保存到服务器上;
collection:可以增加元素,删除元素,获取长度,排序,比较等一系列工具方法,说白了就是一个保存 models的集合类;
view:绑定html模板,绑定界面元素的事件,初始的渲染,模型值改变后的重新渲染和界面元素的销毁等;
Backbone.js优缺点
优点
将数据和界面很好的分离开来;
将事件的绑定很好的剥离出来,便于管理和迭代;
使得Javascript程序的模块化更加清晰、明了;
缺点
Model 层比较简单,如果要支持 One-To-One 或者 One-To-Many 等复杂数据关系时有些力不从心;
Model 只能属于一个 Collection 这个设计,页面复杂的时候会很受局限;
View 层没有很强的 Page 管理机制;
TA贡献1829条经验 获得超6个赞
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 这个设计,页面复杂的时候会很受局限。
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 的准备。
- 2 回答
- 0 关注
- 668 浏览
添加回答
举报