Backbone Conf 2012
有幸去美国波士顿参加了2012年的 Backbone.js Conference,见到了coffeescript、underscore.js 还有 backbone.js 的作者 Jeremy Ashkenas。会议内容围绕前端MVWTF和社区进行了很多有趣的讨论,有很多有价值的观点。我希望在这里面与大家分享我从里面学到的东西。
这系列博客其实是我整理的会议笔记的汇总,是我对每个话题中比较有印象或者比较重要的内容的摘抄,这些观点几乎都不是我的,我仅作为一个传声者。我是希望把所有的Credit交给演讲者自己,我最多只是一个翻译者,碰巧幸运的在现场。Backbone.js Conference和O’Reilly的Fluent Conference 碰巧同时进行,#BackboneConf 更加草根,但是也更有观点。
Ember.js by Yehuda Katz
Links
Notes
Ember.js的主力开发者和鼓吹者是Yehuda Katz,这个框架来自于他们团队所咨询的项目。所以这也是由实际需求催生的一个项目。
Ember.js expectations
- bidirectional data binding, it’s special
- View hierarchy
- Structure and Widgets
- Routing
Ember’s Bindings are backed into the object model.
bindings are always async. It guarantees you the ability to make all necessary changes before side-effects occur.
它很智能的解决了单个属性changes造成的event雪崩。若干Model set只会集中触发一次UI update。Guarantees a single DOM update per turn in the browser’s event loop.
它的Template组合方式保证子template的渲染只有一次Dom update。
它的View hierarchy也就是CompositeView处理了子View的状态清理(双向unbind,释放资源),并且提供了一些Lifecycle events(很有价值)。
Template的渲染过程隐含了Collection和Model的事件绑定,Template里面的action可以在Router触发事件并且可以生成对应的url。
Ember.js的特点就是用黑魔法(black magic,注:这是我说的,是我的偏见 ;-D)帮你默认做了很多事情,作者管这个叫“Does the right thing by default”,这是一个双刃剑。但是对于有很多雷同的页面和功能的项目来说它可以保证write less do more,并且平均的代码质量会提高(因为复杂逻辑完全被框架所封装好了)。
Backbone.js的一个重要买点是View的Stateless,而ember.js则通过Routing主动的负担起了State Management的责任。Router里面定义了系统的各种State,用户点击action或者通过URL跳转实际上是改变了状态机的状态,router定义了这些状态和状态转换。因为UI状态机实际上是一个非常复杂的建模方式,因为状态的转换组合可以让系统处于很多复杂和混乱的情境中,当然ember.js这样做也是有理由的,它的好处包括logging、对生产应用进行debugging,避免不可能的情况(通过定义所有可能的情况!)。
对于状态机这个表述,Yehuda在现场被很多“大牛”质疑了,获得了不少的嘘声。不过这的确是解决非常复杂的问题的一种标准的解决方法,但是由于这种分析方式本身(定义状态,把不同的状态正交的解开)有很大的难度,所以它有可能会让你陷身泥潭。这就是很多注重简单的MVWTF框架会选择不去管理状态,而选择Stateless的原因。