前后端分离的项目开发策略已经不是什么新鲜东西了,网上介绍这方面的文章非常多。我自己是在14年的时候接触到的,对这种开发策略一直爱不释手,不管新老项目都会首先用前后端分离的思维先去思考一番。从14年到现在在前后分离上面也实践了近3年的时间,项目大大小小的也差不多4,5个吧,但是却从来没有一个是自己觉得很满意的,其中的原由和心酸可能只有自己才能体会了。
前后端分离是什么
- “前端”通常指的是,相对来说更接近用户的一端,例如:APP,网页、桌面程序等,在现实开发中大部分情况可以理解为“客户端”;
- “后端”相对来说就更泛化了,可以理解为是为前端提供服务的一端。
-
”分离“顾名思义就是将”前端“和”后端进行分开“,但是这里的分开主要从下面几个纬度进行分离
- 架构分离,前端不需要依赖后端架构同时后端也不需要知道前端使用何种架构
- 人员分离,前端后端使用的技术相互之间根部不需要相互了解完全可以在做到透明(当然相互了解会更好)
- 工作分离,基于项目或者产品的单个功能的横向进行工作分离,任务划分更细
- 关注点分离,前端偏向用户,后端偏向系统本身
分离的优缺点(相对于一体化的开发策略)
优点
非常多,例举一些比较明显的
- 后端技术不再受局限
后端可以根据不同的业务场景选择合适的技术进行实现接口服务,技术和人一样,什么都能做的往往不是很精而长期专注某个领域的在处理特定问题的时候就比较又优势,例如ruby
,python
,nodejs
等很多语言都有自己非常擅长的领域。 - 团队扁平化
这和soa
的开发思路代理的好处是一样的,一个项目20多个系统,如果没有这种soa
是开发思路要想半年内开发完成,给你再多人都没用。这就像过独木桥一样。因此前端分离某种意义上来说又给我们提供了一座大桥,相对的团队更扁平化 - 降低项目风险提供项目质量
这种分离让项目有了更多的切割点降低项目风险,同时因为关注点不一样项目的质量会明显提高 - 整体开发效率提升
大部分时间都只需要使用自己擅长的东西,前后端都很舒服,自然效率就会上来
缺点
与其说缺点,实际上可以理解为是在实践前后端分离的过程中需要解决的困难和难点
- seo,这是首当其冲的,再不进行附加处理的情况下seo是无法满足的
- 沟通成本增加,在功能沟通中多了前端这个角色,而且往往是产品、设计、后端多方沟通
- 安全,相对于一体化的前端,安全问题更多,最简单的例子:后端接口基本全部暴露
如何解决前端后端分离带来的问题
-
seo,这个问题主要针对前端是web端情况。导致这个问题的根本是因为国内的搜索引擎不会分析js代码,因此在基于js实现的页面就无法得到seo的支持,那么也就是说必须给搜素引擎提高完整的html。解决这个问题并没有太好的方式,主要还是2方面入手
- 使用一体化前端专门为爬虫提供一套页面,只做数据渲染,不做UI/UX
- 使用nodejs实现服务器端渲染(为什么选择是nodejs?)
- 安全,传统的cooike/session也是ok的,只是类似jwt这种认证的方式更好些
总结
前后端分离,值得所有前端去尝试,虽然累到最后你会自己责备自己:“我这是在干吗,明明只要写写js效果就完成工作的事情,为什么现在天天加班,还到处找人沟通(产品设计不合理的时候需要沟通下,设计适配没考虑的时候需要和他讨论下,接口偷懒的时候还得看人家心情)”;但是,但是当你真的做了一段时间之后你会又更多的收获,不仅仅是技术层面,更多的是技术设计层面的东西
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。