avalon1与avalon2的异同点
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的异同点的更多相关文章
- 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 ...
- avalon2的后端渲染实践
avalon2为了提高性能,采用全新的架构,四层架构,其中一层为虚拟DOM. 虚拟DOM的一个好处是能大大提高性能,另一个好处是能过错整描述我们的页面结构.因此在非浏览器环境下,虚拟DOM也能正常运行 ...
- avalon2学习教程15指令总结
avalon的指令在上一节已经全部介绍完毕,当然有的语焉不详,如ms-js.本节主要总结我对这方面的思考与探索. MVVM的成功很大一语分是来自于其指令,或叫绑定.让操作视图的功能交由形形式式的指令来 ...
- avalon2学习教程13组件使用
avalon2最引以为豪的东西是,终于有一套强大的类Web Component的组件系统.这个组件系统媲美于React的JSX,并且能更好地控制子组件的传参. avalon自诞生以来,就一直探索如何优 ...
- avalon2学习教程09循环操作
avalon2的循环指令的用法完全改变了.avalon最早期从knockout那样抄来ms-each,ms-with,分别用于数组循环与对象循环.它们都是针对元素内容进行循环.后来又从angular那 ...
- 基于avalon1.4.x ----分页组件编写
avalon分页组件 (1.4.x版本) 随着avalon2的推出,avalon1的官网已经不再维护了,现在似乎是找不到avalon 1.4版本的官方文档了,所以本文章所有的内容均不保证正确性,只能保 ...
- avalon2学习心得(1)
github上,avalon2的项目描述是这样的:“avalon2是一款基于虚拟DOM与属性劫持的 迷你. 易用. 高性能 的 前端MVVM框架, 适用于各种场景, 兼容各种古老刁钻浏览器, 吸收最新 ...
- avalon2学习教程08插入移除操作
本节介绍的ms-if指令与ms-visible很相似,都是让某元素"看不见",不同的是ms-visible是通过CSS实现,ms-if是通过移除插入节点实现. ms-if的用法与1 ...
- avalon2学习教程06样式操作
avalon2的ms-css的变革思路与ms-attr一样,将多个操作合并成到一个对象里面处理,因此没有ms-css-name="value",只有ms-css="Obj ...
随机推荐
- MySQL 8.0用户和角色管理
MySQL 8.0用户和角色管理 MySQL8.0新加了很多功能,其中在用户管理中增加了角色的管理,默认的密码加密方式也做了调整,由之前的sha1改为了sha2,同时加上5.7的禁用用户和用户过期的设 ...
- echart-X轴标签文字方向
1. rotate斜体: axisLabel:{interval:0,rotate:45, margin:2, textStyle:{ color:"#222" }2. forma ...
- c#数组用法
随机数: string[] str = new string[4]{"a","b","c","d"} Readom r ...
- xinetd网络(2) 协议头解析
1:在/etc/xinetd.d下添加配置文件xhttpd service xhttpd { socket_type = stream //每行“=”前后各最多只能有一个空格 protocol= tc ...
- Java捕获异常的问题
---恢复内容开始--- 在Java编译过程中,有时候会出现输入未按照规定输入的情况,此时需要警告用户输入错误,这就会是程序运行过程中出现异常.异常就是可预测但是又没办法消除的一种错误.所以在编写过程 ...
- 将任何GitHub内的代码转为外部CDN网址
rawgit.com 有时候在GitHub找到需要使用于网站的档案(例如:CSS.JavaScript),但没有提供CDN网址就必须自己手动下载.上传到主机上才能够使用,有点耗时又不方便,因为GitH ...
- inno setup 软件打包
2017-05-26 软件开发完毕以后,要进行打包发布,有几款打包用的软件很常见:innosetup,nullsoft,installshield.本人今天终于把自己独立开发的呈现软件打了包.第一个版 ...
- JavaScript正则表达式以及字符串处理
正则表达式之基本概念 在我们写页面时,往往需要对表单的数据比如账号.身份证号等进行验证,而最有效的.用的最多的便是使用正则表达式来验证.那什么是正则表达式呢? 正则表达式(Regular Expres ...
- access oarcle
1 默认值2 自动增加字段3 now() time() date() 更改sysdate4 datediff5 保留字 date 名字段6isnull(rowname)要改成rowname = nul ...
- 19.纯 CSS 创作一种有削铁如泥感觉的菜单导航特效
原文地址:https://segmentfault.com/a/1190000014836748 感想: 把原元素隐藏,利用伪元素::before 和 ::after 各取上下一半 clip-path ...