感悟|前后分离真的好?

2017 年 12 月 10 日 IMWeb前端社区 最帅的陈纪庚

这篇推送的供稿者是小编本科同学陈纪庚

已经在鹅厂实习完离职了


分享这篇推送...

是为了...

从一个应届生的角度...

去谈前后端分离...

其中是配以系统设计与分析的大作业

搭建一个新型电影购票系统...


导言


对目前的web来说,前后端分离已经变得越来越流行了,越来越多的企业/网站都开始往这个方向靠拢。


那么,为什么要选择前后端分离呢?前后端分离对实际开发有什么好处呢?

为什么选择前后端分离


1.在以前传统的网站开发中,前端一般扮演的只是切图的工作,只是简单地将UI设计师提供的原型图实现成静态的HTML页面,而具体的页面交互逻辑,比如与后台的数据交互工作等,可能都是由后台的开发人员来实现的,或者是前端是紧紧的耦合后台。

比如,以前淘宝的Web基本上都是基于MVC框架webx,架构决定了前端只能依赖后端。所以他们的开发模式依然是,前端写好静态demo,后端翻译成VM模版,这种模式的问题就不说了,被吐槽了很久


2.而且更有可能后台人员直接兼顾前端的工作,一边实现API接口,一边开发页面,两者互相切换着做,而且根据不同的url动态拼接页面,这也导致后台的开发压力大大增加。前后端工作分配不均。不仅仅开发效率慢,而且代码难以维护


而前后端分离的话,则可以很好的解决前后端分工不均的问题,将更多的交互逻辑分配给前端来处理,而后端则可以专注于其本职工作,比如提供API接口,进行权限控制以及进行运算工作


而前端开发人员则可以利用nodejs来搭建自己的本地服务器,直接在本地开发,然后通过一些插件来将api请求转发到后台,这样就可以完全模拟线上的场景,并且与后台解耦。前端可以独立完成与用户交互的整一个过程,两者都可以同时开工,不互相依赖,开发效率更快,而且分工比较均衡


如何做到前后端分离


(以下的内容都是基于我们的电影购票网站来讨论的)
前端的技术框架是: vue全家桶+nodejs+express(实现的是单页面(SPA)应用)
首先,先分清楚前后端的工作


1.前端的工作:实现整一个前端页面以及交互逻辑,以及利用ajax与nodejs服务器(中间层)交互


2.后端的工作:提供API接口,利用redis来管理session,与数据库交互


我们项目的整一个架构如下:



接下来进入正题,如何实现前后端分离


一般来说,要实现前后端分离,前端就需要开启一个本地的服务器来运行自己的前端代码,以此来模拟真实的线上环境,并且,也是为了更好的开发。因为你在实际开发中,你不可能要求每一个前端都去搭建一个java(php)环境,并且在java环境下开发,这对于前端来说,学习成本太高了


但如果本地没有开启服务器的话,不仅无法模拟线上的环境,而且还面临到了跨域的问题,因为你如果写静态的html页面,直接在文件目录下打开的话,你是无法发出ajax请求的(浏览器跨域的限制),因此,你需要在本地运行一个服务器,可是又不想搭建陌生而庞大的java环境,怎么办法呢


nodejs正好解决了这个问题。在我们项目中,我们利用nodejs的express框架来开启一个本地的服务器,然后利用nodejs的一个http-proxy-middleware插件将客户端发往nodejs的请求转发给真正的服务器,让nodejs作为一个中间层。这样,前端就可以无忧无虑的开发了


由于前后端分离后,前端和后台同时开发时,就可能遇到前端已经开发好一个页面了,可是却等待后台API接口的情况。


