`

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

阅读更多

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

 

尝试与改变

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

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

复制代码
<!--服务器端渲染 -->
<select>
    <option value=''>--请选择所属业务--</option>
    {% for p in p_list %}
    <option value="{{ p }}">{{ p }}</option>
    {% endfor %}
</select>
复制代码

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

复制代码
<!--前端渲染 -->
<template>
    <select id="rander">
        <option value=''>--请选择所属业务--</option>
        <option v-for="list in lists" :value="list" v-text="list"></option>
    </select>
</template>

<script>
export default {
    data: {
        return {
            lists: ['选项一', '选项二', '选项三', '选项四']
        }
    },
    ready: function () {
        this.$http({
            url: '/demo/',
            method: 'POST',
        })
        .then(function (response) {
            this.lists = response.data.lists // 获取服务器端数据并渲染
        })
    }
}
</script>
复制代码

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

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

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

3.局部性能提升

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

4.降低维护成本

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

 

心得与体会

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

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

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

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

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

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

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

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

 

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

分享到:
评论

相关推荐

    前后端分离做权限控制设计.docx

    ### 前后端分离下的权限控制设计 随着前端框架如React、Angular和Vue的兴起,前后端分离架构成为主流趋势。然而,这种架构模式带来了新的挑战,尤其是关于权限控制的问题。本文旨在探讨如何在前后端分离的架构下...

    前后端分离实现同步/异步文件上传

    后端:springbbot 前端:vue+elementUI+axios 前后端分离方式 分别尝试同步异步两种方法进行文件上传 1

    前后端分离+Vue和html两种实现方式+SpringBoot++下载即可跑通

    使用前后端分离实现,后端使用SpringBoot,前端采用两种方式,一种是原生Html,一种是集成的Vue-cli,后端的相关参数我已经配置好了,大家可以直接下载运行尝试了,如果想要进一步创建自己的人脸库,可以根据我的...

    前后端分离的校友信息管理系统(适合用来当作毕业设计)

    整个系统所采用的技术难度不高,前后端交互采用axios,对于学习前端的同学来说,可以作为一次node作为后端的尝试,个人对koa的整个使用做了一次封装,整个目录结构也可以作为参考学习。对于想要当作毕业设计的同学来...

    java云盘后端服务器+前端electron前后端分离式+简单部署教程

    云盘源码java后端服务器+前端electron前后端分离式自从学习了一点点electron基础命令(也就是几个标准单词),我就突发奇想,想写一款桌面基本的应用,但是也不知道该写什么demo,然后就这样子,想啊想…,直到发生了...

    前后端分离的思考与实践

    痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的NodeJS,试图探索一条全新的前后端分离模式。随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足...

    vue + django 前后端分离

    通过以上步骤,我们成功实现了基于Vue.js和Django的前后端分离架构。这种方式不仅可以提升用户体验,还能有效降低开发难度。当然,在实际项目开发过程中还需要考虑到性能优化、安全性等问题,但总体来说这是一个非常...

    AlpacaSpaLaravel是用AlpacaSpaLaravel前后端分离开发的一款后台管理系统的DEMO

    首先,我们要理解什么是Alpaca-Spa。Alpaca-Spa是一个前端开发框架,旨在简化单页应用(SPA)的构建过程,提供了一套完整的UI组件库和路由系统,让开发者能够快速构建出具有现代交互体验的网页应用。它的核心理念是...

    基于SpringBoot +Vue Element UI 实现前后端分离系统源码+数据库.zip

    基于SpringBoot +Vue Element UI 实现前后端分离源码+数据库这个小项目是一个 springboot 和 vue 的案例,服务器管理信息,由用户申请服务器和释放服务器,查看消息。 当时需求很简单,一个服务器信息的管理,一个...

    Rain-Cloud云盘源码 java后端服务器+前端electron 前后端分离式

    前后端分离式开发demo,自从学习了一点点electron基础命令(也就是几个标准单词),我就突发奇想,想写一款桌面基本的应用,但是也不知道该写什么demo,然后就这样子,想啊想…,直到发生了震惊国人pandownload事件,...

    若依前后端分离登录密码 加密传输

    在现代Web应用开发中,前后端分离是一种常见的架构模式,它可以提高系统的可维护性和扩展性。"若依前后端分离登录密码加密传输"是针对这种模式下如何安全处理用户登录密码的重要实践。在这个场景中,我们将关注Vue....

    【Rain-Cloud云盘源码】java后端服务器+前端electron前后端分离式+简单部署教程

    前后端分离式开发demo,自从学习了一点点electron基础命令(也就是几个标准单词),我就突发奇想,想写一款桌面基本的应用,但是也不知道该写什么demo,然后就这样子,想啊想…,直到发生了震惊国人pandownload事件,...

    Spring Boot+Vue前后端分离,如何避免前端页面 404

    在前后端分离的开发模式下,Spring Boot与Vue.js结合应用常常会遇到前端页面404错误的问题。这个问题主要是由于前端负责页面跳转,而后端仅提供数据接口导致的。传统的权限管理方式不再适用于这种架构,因此我们需要...

    前后端分离模式下的权限设计方案.docx

    在深入探讨前后端分离模式下的权限设计方案之前,我们需要明确权限控制的基本概念。权限控制是指在信息系统中,通过对用户身份验证以及用户角色定义来限制用户访问特定资源的能力。 - **资源**:在系统中,所有可供...

    前后端未分离的单点登录

    在这个场景下,我们讨论的是“前后端未分离”的单点登录实现,这通常意味着前端和后端代码在同一项目中,没有采用现代的前后端分离架构。 1. **单点登录原理**: SSO的核心思想是通过一个中心认证服务(Central ...

    若依-前后端分离项目学习

    ### 若依-前后端分离项目学习 #### 一、若依简介 若依是一个基于Spring Boot与Vue技术栈构建的前后端分离项目。该项目旨在帮助开发者快速搭建一套完整的Web应用框架,同时也为学习者提供了一个良好的实践平台。...

    详解Vue微信授权登录前后端分离较为优雅的解决方案

    在前后端分离的架构中,实现Vue微信授权登录是一个常见的需求。这种优雅的解决方案主要针对Vue.js单页应用(SPA)场景,确保用户在访问特定页面时能够顺畅地完成微信授权,同时保持良好的用户体验。以下将详细介绍这...

    前后端分离权限设置(前端 iview-admin实现).zip

    在现代Web应用开发中,前后端分离是一种常见的架构模式,它将前端用户界面与后端数据处理服务分离开来,从而提高开发效率和系统可维护性。本项目着重讲解如何在采用前端框架iview-admin实现的管理后台中进行权限设置...

    基于SSM框架设计的博客园系统,前后端分离,数据库采用MySQL.zip

    总结起来,这个项目为学习SSM框架和前后端分离提供了实际案例,可以帮助开发者加深对这些技术的理解,同时通过MySQL数据库的使用,可以掌握数据库设计和管理的基本技能。下载后,按照README.md文件的指示,一步步...

    毕设项目:基于springboot+ssm+swagger前后端分离的咨询管理系统.zip

    这是一个基于Spring Boot、SSM(Spring、Spring MVC、MyBatis)和Swagger的前后端分离的咨询管理系统项目,适用于本科毕业设计。这个项目的核心技术栈是Java,利用了Spring Boot的便捷性和强大的依赖管理功能,使得...

Global site tag (gtag.js) - Google Analytics