浅析js前端发展及mvvm的选型
最近终于下定决心学点前端的东西,然而各种框架,让人眼花缭乱。
先总结一下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的选型的更多相关文章
- Web前端发展简史
Web前端发展简史 有人说“前端开发”是IT界最容易被误解的岗位,这不是空穴来风.如果你还认为前端只是从美工那里拿到切图, JS和CSS一番乱炖,难搞的功能就去网上信手拈来,CtrlC + Ctrl ...
- web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史
秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...
- 秒懂Vuejs、Angular、React原理和前端发展历史
「前端程序发展的历史」 「 不学自知,不问自晓,古今行事,未之有也 」 我们都知道现在流行的框架:Vue.Js.AngularJs.ReactJs,已经逐渐应用到各个项目和实际应用中,它们都是MVVM ...
- 浅析JS中的模块规范(CommonJS,AMD,CMD)////////////////////////zzzzzz
浅析JS中的模块规范(CommonJS,AMD,CMD) 如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. ...
- 14个优秀 JS 前端框架、库、工具及其使用时机
这篇文章主要描述现今流行的一些 Javascript web 前端框架,库以及它们的适用场景. 新的 Javascript 库层出不穷,从而Web 社区愈发活跃.多样.在多方面快速发展.详细去描述每一 ...
- JS前端图形化插件之利器Gojs组件(php中文网)
JS前端图形化插件之利器Gojs组件(php中文网) 一.总结 一句话总结:php中文网我可以好好走一波 二.JS前端图形化插件之利器Gojs组件 参考: JS前端图形化插件之利器Gojs组件-js教 ...
- js前端分页之jQuery
锋利的js前端分页之jQuery 大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比 ...
- js前端对后台数据的获取,如果是汉字则需要添上引号
js前端对后台数据的获取,如果是汉字则需要添上引号
- JS前端调用后台方法
//JS前端代码function Exportqmdltb() { var areavalue= GetQmdltmValue(); $.ajax({ type: "post", ...
随机推荐
- linux too many open files报错
修改方法:vi /etc/security/limits.conf 增加一行,如下: * - nofile 65535 修改vi /etc/ssh/sshd ...
- Linear Algebra Courses
Lecture 1:Demonstrate the columns of a matrix (imagine the vectors) in N-dimension space.How to mult ...
- 转:【HTTP】常见错误码说明
一些常见的状态码为: 200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务不可用详细分解: 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明100 ...
- PHP原生实现,校验微信公众号||小程序服务器地址
1.原生的.php文件: test.php <?php header('Content-type:text'); define("TOKEN", "weixin& ...
- cxf使用wsdl文件生成代码
1.先下载cxf包 http://cxf.apache.org/download.html,现在cxf包.(下载资源就有) 2.解压缩包,通过cmd命令进入到bin目录下(cd cxf\bin的路径) ...
- HDUOJ-Counting Triangles
Counting Triangles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- github常见操作和常见错误及其解决办法
一.常见操作 1. 使用git在本地创建一个项目的过程 $ makdir ~/hello-world //创建一个项目hello-world $ cd ~/hello-world //打开这个项目 $ ...
- JSEclipse—Eclipse上的JavaScript开发工具
http://blog.csdn.net/qiaogang2003/article/details/3035056原来js开发仅仅使用ue,不过开发效率比较低下. 找到一个Eclipse下的js开发工 ...
- 修改注册表值解决ie被恶意窜改的问题
修改注册表值解决ie被恶意窜改的问题 IE消失 运行—Regedit 主键HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDes ...
- Java程序作linux服务并且开机自动启动[转]
以有个java应用名称为test,打包为test.jar,程序入口为cn.com.ppnote.SocketServer. 下面在linux的/opt下建立testapp目录,复制test.jar到/ ...