Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >前后端分离实践

前后端分离实践

原创
作者头像
gglinux
修改于 2019-02-22 16:48:01
修改于 2019-02-22 16:48:01
1.3K0
举报
文章被收录于专栏:gglinux.comgglinux.com

最早从Web2.0 Ajax技术开始兴起,就有提前后端分离了。从Gmail的单页应用,到现在的单页应用层出不穷。浏览器渲染引擎也一直在突破,越来越多的交互、计算放在了浏览器这一层。传统后端MVC架构,变成了前后端的MVC。后台的接口变成了模型层,逻辑处理层从CGI变成了JavaScript,展示层则还是标记语言HTML和CSS

为什么要做前后端分离

当前项目从立项到2018年,已经有10余年的历史了。前端的技术栈是jQuery。后台是基于10年前的PHP框架,中间也经历过多次重构。但总体架构还是LNMP,PHP渲染的,存在的问题比较多。

  • 从维护侧看:1)业务逻辑复杂,充斥着很多明眼不可见的业务。导致更改bug很容易引发其他的bug。2)代码巨长无比,可读性差。3)代码结构性差、分层模糊,逻辑层的代码充斥在View层中。找代码的时间占据解决bug的大部分时间。4)前端尚处在刀耕火种的年代,前端规范差、压缩混淆不彻底,难以适应新的浏览器渲染技术。
  • 从性能侧看:单一请求,往往读取比页面所需要多得多的数据。频繁的拉取数据,不仅对后端资源是一种浪费,也会导致单一请求耗时过长。
  • 从用户侧看:因为多页应用的频繁刷新,新的URL都需要页面重载。单一页面会触发多个HTTP请求(静态资源、Ajax)。这两个因素导致用户等待时间过久。
  • 从开发人员侧看:1)开发者往往热衷于新技术。学习新技术不仅有利于团队技术成长,也有利于发挥成员的积极性。2)团队成员本身具有全栈开发的能力,转换成前后端分离的模式成本较低。
  • 从业务本身来看:产品天生适合采用单页应用,无需SEO。

前端方案选型

基于上述原因,促成团队下定决心进行正式的改造。新的项目,由于没有历史包袱,采用开源框架是水到渠成的。但对于已有项目而言,采用新框架意味着要对现有代码进行彻底重构。结合自身业务来讲,自研框架可以完美的兼容现有的前端组件库。其次,自研对框架细节的把握程度也会更强。

但是从长期来看,自研意味着需要专业人员长期维护。采用自研,对团队而言是摸着石头过河。我们需要改造业务,需要兼容现有组件,需要考虑长期的维护性,需要考虑安全和性能,需要考虑前端开发流程,还有新成员的上手程度。最重要的还有改造进度和成本。

在前端方案的落地中,团队花费了很长时间进行框架的预研,最终选择了Vue。对业务而言,框架需要提供双向数据绑定、模版引擎、组件化、前端路由,还有能与jQuery组件进行通信,定制化程度较高。

  1. React意味着全局替换,替换成本过高,成果成型慢
  2. JSX、TS对偏后台同学而言,学习门槛较高
  3. 在国内Vue显然更受欢迎,文档、社区也更活跃
  4. React许可协议的具有潜在的不可控性
  5. 前端同学对Vue理解更深刻

实际开发遇到的问题

1.与jQuery组件通信:庞大的现有组件,短时间内非常难Vue化改造。必须采用hack的方式完成jQuery组件和Vue业务的通信。最终是选择发布订阅模式,收集组件的变更。如果Vue需要知道jQuery组件的变更,jQuery组件需要显式$emit通知到Vue。

2.状态管理:状态管理的加入,会增加开发门槛,使用不恰当也会导致乱用。但如果后续引入,又会增加回炉再造的成本。其次不引入状态管理,全局变量的处理也是问题。

3.样式的规范管理:前端的样式规范,也是需要改造的痛点。最终选用业界使用较成熟的BEM规范。

后端方案选型

这些年后端的发展与前端相比,就显得小巫见大巫了。后端现有代码量更大,如果仅仅为了PHP的命名空间、自动加载、依赖注入,就去更换框架就有些得不偿失了。现有的框架性能、类的加载、路由、关系对象映射模型,已经有较好的方案来支撑。

前后端分离对后端而言,最大的改造点,在于接入层的处理,即数据的输入输出方式。对接口而言,性能对前后端分离的体验至关重要,也是我们重点考虑的问题,我们加入了HTTP协议层的缓存。在代码规范、log管理、安全校验(参数过滤)、业务安全(越权)、频率限制、签名验证、登陆验证等问题,也在框架层面做了完善和加强。最后基于前后端分离流程的完善,我们使用Apidoc作为接口文档的管理工具。

后续的工作

前端

  1. 开发规范:Js代码规范、CSS规范、组件规范,自动检测工具支撑。
  2. 代码结构:文件结构划分。
  3. 测试支撑:UI自动化测试、前端构建测试。
  4. 运维监控:前端日志上报、前端错误监控、优化分析。
  5. 运营支撑:点击流、访问转化分析。
  6. 开发调试:开发调试工具的完善。
  7. 运维部署:灰度引入、前端发布流程及工具完善。

