我们为什么要尝试前后端分离

前端 前后端分离

这不是一篇纯技术文章,而是一篇分享我个人在前后端分离路上收获的点点滴滴的文章,以此来为准备尝试前后端分离或者想了解前后端分离的童鞋做一个大体的讲解。

尝试与改变

如果你没有尝试过前后端分离的工作流程,那么可以先试想一下这样的流程改变:

把流程从

PM:“我要这个功能”

后端:“这个先找前端做个模板”

前端:“模板做完了”

后端:“我来对接一下,这里样式不对”

前端:“我改完了”

后端:“功能交付”

PM:“春节要加这个活动”

后端:“这个先找前端改个模板”

前端:“模板做完了”

后端:“我来对接一下,这里样式不对”

前端:“我改完了”

后端:“功能交付”

变成

PM:“我要这个功能”

前端:“我要接口”

后端:“接口完成了”

前端:“我来对接一下,功能交付”

PM:“春节要加这个活动”

前端:“需要增加接口”

后端:“接口完成了”

前端:“我来对接一下,功能交付”

由此可见,前后端分离的主要概念就是:后台只需提供API接口,前端调用AJAX实现数据呈现。

现状与分歧

作为一名前端开发人员,我们应该尝试一些新颖的技术,完善每一个细节性的问题,不断突破自我。虽然前后端分离已经算不上什么新颖的技术或思路,但是目前很多后台开发人员甚至前端开发人员都没有接触过。

据我个人的了解,如果在一个部门里,部门人员全是后台开发人员,前端的一些页面也是由后台人员完成的,那么前后端分离对于他们而言可能是一片未知的领域,项目大多是前后端强耦合的,甚至不存在前端的概念。

在不重视前端的公司或部门,不了解前后端分离这也无可厚非。在我刚进入一个全是后台开发人员的部门的时候,整个部门就我一个前端,我刚开始的主要职责就是负责项目前端页面的制作和JS功能的实现,虽然部门有前后端分离的意识,但都不知该如何去实践。在那时,部门的后台人员认为前后端分离就是后台不再需要写HTML和JS了,可以交给前端来做了,然而这只能叫做前后端分工。

以上讲述的是一种情况: 不了解前后端分离,也不知如何去实践的。下面还有一种情况:了解前后端分离,但不想去尝试的。

针对第二种情况,很多人也做过相应的解释,其实这就涉及到“前后端分离的利弊”问题。很多后台人员会认为自己所做的那一套没有问题,即便后台套用前端html也是司空见惯,一直是大势所趋,后台MVC框架也是这么推荐使用的,很合理。这时候前端开发人员在部门中的话语权往往是不够的,或者认为后台开发人员的意见永远是对的,没有主观性。

相反,也有可能是后台开发人员非常推荐前后端分离,而前端开发人员不想去实践的。这时候前端会认为后台开发人员在瞎折腾,之前前后端不分离项目做起来都很顺利,分离了反而会给自己带来额外的工作量和学习成本,而这就取决于前端的技术能力和见识了。

当然,这也是我个人认为的前后端分离所存在的一些现状和分歧所在。

场景与要求

对于前后端分离的应用场景,不是所有的场景都适合,但是大多数项目都能够通过前后端分离来实现。

由于我主要从事企业级后台应用的前端开发工作,个人认为对于后台应用的开发来说,前后端分离带来的利是远大于弊的。

大多数后台应用我们都可以做成SPA应用(单页应用),而单页应用最主要的特点就是局部刷新,这通过前端控制路由调用AJAX,后台提供接口便可以实现,而且这样的方式用户体验更加友好,网页加载更加快速,开发和维护成本也降低了不少,效率明显提升。

同样的,在展示类网站和移动APP页面中前后端分离也同样试用。前后端不分离的情况下,服务端要单独针对Web端做处理,返回完整HTML,这样势必增加服务端的复杂度,可维护性差,而web端需要加载完整的HTML,一定程度上影响网页性能,这对于移动端性能为王的地方非常的不友好。

随着前端技术的发展和迭代,前端MVC框架应运而生,利用目前主流的前端框架,如React、Vue、Angular等我们可以轻松的构建起一个无需服务器端渲染就可以展示的网站,同时这类框架都提供了前端路由功能,后台可以不再控制路由的跳转,将原本属于前端的业务逻辑全部丢给前端,这样前后端分离可以说是最为彻底。下面是一段前端控制路由的代码:

'use strict'

export default function (router) {

   router.map({

       '/': {

           component: function (resolve) {

               require(['./PC.vue'], resolve)

           }

       },

       '/m/:params': {

           component: function (resolve) {

               require(['./Mobile.vue'], resolve)

           }

       },

       '/p': {

           component: function (resolve) {

               require(['./PC.vue'], resolve)

           },

           subRoutes: {

               '/process/:username': {

                   component: function (resolve) {

                       require(['./components/Process.vue'], resolve)

                   }

               }

           }

       }

   })

}

前后端分离的实现对技术人员尤其是前端人员的要求会上升一个层次,前端的工作不只是切页面写模板或是处理一些简单的js逻辑,前端需要处理服务器返回的各种数据格式,还需要掌握一系列的数据处理逻辑、MVC思想和各种主流框架。

优势与意义

对于前后端分离的意义我们也可以看做是前端渲染的意义,我主要总结了下面四点:

