[关闭]
@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作为选择模块后,它的性能有了较大的提升,但它的设计目的使得它无法避免性能问题。

MVVM框架

MVVM框架的思想革新性在于,以往的js框架都是基于“操作DOM”的思想,MVVM则是贯彻着“操作数据”的思想,或者称之为“数据驱动”。

Angular1.X

在React诞生之前,它几乎是最好的JS框架,也是第一个MVVM框架,但是它和Javascript这门语言有点类似,起初只是作为一个小众工具被设计出来,随后意外地迅速走红,巨大的用户量迫使维护者难以做出根本性的改良,在相当复杂的页面上,太多的watch导致了性能问题。

依赖注入(依赖反转)和数据绑定是它最骄傲的特性,因为指令的实现只是一种解析形式,Bootstrap都已经用上了。
但是只要实现了依赖注入和数据绑定两样东西,就已经算是完成了一个MVVM框架。

React

Facebook的产物,起初是由于觉得Angular 1.x难用而被设计出来,它提出了那么几个堪称革命性的概念:

  1. 虚拟DOM。如果一大段DOM内的数据需要被替换,传统方式是清空后再添加,虚拟DOM会先在内存中形成一个虚拟的DOM树,当产生需要重新渲染的数据时,将其与虚拟DOM进行对比,相同的子节点和数据得到保留,只重新渲染不同的内容。
  2. 组件化提高了可复用性,事实上【复用】是软件工程的核心问题,不同时期有不同的解决方案,React将这个问题推进了一步。
  3. 用中间层贯彻了数据驱动理念,这在前端还是第一家,它引入了后端状态机的概念,从部分意义上说这优于先前Angular 1.x的双向绑定。
  4. React有官方推荐的打包工具(webpack)、官方推荐的架构(Redux),官方推荐的衍生项目(React Native),但就是没有官方推荐的路由,这侧面反映了官方对于React社区是放任的态度。这造成了React的许多插件更新迭代特别快,react-router就在一年内已经迭代到了4.0,并且每一次的API都是全新设计,不向后兼容。

React的版本迭代速度目前已经放缓,0.15版已经基本稳定,周边组件的迭代也渐渐放缓,但目前React多数使用在项目较小,维护周期较短的项目上,大型项目则需要使用Redux进行增强和约束。

官方推荐使用ES6语言进行开发,编译前采用.jsx模板格式,经过编译后会成为es5,将样式、模板、逻辑写在同一个组件内,实现真正的组件化分割。

Angular2

如上所说,Angular1.X并不适合发展需求,Angular2在底层上被重新设计,书写方式也有了很大的区别,许多API和指令被弃用,早已经不是那个只需要写个<script>标签就能引入的Angular。

抛弃了脏检查机制,这是最大的改动。
但是还是使用了类似于定义域的机制,尽管更灵活,但体积不可避免地更大了一些。

包含必要的组件后,精简版大小大约在50k上下,并且目前版本不稳定,API变化较大,声称的服务端渲染的实现方式在官方文档中依旧不明确,因此不建议用在移动端。

image_1b8isp3cl12i01qb616i91i0119qd9.png-11.7kB

Vue.js

国人开发的框架,国内的多个巨头已经开始使用。自称拥有Angular和React的优点,同时剔除了它们的缺点,并且上手容易,在2.0版本也引入了虚拟DOM的概念。社区不但对中文支持非常好,也十分火热。

和Angular类似的地方有:
* 有指令
* 有过滤器
* 支持双向绑定

和React类似的地方有:
* 一切皆组件
* 提供合理的钩子函数,让开发者定制化地处理需求。
* 都挺轻量、按需加载

VueX,Vue的框架,相当于React的Redux。

image_1b8ispm1i1ho610a34sb12q96pcm.png-11.1kB

Vue虽然是个人发起的项目,但是社区的火热程度甚至比Angular更高。在开发这个框架时,作者在谷歌工作,现在得益于社区的捐献,他已经全职转入Vue开发。由于每一行代码都是他一个人写的,在出问题和解决问题的时候,效率都非常高,因此Angular 2的issues解决率是88%,Vue能达到98%。

image_1b8itbiqd5ip1vsd1a98avc15fi1g.png-17.9kB

image_1b8itc3p53dm1bqnqsla231f321t.png-16.1kB

相比之下,React的issues解决率更低一些,85%
image_1b8ith9l31tj7ncu1cdd1k5n082a.png-17.2kB

当然,但比star数量的话,Vue比起React还是有不如的:

image_1b8istcs02i1ckq1n7ttofvpt13.png-11.8kB

Vue压缩后体积大约是25k左右,React压缩后体积大约是40k左右。

Vue和React

Vue的学习曲线更低,这是几乎公认的。

建议:优先尝试Vue。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注