打给比方,如果说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. js获取浏览器body或窗宽度高度合集

    <script type="text/javascript"> var s = " "; document.documentElement.scro ...

  2. IIS与Apache共用80端口

    Windows server 2003服务器上安装有默认 IIS 6和Apache两个服务器,IIS运行的一个.net程序,apache运行php程序,现在想让它们同时都能通过80端口访问,设置起来还 ...

  3. 移动适配请使用比rem等更好的布局方案

      移动端大行其道,rem/em.百分比.响应式方案更是层出不穷,看见周围的伙伴们都在对使用rem和百分比情有独钟,可我却偏不爱,之所以出现如此多的方法,其目的只有一个屏幕适配.   屏幕适配顾名思义 ...

  4. HBase基本shell命令

    HBase基本shell命令 以下shell命令都是经过测试,正常展示,若有不足,还望指点! 1.创建表 create ‘表名称’,‘列族名称1’,‘列族名称1’create 'test_M_01', ...

  5. WebGL与three.js

    前面学习了一些webgl的基础知识,现在就用一下three.js写一个小例子,记录一下学习的过程. 效果图: 1.去github下载three.js,然后将它加载到网页中 <script src ...

  6. Maven 配置远程仓库

    最近要用到一个包:spark-1.6.0-cdh5.8.2,在https://mvnrepository.com网站上搜到该包的pom.xml语句.但是看到下面有这样一句话: 该包在图中所述repos ...

  7. Linux下搭建coreseek(sphinx+mmseg3)全文检索

    测试平台:Center OS 1.设置环境,升级/安装系统基础依赖包:m4.autoconf.automake.libtool #设置路径和中文环境: $ export PATH=/usr/local ...

  8. bzoj2243树链剖分+染色段数

    终于做了一道不是一眼出思路的代码题(⊙o⊙) 之前没有接触过这种关于染色段数的题目(其实上课好像讲过),于是百度了一下(现在思维能力好弱) 实际上每一段有用的信息就是总共有几段和两段各是什么颜色,在开 ...

  9. db2基础

    DB2知识文档 一.db2 基础 基本语法 注释:"--"(两个减号) 字符串连接:"||" 如set msg='aaaa'||'bbbb',则msg为'aaa ...

  10. Salesforce练习Case

    以下几个SFDC的Case基本覆盖了Force.com平台的一些基本操作流程,大家可以自己动手练习一下 Case 1: 在某公司的业务流程中,有零售店和销售人员两类信息,销售人员是指在零售店中工作的人 ...