打给比方,如果说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. Flume(2)组件概述与列表

    上一节搭建了flume的简单运行环境,并提供了一个基于netcat的演示.这一节继续对flume的整个流程进行进一步的说明. 一.flume的基本架构图: 下面这个图基本说明了flume的作用,以及f ...

  2. TDD学习笔记【二】---单元测试简介

    大纲 Testing 的第一个切入点:单元测试. 本篇文章将针对单元测试进行简介,主要内容包含了5W: Why What Where Who When 而How 的部分,属于实现部分,将于下一篇文章介 ...

  3. Windows远程桌面打印机映射

    计算机的打印机驱动能打印,需要满足两个条件,一个是有打印驱动本身,一个是要有连接好了的端口.这样,打印作业就会被打印驱动程序封装成一种打印机能识别的组织形式,然后通过打印端口发送给打印机,然后打印! ...

  4. 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...

  5. drawPython

    # drawSnake import turtle def drawSnake(rad,angle,len,neckrad): for i in range(len): turtle.circle(r ...

  6. C语言题目复习前7章重点程序

    /** #include <stdio.h> #include <stdlib.h> int max(int n1, int n2) { return (n1 > n2) ...

  7. IDEA+Tomcat+JRebel热部署

    在完成idea工程简单应用后,接下来实现热部署. 简单应用地址:http://wibiline.iteye.com/admin/blogs/2072454 一.安装JRebel插件 1. 在线安装 F ...

  8. NSCache和NSURLCache、网络缓存优化

    本文目录 一种缓存优化方案 响应头'Last-Modified'和请求头'If-Modified-Since' 'Keep-Alive'响应头和不离线的URLSession 'Expires'响应头 ...

  9. ajax教程

    本文来自w3school 简介: AJAX = Asynchronous JavaScript and XML 异步的javascript和xml ajax不是新的编程语言,而是一种使用现有标准的新方 ...

  10. 加载跨域的HTML页面AJAX

    //下面是谷歌浏览器处理方式,微信端,直接使用微信链接不作处理,,火狐浏览器另行处理... 借鉴地址:http://stackoverflow.com/questions/15005500/loadi ...