打给比方,如果说angularJS是剑,那么avalon就是匕首。匕首比剑更易学,更快,更适合快速作战...
我们还是直接来实际的吧:
 
目前项目开发中有以下几个通用需求:
  • 有前端路由系统,用来划分逻辑模块。
  • 有异步模块载入,如requireJS或者seaJS。
  • 数据与视图自动绑定,并且性能出众。
  • 框架学习曲线不要太陡,并且让我的代码越少越好。
路由
AngularJS不能无缝与第三方路由整合,只能用它自己的模块,如”ui-status“。原因是AngularJS的数据模型是包裹在它的“controller”作用域里面的。当然你可以把这些数据模型抛到全局作用域里,但即便如此,你对这些数据模型操作以后还是要手动调用“scope.$digest()”才能影响到视图。
avalon暂时需要借助第三方路由模块,可以无缝整合。例如,通常路由模块接受一个对象作为参数,这个对象中的键名是路由的路径,值是一个回调函数,当url符合这个路径时就自动执行回调。在这个回调里,我们可以直接操作avalon的数据模型,并且数据模型的改变会立即影响到视图,如:
 
 
异步载入
AngularJS中本身没有异步模块加载系统,作者在公开场合对这个问题的回答是:“不认为现在有多少前端应用真正大到异步加载,绝大部分时候通过压缩、缓存就足够了”。但是也有一些模块来让AngularJS支持异步加载或者与第三方异步模块整合。具体可以在github上搜“requireJS angularJS”。
avalon自带AMD模块加载器。
 
数据与视图绑定及性能
Talk is cheap,我们直接来看内部实现吧。
AngularJS的机制:AngularJS提供了一个机制让你声明页面上的dom事件和对应的需要出发的数据模型的方法,例如你在一个元素上写上一个“ng-click='changeMyName()'”的属性,当你点击它时,AngularJS就会自动执行“changeMyName”的方法。除了执行这个方法,AngularJS还会触发一个叫做“$digest”的函数。这个函数会直接检测“所有的数据模型”是否改动,有改动就去更新相应的视图元素。你可以去github上把AngularJS克隆下来,翻到“src/ng/”目录下的“$digest”函数看看。我缩略掉了几个细节的地方,一下让大家先看全貌(注意注释部分):
 
avalon的机制:将数据模型中的属性用get 和set 方法重写。在set方法中去更新所有和当前数据模型有关的视图元素,这就是为什么avalon一更新数据就能马上反映到视图上、并且性能更出众的原因。直接翻到avalon源码的“modelFactory”函数,在这个函数中avalon收集和当前模型有关的视图元素、其他相关联的数据,最后注册到属性中。其中更详细的原理可以直接参考作者 司徒正美 的github https://github.com/RubyLouvre/avalon
 
学习曲线与代码量
AngularJS的学习曲线明显偏陡,其中的directive等概念虽然功能强大,但对新手来说要掌握的东西太多。avalon则相对平滑。avalon在人代码形式上几乎没有任何要求,因此代码量也比AngularJS更少。
 
除了以上几个方面,在选择的时候还有一些要考虑的情况,例如:AngularJS有完整的测试、打包,代码拆分得非常有调理。avalon因为本身简单,且版本号还未到1,因此还有不少问题,其中包括部分代码不能用。但总的来说,还是推荐使用avalon,原因很简单:如果你能够很好的理解并AngularJS了,那你的水平足够把avalon玩得更顺手、更随心所欲了,像剑圣手中的匕首,已足以于千军万马中取上将首级。

