开源前端框架纵横谈!
文 / 尤雨溪
近年来随着 Web 应用交互复杂度的提升,前端开发也迎来了一个高速发展的时期。除
了一些老牌框架纷纷推出改动较大的升级之外,还涌现出一批新生代的开源库和框架,推动
着 Web 应用开发理念向越来越强调前端架构的方向发展。当下的前端技术可以说是处在一
个新旧交替的过程之中,同时存在着许多不同的观念和实践。
本文试图对目前数量繁多的前端框架进行一些较笼统的分析和比较,抛砖引玉,希望能
为大家在选择前端的技术架构时提供一些有益的参考。需要明确的是,本文探讨的前端架构
是以 JavaScript 为主。有一些主要关注 CSS 层面的前端框架,如 Bootstrap,不在本文的
讨论范围之内。
今天的 JavaScript 框架和库繁多复杂,很大程度上源于 Web 前端开发本身的特殊性。
从当初的可有可无到今天各种功能完备的 HTML5 标 准,JavaScript 在 Web 应用中的职责
和定位经历了巨大的变化。加上长期以来各种浏览器对 ECMA 标准支持参差不齐的复杂环
境,这导致大家对于 JavaScript 能做什么、该做什么、应该怎么做一直无法形成共识。一
个 Web 应用可以把所有业务逻辑全部放在服务器端,几乎不依赖 JavaScript;也可以完全
用 JavaScript 构建客户端,服务器只负责数据接口;更有可能选择介于两者之间的折中方
案。整体架构选择的多样性 使得不同的应用对于前端架构有着截然不同的需求。这意味着
很难有一个前端库或框架可以满足所有人,也使得开发者在找不到完美方案的情况下选择重
复造轮子。 同时,由于 JavaScript 是一门相当灵活的语言,不同背景的开发者借鉴了许多
不同的软件设计思想来构建他们理想中的 JavaScript 框架,这也 导致不同的框架/库在解
决同一个问题时经常有不同的方案,例如单页应用的设计模式问题。
框架 vs.库
众所周知,在前端开发中对于库(Library)和框架(Framework)的区分向来是有些
模糊的。像 jQuery、YUI 这些项目的官方描述都是 “库”,却 经 常 在 各 种 地 方 被 人 们 称 作 “框
架”。近两年出现的一些 MVC 项目号称框架,实际上却更像库。此外,在同样号称框架的
各个项目之间所覆盖的功能也 都有所不同。传统软件工程对于库和框架的区分主要着眼于
对应用运行流程的控制权。框架提供架构,控制运行流程,让开发者在合适的地方书写针对
具体问题的代 码;而库则附属于架构,不控制运行流程,只提供可调用的函数。但由于上
述 Web 前端开发的特殊性,这样的定义显得有些过于严格:真正称得上框架的项目很 少,