1. 彻底解放前端

前端不再需要向后台提供模板或是后台在前端html中嵌入后台代码,如:

   {% for p in p_list %}

   {% endfor %}

这是前后端耦合的,可读性差。

   

export default {

   data: {

       return {

           lists: ['选项一', '选项二', '选项三', '选项四']

       }

   },

   ready: function () {

       this.$http({

           url: '/demo/',

           method: 'POST',

       })

       .then(function (response) {

           this.lists = response.data.lists // 获取服务器端数据并渲染

       })

   }

}

上面是前端渲染的一段代码,前端通过AJAX调用后台接口,数据逻辑放在前端,由前端维护。

2. 提高工作效率,分工更加明确

前后端分离的工作流程可以使前端只关注前端的事,后台只关心后台的活,两者开发可以同时进行,在后台还没有时间提供接口的时候,前端可以先将数据写死或者调用本地的json文件即可,页面的增加和路由的修改也不必再去麻烦后台,开发更加灵活。

3. 局部性能提升

通过前端路由的配置,我们可以实现页面的按需加载,无需一开始加载首页便加载网站的所有的资源,服务器也不再需要解析前端页面,在页面交互及用户体验上有所提升。

4. 降低维护成本

通过目前主流的前端MVC框架,我们可以非常快速的定位及发现问题的所在,客户端的问题不再需要后台人员参与及调试,代码重构及可维护性增强。

心得与体会

一路走来,项目一个接着一个,从一开始的后台控制路由、后台渲染页面到现在的前端控制路由、前端渲染数据,工作流程和方式都发生了很大的变化。每当遇到下面情形的时候,我都会为前后端分离带来的优势而感慨一番:

项目一开始制作前端页面的时候,我不再需要后台给我配置服务器环境了

项目的前端文件可以在需要调用后台接口的时候丢进服务器就好了,完全不需要事先放进去

增加一个项目页面需要配置路由的时候不再需要让后台同事给我加了,自己前端搞定

前端文件里不再掺杂后台的代码逻辑了,看起来舒服多了

页面跳转比之前更加流畅了,局部渲染局部加载非常快速

页面模板可以重复使用了,前端组件化开发提高了开发效率

等等。面对快速发展的前端,我们应该去适应其带来的工作方式和流程的改变,目前的前后端分离的工作方式必然是今后的趋势所在,作为一个前端开发人员,我们应当承担这个普及前端新知识和改变现状的职责。

只有尝试了才知道适不适合,只有切身体会才能辨别谁是谁非,本文并非推崇一定要前后端分离,而是希望大家在合适的应用场景下去尝试前后端分离,在丰富经验的同时或许也会擦出火花

2016年08月12日

4ever

支持,公司最开始也没前端,都是后台搞后台兼前端,后来来了个新主管,他就要求我们前后端分离,还给我们一套前后端的协议书,然后我就开始了前端的工作,爽

0

2016年08月12日

劳卜

有一个优秀的leader就会有一个优秀的团队

0

2016年08月12日

二次元李健

前后端分离的事我们公司也推行了快一年多了,从nginx代理(解决跨域问题)加Ajax,到后面的nodejs加前端mvvm框架。谁用谁知道,效率提高很多

小结 前端处理(即前端用cros处理跨越,或者前端搭建一个nodejs转发,存在重复建设) nginx处理(最为灵活的方案) 后端支持跨越(无法改造其他微服务的接口) docs 前后端分离之后,如何保护你的API 前后端分离开发部署模式 前后端分离的情况下, 跨域问题有没有好的解决方案?修改 前后端分离解决跨域问题 Angular+Springboot

传统开发痛点: 前后端无法做到并行开发 1、前端需要后端环境的支持 2、html放在Server的模板引擎中,前端与html的操作难度提升,bug的出现和解决与前端不能第一时间操作到html而引起。 如果不使用代理,必须本地搭建Server环境 前后端沟通成本增加 Server需要关注模板里的渲染内容 前后端职责没有完全解耦 解决方案: ...

小编:听了这么多前后端分离,今天小编就来和各位好好聊一聊。编小:请问小编,前后端分离是什么?为什么要这么做?具体怎么做?小编:咳咳,前后端分离的问题啊。简单的说,就是前端负责浏览器端用户交互界面和逻辑等,显示数据;后端负责数据的处理和存储等,提供数据。要详细说……还是要具体到项目里理解,再编就编不...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,566评论 25 707
  • 尝试与改变 如果你没有尝试过前后端分离的工作流程,那么可以先试想一下这样的流程改变:把流程从PM:“我要这个功能”...
    超人不会飞jjw阅读 3,769评论 1 15
  • 本文系转载,原作者,普元,敖显奇 转载本文需保留此处版权声明:本文版权属于EAII企业架构创新研究院(微信号:ea...
    普元云计算阅读 4,921评论 8 96
  • 每个人内心都有一个舒适圈,而且都不太愿意走出圈外,因为外面有太多我们所不知,归根到底源自我们内心的恐惧-- 有...
    wuyunxing阅读 780评论 0 0
  • 已经忘了是怎么加入拆书帮这个大家庭的了。很庆幸自己加入了这个集体,在这里找到了很多温暖和感动。 这里有非常负责任的...
    王丽聪_waters阅读 205评论 0 0