avalon2并不向下兼容avalon1,但许多API与指令很相似,迁移成本比较低。此外,良好的性能与强大的功能是你迁移的动力。下面是一个列表,如有提问尽管提出。

avalon1与avalon2的异同一览表

科题 avalon1 avalon2
如何得知某个属性被改动 使用VBScript,Object.defineProperty实现对=号的重写 在此基础增加Proxy的魔术监听
如何更新视图 找到变动属性对应的订阅者数组,执行这些数组元素的update方法 使用vm.$render生成虚拟DOM树,diff,从上到下有序更新
计算属性 支持 移除,使用js指令实现相同功能
绑定属性的处理 扫描后删除 扫描后还留着
循环指令 ms-repeat,ms-each,ms-with ms-for
循环指令的语法 ms-repeat-el='array' ms-for="el in @array"
如何辩别指令中的vm属性 avalon自行进行语法抽取 强制在前面带@或#符号
垃圾回收 密封舱机制,负责清空订阅者数组 由于不保存绑定对象,没有CG的烦恼
性能 一般,但能撑起上万个指令,瓶颈取决于绑定对象的所占内存 原来的5倍以上,瓶颈取决于虚拟DOM的规模
最复杂的指令 ms-repeat ms-duplex
数据验证 使用oniui的validation 使用内置的ms-validate,ms-duplex,ms-rules
组件指令 ms-widget='id,name,opts' ms-widget='Array'传入一个对象数组,用法更灵活
组件生命周期 onInit, onDispose onInit, onReady, onViewChange, onDispose
如何操作组件 通过onInit取得组件vm进行操作 直接操作配置对象
如何对组件传入大片内容 使用ms-html或改成模板 通过slot机制
加载器 使用AMD风格的内置加载器 移除,建议使用webpack进行打包
动画 ms-effect(与angular的animate更接近) ms-effect
模块化 源码里自由划分 使用nodejs的require与module.exports组织起来
important指令 有(让页面渲染更快)
{{}}与ms-text的关系 ms-text会对内容再次扫描,不是单纯等价于{{}} 完全等价
if指令 ms-if ms-if
attr指令 ms-attr-name=value ms-attr="object" object是一个对象,方便每次处理多个属性
class指令 ms-class='xxx: toggle' ms-class=’Array
visible指令 ms-visible ms-visible
过滤器 只能用于innerText中的{{}}及ms-text, ms-html 数量琳琅满目,所有指令都支持
js指令 没有 新增
模板指令 ms-include 移除,由于后端无法实现等价功能
事件指令 普通的事件绑定 能支持事件代理的都用事件代理
后端渲染 实现成本高昂 轻松支持
核心架构 观察者模式 + 属性劫持 大模板函数+虚拟DOM+属性劫持

其中变量名前加上@,是一个很大的区别。虽然avalon也可以通过内部 分析得到,但可能有缺失,再三考虑,决定加上这一个标识符。如果大家还记得的话,我早些年的ejs模板引擎就是使用@来标识变量的。因此许多东西都是有传承的,都是非常成熟的方案。

往后,我会出一系列教程来介绍avalon2。avalon的优点可以自行发掘,但可以说一点的是,其兼容性,易用性,体积在市面上都是数一数二的。

avalon2托管在GITHUB上,心急的人可以先下回来研究,但记得加星啊!

