最近终于下定决心学点前端的东西,然而各种框架,让人眼花缭乱。

先总结一下js前端的发展史

1、刀耕火种,原始时代

这个时候用DOM原生API来操html元素,估计getElementBy之类的函数满天飞

2、蒸汽机,工业时代

jquery等之类的框架出现,DOM操作被框架封装好,可以很方便的更新

3、电能,后工业时代

react、vue、angular、avalon等mvvm的出现,忘记操作DOM

说起mvvm实际上变量绑定,把DOM和js变量绑定,更新js变量就可以达到更新DOM的目的,或者双向绑定。

先看了一下国外的angular2 和react,感觉太大型了,于是主要盯上了vue和avalon,下面是两者的绑定语法。

avalon的绑定语法

<script>
var vm = avalon.define({
$id: "test",
a: 111
})
</script>
<div ms-controller="test">
{{@a}}
</div>

vue的绑定语法

<div id="app">
{{ message }}
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!'
}
})
</script>

可以看到几乎一样,而avalon在绑定时要使用额外的标签,输出时则要再多加一个@,vue的代码明显更加简洁。

而且两者绑定的方法几乎都用Object.defineProperties实现。在1.x版两者都没加入虚拟DOM,而在2.0之后都采用了虚拟DOM。

到底采用哪个让我犹豫了好久。avalon官网上有一张性能对比,在1.x时代,它的性能要高于vue。

由于没有看源码,我想性能差距或许就来自于绑定语法了,vue不需要额外的标签,那么有些DOM是绑定了的,有些是没有绑定的,扫描

分析肯定要比有标签的avalon要慢了。

另外由于avalon的组件要更丰富,支持的浏览器低到惊人的ie6,于是最终选择了avalon。

去除掉虚拟DOM其实我们也可以实现简单的mvvm,比如把jquery封装下,也做成变量绑定的语法糖。

或许还可以用元素和行号哈希表对应起来,直接用正则表达式。

浅析js前端发展及mvvm的选型的更多相关文章

  1. Web前端发展简史

    Web前端发展简史 有人说“前端开发”是IT界最容易被误解的岗位,这不是空穴来风.如果你还认为前端只是从美工那里拿到切图, JS和CSS一番乱炖,难搞的功能就去网上信手拈来,CtrlC + Ctrl ...

  2. web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史

    秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...

  3. 秒懂Vuejs、Angular、React原理和前端发展历史

    「前端程序发展的历史」 「 不学自知,不问自晓,古今行事,未之有也 」 我们都知道现在流行的框架:Vue.Js.AngularJs.ReactJs,已经逐渐应用到各个项目和实际应用中,它们都是MVVM ...

  4. 浅析JS中的模块规范(CommonJS,AMD,CMD)////////////////////////zzzzzz

    浅析JS中的模块规范(CommonJS,AMD,CMD)   如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已.     ...

  5. 14个优秀 JS 前端框架、库、工具及其使用时机

    这篇文章主要描述现今流行的一些 Javascript web 前端框架,库以及它们的适用场景. 新的 Javascript 库层出不穷,从而Web 社区愈发活跃.多样.在多方面快速发展.详细去描述每一 ...

  6. JS前端图形化插件之利器Gojs组件(php中文网)

    JS前端图形化插件之利器Gojs组件(php中文网) 一.总结 一句话总结:php中文网我可以好好走一波 二.JS前端图形化插件之利器Gojs组件 参考: JS前端图形化插件之利器Gojs组件-js教 ...

  7. js前端分页之jQuery

    锋利的js前端分页之jQuery 大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比 ...

  8. js前端对后台数据的获取,如果是汉字则需要添上引号

    js前端对后台数据的获取,如果是汉字则需要添上引号

  9. JS前端调用后台方法

    //JS前端代码function Exportqmdltb() { var areavalue= GetQmdltmValue(); $.ajax({ type: "post", ...

随机推荐

  1. 利用kaptcha生成验证码的详细教程

    kaptcha是一个简单好用的验证码生成工具,有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.Ka ...

  2. android.webkit.WebView/WebViewClient/WebChromeClient

    使用android.webkit.WebView控件 在xml布局文件中定义 <WebView   android:id="@+id/webkit01"   android: ...

  3. IE和火狐兼容常见问题

    文章转自http://www.cnblogs.com/asqq/archive/2013/03/09/3194994.html 1,document.form.item/document.ID IE中 ...

  4. Emacs 文件中的查找操作

    1,在本文件中查找 list-matching-lines 命令会列出本文件中所有出现text的地方.下面是它的一个输出示例: 7 matches for "ngx_http_wait_re ...

  5. PHP 大数自动转换为科学计数法

    前段时间碰到一个很头疼的问题,就是大于12位的数字在PHP中,会自动转成科学计数法表 示. 比如 1234567891234 显示为 1.23456789123E+12 , 最后只能在计算出大数之后, ...

  6. 由ConcurrentLinkedQueue扯到线程安全 待整理

    前几天项目总是报错,找了下原因. ConcurrentLinkedQueue 本身是一个基于链接节点的无界线程安全队列,你自己调用就不用考虑线程安全了吗? 结论是:原子性操作当然是线程安全的,非原子性 ...

  7. 使用Windbg调试.Net应用程序 [转]

    Windbg+Procdump解决w3wp.exe CPU过百问题[转] High CPU Dump收集工具 - ProcDump使用方法[转] ProcDump v9.0[官方] windbg查找c ...

  8. 配置tomcat全局c3p0连接池

    由于项目中多个应用访问同一个数据库,并部署在同一个tomcat下面,所以没必要每个应用都配置连接池信息,这样可能导致数据库的资源分布不均,所以这种情况完全可以配置一个tomcat的全局连接池,所涉及应 ...

  9. go语言学习 ---iota

    iota iota,特殊常量,可以认为是一个可以被编译器修改的常量. iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota ...

  10. PO_职位职务审批模式详解(设定)

    2014-06-03 Created By BaoXinjian