前端展望:取avalon,弃angular的更多相关文章

  1. 前端MVVM框架avalon - 模型转换1

    轻量级前端MVVM框架avalon - 模型转换(一) 接上一章 ViewModel modelFactory工厂是如何加工用户定义的VM? 附源码 洋洋洒洒100多行内部是魔幻般的实现 1: fun ...

  2. 微信小程序----关于变量对象data 和 前端wxml取后台js变量值

    (一)页面变量对象data 对象data 有两个方面用途 第一,前端wxml的数据渲染是通过设置此对象中定义的变量进行关联展现的 第二,定义JS页面中的页面局部变量,使其整个页面中可使用或调用 对象d ...

  3. 【转】前端框架天下三分:Angular React 和 Vue的比较

    前端框架天下三分:Angular React 和 Vue的比较 原文链接:http://blog.csdn.net/haoshidai/article/details/52346865 前端这几年的技 ...

  4. 轻量级前端MVVM框架avalon - 执行流程2

    接上一章 执行流程1 在这一大堆扫描绑定方法中应该会哪些实现? 首先我们看avalon能帮你做什么? 数据填充,比如表单的一些初始值,切换卡的各个面板的内容({{xxx}},{{xxx|html}}, ...

  5. 轻量级前端MVVM框架avalon - 控制器

    引子: 最近工作挺忙,avalon只能断断续续的写下去了,大概看了下angular的源码,看到小一半就比较难坚持了,是块硬骨头,慢慢啃吧 不过angular的的文档中用词还是很优雅: HTML编译器 ...

  6. 轻量级前端MVVM框架avalon源码分析-总结

    距avalon0.7版本发布有一段时间,由于之前的稳定性,就停止一段时间更新,期间研究了下Knockout源码,也尝试写了一个小型的mvvm的实现模型,仅仅只是仿造ko的核心实现,把无关的东西给剥离掉 ...

  7. 轻量级前端MVVM框架avalon - 初步接触

    迷你简单易用的MVVM框架 avalon的介绍http://rubylouvre.github.io/mvvm/ 按照作者的介绍,在HTML中添加绑定,在JS中用avalon.define定义View ...

  8. 前端MVVM框架avalon揭秘 - 双向绑定原理

    avalon大家可能不熟悉,但是Knockout估计或多或少听过用过,那么说说KO的几个概念 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Dec ...

  9. 【repost】前端学习总结(二十三)——前端框架天下三分:Angular React 和 Vue的比较

    目录(?)[+]   前端这几年的技术发展很快,细分下来,主要可以分成四个方面: 1.开发语言技术,主要是ES6&7,coffeescript,typescript等: 2.开发框架,如Ang ...

随机推荐

  1. 字符串和datatime.time类型转为秒

    前言 折腾了好久,还是得养成看帮助文档和help的习惯 知识 datetime模块中定义的类 datetime.date 表示日期的类,常用属性:year, month, day datetime.t ...

  2. python学习 3笔记

    merge dict def merge(defaults, override): r = {} for k, v in defaults.items(): if k in override: if ...

  3. BZOJ 1176 [Balkan2007]Mokia ——CDQ分治

    [题目分析] 同BZOJ2683,只需要提前处理s对结果的影响即可. CDQ的思路还是很清晰的. 排序解决一维, 分治时间, 树状数组解决一维. 复杂度是两个log [代码] #include < ...

  4. "不能在 DropDownList 中选择多个项。"其解决办法及补充

    探讨C#.NET下DropDownList的一个有趣的bug及其解决办法 摘要: 本文就C#.Net 环境下Web开发中经常使用的DropDownList控件的SelectedIndex属性进行了详细 ...

  5. 关于handler 和 looper 的问题

    重新去学习回顾looper和handler ,还是需要重新认识这个经常使用的机制. 我首先是看任玉刚老师的书<android的开发艺术探索>的第十章. 里面一句话开始说出了我们大概的理解— ...

  6. EasyUi

    <base href="<%=basePath %>"> -- (不推荐使用)--导入文件路径 ${pageContent.request.contextP ...

  7. hoops暂时用过的一些方法

    (中文全部为谷歌翻译) HC_EXTERNAL void HC_CDECL HC_Show_Shell HC_PROTO ((HC_KEY, int *, HC_POINT *, int *, int ...

  8. 迎战Meta 2,微软新专利有望解决Hololens视场角野窄问题

    上周,微软HoloLens的竞争对手AR眼镜Meta 2正式发货,微软是该急了.我们知道Meta 2不仅在价格上比HoloLens便宜,而且在性能上也不弱,Meta2的可视角度达到90度,比HoloL ...

  9. 手把手教你搭建深度学习平台——避坑安装theano+CUDA

    python有多混乱我就不多说了.这个混论不仅是指整个python市场混乱,更混乱的还有python的各种附加依赖包.为了一劳永逸解决python的各种依赖包对深度学习造成的影响,本文中采用pytho ...

  10. UITextView 点击添加文字 光标处于最后方

    #import "ViewController.h" @interface ViewController ()<UITextViewDelegate> @end @im ...