Web应用

所谓Web应用,指的是使用web技术构建的业务繁杂、逻辑较多、交互频繁的单页Web应用,它在一个界面上集成多种功能,甚至整个系统就只有一个页面,所有的业务功能都是它的子模块,通过特定的方式挂接到主界面。它是Ajax技术的进一步升华,把Ajax的无刷新机制发挥到极致,因此能早就与桌面程序媲美的流畅用户体验。

Web应用需要解决的问题

根据徐飞前辈的分类,Web应用中要解决的问题分为三类:状态、组织、效率。原文

状态

在一个业务界面中,我们可能会根据某些数据去生成一块界面,然后根据界面上的某些操作,改变一些数据,进而影响界面另外一部分。所以抽象出来就有两种关系:数据改变造成界面改变、界面改变造成数据改变。能够描述界面当前状态的数据,就称为状态。如果不对状态进行抽象,则可能造成逻辑的混乱,所以,不同的框架采用不同的方式进行了处理。

组织

所谓组织,指两个方面,一方面是模块关系,一方面是业务模型。
目前解决模块关系的问题的共识是组件化。整个应用形成倒置的组件树,每个组件提供对外接口,然后内部只关注自己的实现。最原始的组件,其功能可以单独开发测试,然后逐级拼装成更复杂的组件,直到整个应用。每一级都是易装配,可追踪,可管控的。组件化的目标有分治和复用,其中分治的价值更大。由于组件设计需要更高的成本和更高的难度,所以对web应用“全组件化”是有一定的难度的,可综合考虑。
所谓业务模型指的是所处领域中的业务数据、规则、流程的集合。目前解决业务模型的方法有flux、redux之类的架构。

效率

效率分为开发效率和运行效率。开发效率与选用的框架、技术以及组件化等都有很大的关系。运行效率主要因素有数据变更检测方式和创建、修改DOM。数据变更检测方式和框架有很大的关系,创建DOM的过程中,各个框架之间没有太大差异,而在修改DOM的时候,React的虚拟DOM有很大的优秀,其他框架内部实现也在逐渐借鉴。

常见的架构

目前在Web应用中,常用的架构有MVC、MVP、MVVM三种。下面这两篇文章讲的很好。
Scaling Isomorphic Javascript Code
MVC,MVP 和 MVVM 的图示

开发框架与类库

通常,我们会开始用类库和框架来解决构建动态应用的问题。类库是一些函数的集合,它可以帮助我们写Web应用,但起主导作用的是我们的代码,如jQuery。而框架是一种特殊的、已经实现了的Web应用,它只需要填充具体的业务逻辑,其主导作用的是框架。

  • ExtJS可以称为第一代单页应用框架的典型,它封装了各种UI组件,用户主要使用JavaScript来完成前端的开发以及布局。然而,随着功能的逐渐增加,ExtJS的体积变得日益庞大,性能也变得越来越差。
  • React可以认为是MVC中的V视图,其产生的意义是:解决构建随时间数据不断变化的大规模应用程序的问题。其主要特点是组件化(也可以使用其独有的jsx)和虚拟DOM树(只会更新需要更新的DOM,节省大量的DOM修改的时间)。React推崇的是单向数据流:给定原始界面,施加一个变化,就可以推导出顶一个状态(界面或数据的更新)
  • Angular是为了克服HTML在构建应用上的不足而设计的。它采用了MVVM的架构,采用了数据与界面的双向数据绑定,当界面发生变化时,按照配置规则去更新相应的数据,然后,在根据配置好的规则,把数据更新到界面状态。
  • Vue是一个构建数据驱动的web界面的库。Vue.js的目标是通过尽可能简单的API实现相应的数据绑定和组合的视图组件。它只聚焦于视图层,非常容易与其他库或已有项目整合。其核心是一个响应的数据绑定系统,它让数据与DOM保持同步变得非常简单。与其他框架的对比
  • jQuery是一个优秀的JavaScript库,它是轻量级的js库,兼容CSS3以及各种浏览器。jQuery是用户能更方便地处理HTML、events、实现动画效果和AJAX交互。