小项目需要前后端分离吗?
有网友提问:听说前后端分离是为了让前端人员专注前端,后端人员专注后端,但如果项目比较简单,并且总共也就几个人在开发,前后端分离还有意义吗?
今天我们邀请了 4 名淘系技术的前端以及后端工程师,结合他们自身在项目操作中的感受,给大家分享一些他们对于小项目前后端实际体验的总结,希望能够对你有帮助。
01
淘系技术部 逆葵脱离实际场景谈这个问题是没有意义的,毕竟技术架构的选择需要服务于业务。
02
淘系技术部 千灭可以从用户体验、开发效率和运维效率三方面来看待前后端是否分离。
我认为在绝大部分场景下,前后端分离优于不分离。
接下来我会从三个主要的场景来分析前后端分离与否:用户体验、开发效率和运维效率。
用户体验
如果你正在做一个门店点餐系统,那么用户对该系统最基本的要求就是界面美观、加载速度快。对于这种侧重于前端效果的项目,如果使用传统的前后端一体项目,界面交互方面,除非有专业的前端程序员,一般的服务端程序员是无法通过JSP来实现如果复杂的前端交互逻辑,并且在其中加上丰富的主题和动效的,极大的可能性就是UI画的是保时捷,开发出来是夏利。大家可以回忆下10年前的网站风格就可以想象了。加载速度方面,因为资源全部放在服务端,首次加载没有浏览器缓存,需要加载大量的js、css以及静态资源,这在今天几乎是不可接受的,即使将资源放在Ngnix服务器,也没办法做到极致加速。如果使用的前后端分离的开发模式,前端由前端项目负责,界面交互方面,可以直接使用现有的前端脚手架来实现,业内已经有专门设计师设计的UI框架供选择,均实现了丰富的动效和复杂交互,一键引入即可。加载速度方面,前端资源单独发布部署,可以通过cdn预热和极致加速。
对于侧重前端效果的项目,建议前后端分离。
开发效率
前后端一体的项目,仅在前端界面交互简单且变更频次低的服务型项目上占有微小优势,因为此类项目核心是服务,前端仅仅是服务调用入口,只是比postman调用接口稍微产品化一点点的界面而已,不需要投入前端人力,服务端可以顺手开发,这种场景下使用jsp成本最低,效率最高。
而对于任意一个对前端界面以及交互又要求,并且会长期迭代的项目,不管项目大小,使用前后端分离的效率都要比前后端一体要高,前后端分离可以通过定义服务接口并行开发,互不影响,实现双倍提效。专业的人做专业的事,并且专业的领域有更多专业的工具,可以达到事半功倍的效果。
前后端一体的适用场景非常有限,任何一个对前端交互有要求的项目,都应该采用前后端分离的方式去开发。
运维效率
前后端一体的项目,前后端完全耦合,一次部署可实现前后端同时上线,但是一旦服务端宕机,前端页面无法展示,影响全部用户,而且不管是服务端还是前端的迭代都需要重新发布,无法保证前后端互不影响,增大了迭代风险。
对于前后端分离项目,前后端由不同的应用承载,迭代和发布都可以独立进行,实现完全解耦,几乎没有依赖,服务端宕机可以由前端兜底页面交互降低影响面,单独运维极大降低迭代风险,在前端发展到如今,运维工具非常完善,成本很低,相对于诸多风险,单独运维带来的成本增加可以忽略不计。前后端分离在绝大部分场景下的运维效率高于前后端一体。
综上所述,前后端分离在当前的技术环境下已经是大势所趋,其在用户体验、开发效率以及运维效率上均领先于前后端一体的方案,在互联网技术深度发展的今天,行业对技术人员的要求从技术广度转变为技术深度,专业人做专业事,所以,即使小项目也依然推荐前后端分离!
03
淘系技术部 三半其实真正实践下来,分离也很快的,尝试一下就知道了。
先说结论:
基于现有的前后端技术和运维能力,即使是小项目,也建议前后端分离;当然如果说10年前技术还不成熟,前后端不分离也是项目快速上线的一个比较好的手段。
先谈下何为小项目
开发周期短的项目(两天内要上线)?
维护时间短的项目(这个项目用这次紧急用一下,下次就不用了)?
功能简单的项目(就一个简单的数据库查询,未来不会有需求变更)?
核心问题就是小项目的成本对比?
我的观点:无论项目有多大或者多小,要实现的产品功能肯定是不会变少的,基本的开发工作量差异并不大,那么就是前后端分离的运维成本对比了,这个如果有运维现身说法更好,按照我的工作经验来看,运维成本也没太大的差别。
接下来就要谈谈分离的优点了
必须要说到的就是耦合问题;前后端分离天然地把双方的交互/开发边界厘清了,面向json的数据对接
大大节省了联调成本,前后端可以并行开发,问题定位更加快速清晰
可维护性更高,也更加方便后期的重构
可读性更强等等
04
淘系技术部 饕飨持续交付且周期越长的项目,前后端分离效果越到后期优势越明显
可同步开发,降低交付延期风险
完全接口化文档化,减少双方的理解和沟通成本
提前了解到项目的风险和难度,有更明确的心理预期
维护,维护,还是维护
对于第一点,在超过1人以上项目,协助能获得更多开发时间,绝对是降低延期风险最有效的手段。其二,前后端分离能较好地解决依赖困局,通过各种工具或者文档执行各自的开发进度,最重要的是,前后端分离后,采用的技术在实现和选择时不被束缚。为后期的维护带来方便。
结语
大多数情况下,前后端分离是更加普适、先进且合理的方式。你觉得呢?评论区留下你的经验和观点吧~
✿ 拓展阅读 作者|淘系技术编辑|橙子君
出品|阿里巴巴新零售淘系技术