avalon1与avalon2的异同点的更多相关文章

  1. avalon2对比avalon1 新增的功能汇总

    avalon2.0 与1.4,1.5相比, 2.0是移除了ms-repeat, ms-each, ms-with, ms-include, ms-include-src,ms-data, ms-sca ...

  2. avalon2的后端渲染实践

    avalon2为了提高性能,采用全新的架构,四层架构,其中一层为虚拟DOM. 虚拟DOM的一个好处是能大大提高性能,另一个好处是能过错整描述我们的页面结构.因此在非浏览器环境下,虚拟DOM也能正常运行 ...

  3. avalon2学习教程15指令总结

    avalon的指令在上一节已经全部介绍完毕,当然有的语焉不详,如ms-js.本节主要总结我对这方面的思考与探索. MVVM的成功很大一语分是来自于其指令,或叫绑定.让操作视图的功能交由形形式式的指令来 ...

  4. avalon2学习教程13组件使用

    avalon2最引以为豪的东西是,终于有一套强大的类Web Component的组件系统.这个组件系统媲美于React的JSX,并且能更好地控制子组件的传参. avalon自诞生以来,就一直探索如何优 ...

  5. avalon2学习教程09循环操作

    avalon2的循环指令的用法完全改变了.avalon最早期从knockout那样抄来ms-each,ms-with,分别用于数组循环与对象循环.它们都是针对元素内容进行循环.后来又从angular那 ...

  6. 基于avalon1.4.x ----分页组件编写

    avalon分页组件 (1.4.x版本) 随着avalon2的推出,avalon1的官网已经不再维护了,现在似乎是找不到avalon 1.4版本的官方文档了,所以本文章所有的内容均不保证正确性,只能保 ...

  7. avalon2学习心得(1)

    github上,avalon2的项目描述是这样的:“avalon2是一款基于虚拟DOM与属性劫持的 迷你. 易用. 高性能 的 前端MVVM框架, 适用于各种场景, 兼容各种古老刁钻浏览器, 吸收最新 ...

  8. avalon2学习教程08插入移除操作

    本节介绍的ms-if指令与ms-visible很相似,都是让某元素"看不见",不同的是ms-visible是通过CSS实现,ms-if是通过移除插入节点实现. ms-if的用法与1 ...

  9. avalon2学习教程06样式操作

    avalon2的ms-css的变革思路与ms-attr一样,将多个操作合并成到一个对象里面处理,因此没有ms-css-name="value",只有ms-css="Obj ...

随机推荐

  1. PhysX Clothing for UE4

    转自:http://www.52vr.com/article-737-1.html Hello! 之前看到论坛里有人发了个关于UE4布料的小知识,于是跟帖说抽空写个布料的工作流程供大家参考,那么,今天 ...

  2. java.util.stream 库简介

    Java Stream简介 Java SE 8 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表 ...

  3. 不曾忘记的Vue.js

    马上2017年就结束了,虽然我因为目前的项目用不上你vue,但是我不曾忘记你,在时间缝隙的某一刹那,我再次将你拾起. vue.js全家桶:vue+ vuex+axios+vue-router+webp ...

  4. TCP/IP SIGPIPE信号

    往一个已经接受FIN的套接中写是允许的,接受到FIN仅仅代表对方不再发送数据. 在收到RST段之后,如果在调用write就 会产生SIGPIPE信息,对于这个信号的处理我们通常 解决方法 signal ...

  5. 安装MySQL半同步复制

    一.简介 从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认 ...

  6. windows下maven的安装

    1.下载maven的zip包,下载地址:http://maven.apache.org/download.cgi 2.解压到F:\maven 3.修改环境变量: MAVEN_HOME:F:\maven ...

  7. oracle提高查询效率的34个方面全解析

    oracle提高查询效率的34个方面全解析   在一个数据库中进行操作的时候,效率是很重要的,那么,如何提高oracle的查询效率呢?笔者将从以下几个方面进行详细解析: 1.选择最有效率的表名顺序(只 ...

  8. POJ2311 Cutting Game 博弈 SG函数

    Cutting Game Description Urej loves to play various types of dull games. He usually asks other peopl ...

  9. StanFord ML 笔记 第三部分

    第三部分: 1.指数分布族 2.高斯分布--->>>最小二乘法 3.泊松分布--->>>线性回归 4.Softmax回归 指数分布族: 结合Ng的课程,在看这篇博文 ...

  10. 使用jQuery编辑删除页面内容,两种方式

    第一种,比较少的编辑用这种,直接在那块内容上编辑,失去焦点即完成 前几天做编辑框的时候,需要只修改一个状态 //编辑角色 function editTr($this){ thatTd=$($this) ...