专栏名称: 程序猿
本微信公众号:imkuqin,为程序员提供最新最全的编程学习资料的查询。目前已经开通PHP、C/C++函数库、.NET Framework类库、J2SE API查询功能。
目录
相关文章推荐
程序员之家  ·  自己工资 14K,找到月薪 ... ·  昨天  
OSC开源社区  ·  谷歌将“杀死”ChromeOS,计划将其合并 ... ·  4 天前  
OSC开源社区  ·  Node.js开始反击 ·  1 周前  
程序员的那些事  ·  B站知名up主何同学被指盗用开源项目,网友: ... ·  6 天前  
51好读  ›  专栏  ›  程序猿

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

程序猿  · 公众号  · 程序员  · 2016-09-18 23:06

正文

来自:一个萝卜一个坑 -博客园[http://www.cnblogs.com/luozhihao] 

链接:http://www.cnblogs.com/luozhihao/p/5761515.html

作者:微信公众号“前端呼啦圈”(Love-FED)


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


尝试与改变


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


把流程从


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中嵌入后台代码,如: