@kungfuboy
2017-03-12T04:39:42.000000Z
字数 2512
阅读 1137
小源
在开源世界中,一个框架或类库的火热程度很大程度上取决于社区,例如jQuery就不是大公司发起创建的,凭借着巨大的用户量和社区贡献,到今天依然是使用率最高的类库。
各个框架各有特点,由于js语言本身非常灵活,可以用多种语言思维进行封装,因此各种风格迥异的框架和类库层出不穷。
Prototype.js
主要受Ruby开发者的青睐。
MochiKit
主要受Python开发者青睐。
Dojo
Dojo的后台做的非常好,Java的Struts框架用的就是Dojo,但它发展缓慢。
Qooxdoo
将自己定义为GUI类库,有优质的插件。
YUI与Ext
雅虎以前相当于今天的谷歌,里面有许多聪明人弄一些好东西。YUI就是其中的产物之一,但聪明人太多了,互相制肘,于是有人跑出来搞了Ext。
Mootools
最像Jquery的类库,但实现方式差异很大,它是用优雅的面向对象方式实现,jquery则是用大量的函数和判断堆砌起来。
Jquery
把Jqeury放最后是因为它比较特殊,首先它非常好用,可以说是最好用的类库。在使用了Sizzle.js作为选择模块后,它的性能有了较大的提升,但它的设计目的使得它无法避免性能问题。
整个库放在一个自动执行函数(闭包),另闭包里面还存在闭包,每一重闭包意味着新一重作用域,漂亮的封装性带来了严重的内存问题。
一个方法同时作为写方法与读方法,让它在性能上比较很吃亏。一个方法同时作为读方法和写方法,意味着函数体内有大量的判断和引用,甚至会调用作用域外部的函数。为了调用这些外部函数,不得不把分解得来的DOM元素再包装成jQuery对象。
MVVM框架的思想革新性在于,以往的js框架都是基于“操作DOM”的思想,MVVM则是贯彻着“操作数据”的思想,或者称之为“数据驱动”。
Angular1.X
在React诞生之前,它几乎是最好的JS框架,也是第一个MVVM框架,但是它和Javascript这门语言有点类似,起初只是作为一个小众工具被设计出来,随后意外地迅速走红,巨大的用户量迫使维护者难以做出根本性的改良,在相当复杂的页面上,太多的watch导致了性能问题。
依赖注入(依赖反转)和数据绑定是它最骄傲的特性,因为指令的实现只是一种解析形式,Bootstrap都已经用上了。
但是只要实现了依赖注入和数据绑定两样东西,就已经算是完成了一个MVVM框架。
React
Facebook的产物,起初是由于觉得Angular 1.x难用而被设计出来,它提出了那么几个堪称革命性的概念:
React的版本迭代速度目前已经放缓,0.15版已经基本稳定,周边组件的迭代也渐渐放缓,但目前React多数使用在项目较小,维护周期较短的项目上,大型项目则需要使用Redux进行增强和约束。
官方推荐使用ES6语言进行开发,编译前采用.jsx
模板格式,经过编译后会成为es5,将样式、模板、逻辑写在同一个组件内,实现真正的组件化分割。
Angular2
如上所说,Angular1.X并不适合发展需求,Angular2在底层上被重新设计,书写方式也有了很大的区别,许多API和指令被弃用,早已经不是那个只需要写个<script>
标签就能引入的Angular。
抛弃了脏检查机制,这是最大的改动。
但是还是使用了类似于定义域的机制,尽管更灵活,但体积不可避免地更大了一些。
包含必要的组件后,精简版大小大约在50k上下,并且目前版本不稳定,API变化较大,声称的服务端渲染的实现方式在官方文档中依旧不明确,因此不建议用在移动端。
Vue.js
国人开发的框架,国内的多个巨头已经开始使用。自称拥有Angular和React的优点,同时剔除了它们的缺点,并且上手容易,在2.0版本也引入了虚拟DOM的概念。社区不但对中文支持非常好,也十分火热。
和Angular类似的地方有:
* 有指令
* 有过滤器
* 支持双向绑定
和React类似的地方有:
* 一切皆组件
* 提供合理的钩子函数,让开发者定制化地处理需求。
* 都挺轻量、按需加载
VueX,Vue的框架,相当于React的Redux。
Vue虽然是个人发起的项目,但是社区的火热程度甚至比Angular更高。在开发这个框架时,作者在谷歌工作,现在得益于社区的捐献,他已经全职转入Vue开发。由于每一行代码都是他一个人写的,在出问题和解决问题的时候,效率都非常高,因此Angular 2的issues解决率是88%,Vue能达到98%。
相比之下,React的issues解决率更低一些,85%
当然,但比star数量的话,Vue比起React还是有不如的:
Vue压缩后体积大约是25k左右,React压缩后体积大约是40k左右。
Vue和React的都是较轻量的前端View层框架,vue更轻一些,当然,这个轻量只是它们本身轻量,在实际开发中依赖了大量的组件和基础库后,体积怎样还另说。
社区都很火热,背后都有用于增强和管理的框架(Redux和VueX)。
从渲染耗时上看,vue胜出不少。
同样写个Hello World,代码量差不多。
Vue的学习曲线更低,这是几乎公认的。
建议:优先尝试Vue。