比如说A是负责前端,B是负责后台,A可能用了一周做好了基本的结构,并且需要API接口联调后,才能继续开发,而此时B却还没有实现好所需要的接口,这种情况,怎么办呢?在我们这个项目里,我们是通过了mock来提供一些假数据,我们先规定好了API接口,设计出了一套API文档,然后我们就可以通过API文档,利用mock(http://mockjs.com)来返回一些假数据,这样就可以模拟发送API到接受响应的整一个过程,因此前端也不需要依赖于后端开发了,可以独立开发,等到后台的API全部设计完之后,就可以比较快速的联调


为什么要引入nodejs作为中间层


前面的我发的项目结构图中,已经表明,在这个项目里,我们将nodejs作为中间层...


那么,为什么我们要特地引入nodejs呢?直接用java做不就行了吗?


我觉得引入nodejs主要是为了分层开发,职责划分,nodejs作为前端服务器,由前端开发人员负责,前端开发人员不需要知道java后台是如何实现的,也不需要知道API接口是如何实现的,我们只需要关心我们前端的开发工作,并且管理好nodejs前端服务器,而后台开发人员也不需要考虑如何前端是如何部署的,他只需要做好自己擅长的部分,提供好API接口就可以;


nodejs本身有着独特的异步、非阻塞I/O的特点,这也就意味着他特别适合I/O密集型操作,在处理并发量比较大的请求上能力比较强,因此,利用它来充当前端服务器,向客户端提供静态文件以及响应客户端的请求,我觉得这是一个很不错的选择。


前端服务器如何部署


nodejs前端服务器的职责


1.作为静态文件服务器,当用户访问网站的时候,将index.html以及其引入的js、css、fonts以及图片返回给用户


2.负责将客户端发来的ajax请求转发给后台服务器


其实前端服务器的部署工作是算比较简单的,具体有以下两个点:

1.将开发完的前端代码,利用webpack打包成静态压缩文件

2.在服务器上,利用pm2负载均衡器来执行以下的代码来开启服务器:


评论区有人提到有一个不错的文章..


我看了下觉得写得确实很详细,大家也可能看一下:https://segmentfault.com/a/1190000009329474?_ea=2038402 (感觉这就是业务与专业的区别哈哈)


(PS:其实也有一个做法,就是用nginx来做反向代理,负责转发请求,根据客户端访问的url把这个请求转发到不同的服务,比如访问/api/*的请求,就转发到后台服务,访问其它的请求,就转发到nodejs服务)


以上,就是我对于前后端分离的一些看法,以及一些实践,如果大家有什么好的想法,欢迎交流。本次项目代码的地址为:https://github.com/chenjigeng/filmshopping


最后附上

陈纪庚博客http://www.cnblogs.com/chenjg/p/6992062.html

欢迎转发留言



登录查看更多
0

相关内容

网站后台指网站后台,有时也称为网站管理后台,是指用于管理网站前台的一系列操作,如:产品、企业信息的增加、更新、删除等。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
57+阅读 · 2020年6月26日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【反馈循环自编码器】FEEDBACK RECURRENT AUTOENCODER
专知会员服务
22+阅读 · 2020年1月28日
姿势服装随心换-CVPR2019
专知会员服务
34+阅读 · 2020年1月26日
可解释推荐:综述与新视角
专知会员服务
111+阅读 · 2019年10月13日
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
转岗产品经理,花了3个月都做不好需求工作
人人都是产品经理
10+阅读 · 2019年9月16日
数据库之架构:主备+分库?主从+读写分离?
架构文摘
8+阅读 · 2019年4月23日
我是怎么走上推荐系统这条(不归)路的……
全球人工智能
11+阅读 · 2019年4月9日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
快乐的迁移到 Python3
Python程序员
5+阅读 · 2018年3月25日
Pytorch还是Tensorflow?英伟达工程师帮你总结了
人工智能头条
5+阅读 · 2017年10月27日
Compositional Generalization in Image Captioning
Arxiv
3+阅读 · 2019年9月16日
The Evolved Transformer
Arxiv
5+阅读 · 2019年1月30日
Arxiv
4+阅读 · 2018年7月4日
Arxiv
6+阅读 · 2018年5月18日
Arxiv
3+阅读 · 2012年11月20日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
57+阅读 · 2020年6月26日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【反馈循环自编码器】FEEDBACK RECURRENT AUTOENCODER
专知会员服务
22+阅读 · 2020年1月28日
姿势服装随心换-CVPR2019
专知会员服务
34+阅读 · 2020年1月26日
可解释推荐:综述与新视角
专知会员服务
111+阅读 · 2019年10月13日
相关资讯
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
转岗产品经理,花了3个月都做不好需求工作
人人都是产品经理
10+阅读 · 2019年9月16日
数据库之架构:主备+分库?主从+读写分离?
架构文摘
8+阅读 · 2019年4月23日
我是怎么走上推荐系统这条(不归)路的……
全球人工智能
11+阅读 · 2019年4月9日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
快乐的迁移到 Python3
Python程序员
5+阅读 · 2018年3月25日
Pytorch还是Tensorflow?英伟达工程师帮你总结了
人工智能头条
5+阅读 · 2017年10月27日
相关论文
Compositional Generalization in Image Captioning
Arxiv
3+阅读 · 2019年9月16日
The Evolved Transformer
Arxiv
5+阅读 · 2019年1月30日
Arxiv
4+阅读 · 2018年7月4日
Arxiv
6+阅读 · 2018年5月18日
Arxiv
3+阅读 · 2012年11月20日
Top
微信扫码咨询专知VIP会员