前后端分离模式

我是做java出身的前端开发工程师经历过由前端视图逻辑和后端的业务逻辑混合的开发模式,

在到由ajax跨域请求来进行前后端的分离的模式,最后到由nodejs来进行前后端的分离,

今天就分别站在不同的视角上尽可能的为大家剖析下这几种模式的优缺点。

前后端逻辑混合开发模式:

这种开发模式在现在来看几乎没有什么优点,但是在很多互联网公司依然在用,我想这大概是历史原因造成的吧,
也有可能缺乏技术体系的整体思想,但是也不能完全否定其优点,与第二种开发模式相比较。
优点:

1. 用户体验好,在相同的网络条件和业务复杂度以及硬件环境下,他可以快速进行首屏展示,避免ajax请求所带来的渲染延时。
2. 有利于seo搜索引擎优化。
3. 方便静态化,在访问高峰期可以将某些访问量大并且业务数据大部分不变的页面生成静态页面进行缓存,有利于快速渲染。

缺点:1. 耦合度太高,在协作开发的时候前端的开发人员要与后端的开发人员互相等待来完成整体的功能,而且后端开发人员
        需要了解前端 的页面结构来填充逻辑代码,大大降低开发效率并且一旦出问题无法快速定位问题。
     2. 不易维护,由于对于一个页面的维护需要牵扯到两端的开发人员来共同进行维护,在需求变更后容易出现bug。
     3. 对后端开发语言进行了强依赖,一旦这两种语言参杂在一起,对于后端来讲前端是无法复用的。

ajax跨域请求前后端分离模式

这种分离模式可以在一定程度上弥补第一种开发模式的不足。

优点:
  1. 前后端的逻辑不需要混合在一起,两端的开发人员基本不需要参与对方的代码,大大提升了整体的开发效率,也方便定位问题。
  2. 与第三种开发模式相比较,前端人员不需要关注中间服务器的代码编写,从一定程度上减少了工作量。
  3. 在部署方面前后端可以分别部署,从一定程度上提升了前端的价值。

缺点:
  1. 首屏局部板块的渲染需要等到ajax请求数据返回后才能进行完全的展示,在网络比较慢的情况下表现的尤为明显。
  2. 在性能方面ajax请求的暴涨,会影响渲染性能。
  3. 异步请求的嵌套会让业务代码晦涩难懂。
  4. 不利于搜索引擎优化。
  5. 需要对请求的异常情况进行视图逻辑的处理。

nodejs前后端分离模式

这也是我目前非常推崇的一种分离模式。

优点:
1. node的异步特性,一个页面是被几十个HTML片段(每个片段一个文件)拼装成,之前PHP同步include这几十个片段,一定是串行 
   的,Node可以异步,读文件可以并行,一旦这些片段中也包含业务逻辑,异步的优势就很明显了,真正做到哪个文件先渲染完就先 
   输出显示。前端机的文件系统越复杂,页面的组成片段越多,这种异步的提速效果就越明显。
2. 前端发挥空间大大提升,能玩的东西变多,例如websocket,前端可以自己来玩并且在controller层和model层上有更多的发挥 
   空间,比如在node端自己做静态数据缓存等。
3. 服务器优势,node本身内置服务器功能,几行代码就可以启动一个服务器,免去了对apache,wamp等服务器的依赖。
4. 服务端和浏览器端公用一种语言降低了学习成本,写一套代码便可前后端同时运行。
5. 前后端彻底分离,node端只要启动一个http-proxy进行api请求转发类似于nginx的代理功能,前端只需要玩转json就可以,也 
   不存在跨域问题。
6. 服务器分别部署,可以单独进行优化,也方便node做静态化。
7. 可以进行首屏的渲染,目前像vuejs,react都可以在服务端渲染页面然后输出静态html代码,从而弥补了ajax请求的不足。

缺点:
1. 对于一般前端开发来说,觉得nodejs学习门槛比较高,牵扯到服务端就望而却步,其实没什么学的,很好上手。
2. node的单线程机制在部署的时候需要启动一个监控进程,在node挂了后能自动重启,例如在linux上配置一个supervisor。
3. 在node端调试相对比较麻烦,没有像java那样的远程调试机制,开发者一般通过console.log进行调试,当然也可以是用debug 
   模式启动node来进行调试。
4. 对开发人员的编码能力要求比较高,因为单线程的缘故,所以尽量避免写出同步执行的代码,对于cpu密集型的运算尽量不要让 
   node来做。

更多文章 请访问我的技术栈 前端架构解决方案

原文地址:http://blog.51cto.com/13700173/2097471