后端

  1. 业务接口性能和安全:随着业务改造,新接口的性能及伴随的业务安全。
  2. 共用逻辑的拆分和复用:和现有模式的代码复用和拆分,服务层的完善。

一些观点

  1. 没有工具支撑的规范,抵不过人的惰性。
  2. 动态优化的方法论。改造之前想想两年后你期望项目长什么样,反过来推导现在应该怎么做。
  3. 理解业务是重点,任何框架都会被时代抛弃,选择最适合业务的。
  4. 系统性思维,无论前端还是后端,都具等同性。
  • 开发流程:代码管理、开发调试、代码编译、项目构建、模块管理、配置部署、测试支撑、性能检测、安全扫描、规范约束、统计分析、运营支撑。
  • 开发指标:可用性、可靠性、可维护性、安全性。

希望转载的朋友能够尊重作者的劳动成果,加上转载地址。谢谢!

http://gglinux.com/2017/04/15/IM_design/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前后端分离的陷阱
不管你设计的系统架构是怎么样,最后都是你的组织内的沟通结构胜出。这个观点一直在组织内不断地被证明,但也不断地被忽略。
ThoughtWorks
2023/04/28
3290
前后端分离的陷阱
浅谈前后端分离(上篇)
前后端分离是一种架构模式,说通俗点就是后端项目里面看不到页面(JSP|HTML),后端给前端提供接口,前端调用后端提供的REST风格接口就行,前端专注写页面(html|jsp)和渲染(JS|CSS|各种前端框架);后端专注写代码就行。前后端分离的核心:后台提供数据,前端负责显示
lyb-geek
2022/03/10
5.9K0
浅谈前后端分离(上篇)
毫秒级突破!腾讯技术团队是如何做前端性能优化的?
搜狗百科是一个服务于互联网用户的高质量内容平台。文章主要介绍团队在梳理业务时发现百科无线前端项目在研发流程、架构设计、研发效率、页面性能等方面存在诸多问题和痛点。作者团队是如何对这个系统进行升级和改造的?又是如何分析出怎么样的优化方案才是最适合业务的?欢迎各位开发者继续阅读~
腾讯云开发者
2023/07/31
5920
毫秒级突破!腾讯技术团队是如何做前端性能优化的?
前后端分离实践的架构设计
前后端分离的项目开发策略已经不是什么新鲜东西了,网上介绍这方面的文章非常多。我自己是在14年的时候接触到的,对这种开发策略一直爱不释手,不管新老项目都会首先用前后端分离的思维先去思考一番。从14年到现在在前后分离上面也实践了近3年的时间,项目大大小小的也差不多4,5个吧,但是却从来没有一个是自己觉得很满意的,其中的原由和心酸可能只有自己才能体会了。
用户1257393
2018/07/30
7180
前后端分离实践的架构设计
苏宁易购:前后端分离架构的落地思考
内容来源:2017 年 12 月 3 日,苏宁易购技术总监禹立彬在“互联网架构峰会”进行《前后端分离架构的落地思考》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。 阅读字数:2851 | 8分钟阅读 摘要 本次分享将为大家介绍前后端分离的存在意义以及典型业务场景,接下来会细致的介绍前后端分离的技术利弊,最后根据苏宁的经验来谈一谈渐进式前后端分离。 嘉宾演讲视频及PPT回顾:http://suo.im/4WlSl9 为什么要前后端分离 前后端分离本质上
IT大咖说
2018/06/04
1.4K3
前后端分离及后端分层
原文链接:https://mp.weixin.qq.com/s/5SwQMIJ6Amv4m_8cIOaw3Q
chenchenchen
2019/09/02
2K0
前后端分离及后端分层
一场由React引发的前后端分离架构的思考
摘要 以React技术栈为主分享我们在大规模企业应用建设过程中遇到的问题,对前后端分离架构的思考,前后端分离的技术方案,前后端分离过程中的实践经验,前后端分离带来的效果与价值,以及目前存在的问题与未来可能的尝试。 嘉宾演讲视频及PPT回顾:http://suo.im/2A3F57 应用的现状 我们的应用拥有接近100w的用户、3K+的QPS、5亿+的单表数据、万亿级别的资金流,但是同样也面临着诸多问题。 首先是颜值低,换肤受限、无法集成更好的前端框架和组件。然后是前后端的高度耦合使得无法快速的响应业务变化,
IT大咖说
2018/04/03
2.3K0
一场由React引发的前后端分离架构的思考
为什么一定要前后端分离?
原文: http://www.cnblogs.com/rjzheng/p/9185502.html
Java学习
2018/07/25
9700
为什么一定要前后端分离?
前后端分离架构:Web 实现前后端分离,前后端解耦
前后端分离已成为互联网项目开发的业界标准使用方式,通过 nginx + tomcat 的方式(也可以中间加一个 nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS 等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。
业余草
2021/12/06
2.5K0
前后端分离架构:Web 实现前后端分离,前后端解耦
软件架构之前后端分离与前端模块化发展史
在现行的软件架构中,前端和后端是分离的,即前端只专注于页面渲染,而后台专注于业务逻辑,前端和后端是两个不同的工种,而前后端交互最常见的方式就是通过接口。
xiangzhihong
2022/11/30
1.4K0
前后端分离实践
前后端分离并不是什么新鲜事,到处都是前后端分离的实践。然而一些历史项目在从一体化 Web 设计转向前后端分离的架构时,仍然不可避免的会遇到各种各样的问题。由于层出不穷的问题,甚至会有团队质疑,一体化好好的,为什么要前后端分离? 说到底,并不是前后分离不好,只是可能不适合,或者说……设计思维还没有转变过来…… 一体式 Web 架构示意 前后分离式 Web 架构示意 为什么要前后端分离 比为什么要前后端分离更现实的问题是什么时候需要前后端分离,即前后端分离的应用场景。 说起这个问题,我想到了 2011
企鹅号小编
2018/02/06
1.6K0
前后端分离实践
聊聊前后端分离接口规范
随着互联网的高速发展,前端页面的展示、交互体验越来越灵活、炫丽,响应体验也要求越来越高,后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻,从而导致前后端研发各自专注于自己擅长的领域深耕细作。
用户1516716
2019/10/23
5190
聊聊前后端分离接口规范
vivo 低代码平台【后羿】的探索与实践
本文主要从前后端分离的低代码方案、自研高性能渲染引擎、高效的可视化配置方案、千亿级内容投放、低代码如何与传统开发共存等五个维度vivo在低代码平台方面的实践经验,其中也会涉及到动态交互如何运用低代码来编排和我们在提高配置效率方面的全面探索。
2020labs小助手
2022/12/26
9440
基于NodeJS的全栈式开发(基于NodeJS的前后端分离)【转】
随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本。为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本。
一个会写诗的程序员
2018/08/17
3.7K0
基于NodeJS的全栈式开发(基于NodeJS的前后端分离)【转】
我的职业是前端工程师【七】:你真的懂前后端分离吗?
前后端不分离,是怎样的?大概也只有我们这些『老古董』们,才对此有更多感受。不对,那些写 React 的人,可能会对此也有一些体会。 今天,如果有一个前端工程师说,不知道前后端分离是什么。那么,要么是刚
Phodal
2018/01/29
1.1K0
前后端分离后的前端时代,使用前端技术能做哪些事?
什么是前后端分离,要区分前端和后端,需要有个明确的界限。一般,用户可以直接看到的东西,都是属于前端的范畴,除了前端之外都属于后端了。
一墨编程学习
2018/10/27
2.3K0
从Web演化史看前后端分离
前言 随着公有云产品的快速发展,产品线越来越多,功能越来越丰富。但在业务发展的同时,原有的前后端一体的开发模式与架构已经呈现出捉襟见肘的状况。为了能够更好地服务客户,提高产品交付效率,公有云产品组进行了前后端分离工作的探索与实践。在过去的几个月,已经成功实现多个产品的前后端分离交付,一方面提高了产品开发效率,另一方面,也更加明确了前后端开发工程师的职责,使得前后端开发工程师能够更专注于自身领域的技能提升。在本文中,我们主要介绍为什么要做前后端分离以及如何做前后端分离,具体的技术实践我们将在下一篇中介绍。
企鹅号小编
2018/03/01
3K0
从Web演化史看前后端分离
一起玩转微服务(9)——前后端分离
在传统的web应用开发中,大多数的程序员会将浏览器作为前后端的分界线。将浏览器中为用户进行页面展示的部分称之为前端,而将运行在服务器,为前端提供业务逻辑和数据准备的所有代码统称为后端。 由于前后端分离这个概念相对来说刚出现不久,很多人都是只闻其声,不见其形,所以可能会对它产生一些误解,误以为前后端分离只是一种web应用开发模式,只要在web应用的开发期进行了前后端开发工作的分工就是前后端分离。 其实前后端分离并不只是开发模式,而是web应用的一种架构模式。在开发阶段,前后端工程师约定好数据交互接口,实现并行开发和测试;在运行阶段前后端分离模式需要对web应用进行分离部署,前后端之前使用HTTP或者其他协议进行交互请求。 前后端分离原则,简单来讲就是前端和后端的代码分离也就是技术上做分离。推荐的模式是最好直接采用物理分离的方式部署,进一步促使进行更彻底的分离。不要继续以前的服务端模板技术,比如JSP ,把Java JS HTML CSS 都堆到一个页面里,稍复杂的页面就无法维护。
cloudskyme
2020/06/23
1.6K0
一起玩转微服务(9)——前后端分离
前后端分离的接口规范
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/24
5990
前后端分离必备的接口规范,十分接地气!
随着互联网的高速发展,前端页面的展示、交互体验越来越灵活、炫丽,响应体验也要求越来越高,后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻,从而导致前后端研发各自专注于自己擅长的领域深耕细作。
Java技术栈
2019/07/23
2K0
相关推荐
前后端分离的陷阱
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档