前后端分离

什么是前后端分离

要谈“前后端分离”这个话题,首先聊聊什么是“前后端分离”?常规意义上的“前后端分离”更多是一种软件工程上的概念,主要具备以下特点:

  • 前端和后端属于独立运行的两个应用(Application);
  • 前端和后端通过网络通信交换数据;

“前后端分离”的意义主要有:

  • 前端和后端的开发工作可以并行,彼此的进度相互不影响;
  • 由于前端和后端往往采用不同的语言和技术框架,程序员可以更专注于一个更小范围的技术领域。在 B/S 架构下的应用,前端往往使用的是 HTML/CSS/Javascript 技术,后端则使用 Ruby/PHP/Java(Spring框架) 等技术。

在 C/S(Client/Server) 架构下,Client 端属于“前端”,Server 端属于“后端”,本身就是前后端分离了。所以“前后端分离”主要是针对 B/S(Brower/Server) 架构的软件工程,即运行在浏览器里的 Web 应用。在没有“前后端分离”之前,传统的 web 应用往往是由 Server 端生成能够在浏览器里运行的 HTML 代码,HTML 代码里亦包含了数据。

前后端分离的缺点

“前后端”分离固然带来了软件工程上的便利,同时也带来了新的成本和新的问题。

在传统的“前后端”一体化应用中,由 Server 端应用直接生产 HTML,采用“前后端分离”的方案后,后端输出 JSON(目前较普遍使用的方案) 格式的数据,然后前端对 JSON 数据进行解析,然后再渲染出 HTML 页面。在这个过程中,有些在后端已经做过的事情,前端需要再做一遍,包括:

  • 模型。前端往往不会直接将 JSON 数据转化为 HTML,更多是先在 Javascript 中生成对应的 Model,然后由 Model 再生成HTML,这部分 model 往往被称为 View Model。比如 Vue 就会称自己为 MVVM 库,MVVM 即 Model-View-ViewMode。

  • 路由层。“前后端分离”的前端项目,一般也被称为单页应用(SPA,Single Page Application),单页应用免不了需要定义自己的路由,路由规则往往和Server端的路由的重复。

毋容置疑,前后端分离带来的是大量新增的工作量。虽然有一些优秀的前端框架的出现,如 Vue 等极大的方便了前端应用的开发。其实也正是这些前端框架的出现,才出现了“前后端分离”的流行。至于是先有蛋还是先有鸡,已经不重要了。

除了开发成本的增加。前后端分离还有一个巨大的痛点,即协作成本。

Rails下的下一代前后端分离