时间: 2024-08-27 17:49:59

前后端分离模式的相关文章

AngularJS中在前后端分离模式下实现权限控制 - 基于RBAC

权限的设计中比较常见的就是RBAC基于角色的访问控制,基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合.每一种角色对应一组相应的权限. 一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限.这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销. 在Angular构建的单页面应用中,要实现这样的架构我们需要额外多做一些事

前后端分离模式下的权限控制方案

在前后端分离的模式下,所有的交互场景都变成了数据交互,因此传统业务系统中的权限控制方案在前端已经不再适用(比如使用后台模板标签进行权限控制),需要另外设计权限控制方案. 权限控制的概念 要理解权限控制,需要明白两个概念:资源和权限. 资源:对于一个系统来说,系统内部的所有信息都可以理解为是这个系统的资源.页面是资源.数据是资源.按钮是资源.图片也是资源. 权限:权限就是访问某个资源所需要的标识.无论系统的权限如何设计,在用户登陆的时候都需要计算当前登陆用户所拥有的权限标识集合,这样才能确定这个用

[转]从MVC到前后端分离

从MVC到前后端分离 来源:csdn 发布时间:2015-10-26 阅读次数:1680 1. 理解MVC MVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器. 其中,模型是用于封装数据的载体,例如,在Java中一般通过一个简单的POJO(Plain Ordinary Java Object)来表示,其本质是一个普通的Java Bean,包含一系列的成员变量及其getter/setter方法.对于视图而言,它更加偏重于展现,也就是说,视图决定了界面

从 MVC 到前后端分离——转自:OSChina 黄勇

转自:OSChina 黄勇 从 MVC 到前后端分离 1 理解 MVC MVC 是一种经典的设计模式,全名为 Model-View-Controller,即 模型-视图-控制器. 其中,模型 是用于封装数据的载体,例如,在 Java 中一般通过一个简单的 POJO(Plain Ordinary Java Object)来表示,其本质是一个普通的 Java Bean,包含一系列的成员变量及其 getter/setter 方法.对于 视图 而言,它更加偏重于展现,也就是说,视图决定了界面到底长什么样

从MVC到前后端分离

摘要:MVC模式早在上个世纪70年代就诞生了,直到今天它依然存在,可见生命力相当之强.MVC模式最早用于Smalltalk语言中,最后在其它许多开发语言中都得到了很好的应用,例如,Java中的Struts.Spring MVC等框架. 1. 理解MVC MVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器. 其中,模型是用于封装数据的载体,例如,在Java中一般通过一个简单的POJO(Plain Ordinary Java Object)来表示,其本

为什么要进行前后端分离

传统开发模式与前后端分离模式对比 传统开发模式 前后端分离方式 对比以上两图我们可以看到,前后端分离方式流程简单多了. 前后端分离概念 简单来说就是后端提供API,前端调用API获取数据来渲染页面,当然这其中还有许多细节问题,比如跨域问题,接口数据格式约定问题等,这些以后详谈. 在开发阶段,当有新的需求时,前后端工程师约定好接口数据格式,就可以并行进行开发测试了,前端工程师不必等待后端的接口开发好了才开始工作,可以利用mock假数据等方式模拟接口返回数据(当然还有其他方式),前后端都开发好之后双

基于 koajs 的前后端分离实践

一.什么是前后端分离? 前后端分离的概念和优势在这里不再赘述,有兴趣的同学可以看各个前辈们一系列总结和讨论: 系列文章:前后端分离的思考与实践(1-6) slider: 淘宝前后端分离实践 知乎提问: 如何评价淘宝 UED 的 Midway Framework 前后端分离? Web 前后端分离的意义大吗? 尤其是<前后端分离的思考与实践>系列文章非常全面的阐述了前后端分离的意义和技术实现.如果不想看上面的文章,可以在脑海里留下这样一个轮廓就好: 本文主要阐述趣店团队基于Koajs的前后端分离实

从 MVC 到前后端分离

从 MVC 到前后端分离 1 理解 MVC MVC 是一种经典的设计模式,全名为 Model-View-Controller,即 模型-视图-控制器. 其中,模型 是用于封装数据的载体,例如,在 Java 中一般通过一个简单的 POJO(Plain Ordinary Java Object)来表示,其本质是一个普通的 Java Bean,包含一系列的成员变量及其 getter/setter 方法.对于 视图 而言,它更加偏重于展现,也就是说,视图决定了界面到底长什么样子,在 Java 中可通过

基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离) 前言 为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的NodeJS,试图探索一条全新的前后端分离模式. 随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本.为了提升开发效率,前后端分离的需求越