说道说道前后端分离

要说前端界的发展速度,那真是快!

2012年那时候接触过extjs,用于企业级后台开发还真不错,有好看的UI界面,组件丰富,基本能满足各类需求。但此时,HTML5正在蓬勃发展,尤其是乔布斯宣布苹果设备不支持flash后HTML5发展更是迅猛。并且angularjs这类MVVM框架被大多数所知,reactjs,vuejs如雨后春笋般生长。

2014年使用了一段时间angularjs,感觉学习难度有点大,2015年使用vue1.0做了一个项目后我逢人就说angular,vue有多好用,推荐他们放弃jquery使用vue。不到2年时间再看看前端界,vue,react等框架已经是前端开发标配,如果你说公司项目还在使用jquery会被人笑话,对于前端新人MVVM框架是必学,jquery反而不会重视。

这就导致一个结果:“手里拿着锤子,看什么都是钉子”,因为有锤子的关系,遇到任何问题,都会先想如何用锤子解决。久而久之,陷入了一种思维定式。任何工具带来便利的同时,也带来了局限性。而这往往是用锤子的人很难看到的。就拿一个需要SEO的网站来说,该选择哪种技术好?如果只会vue,不熟悉jquery的人来说肯定是选择vue,就算vue不太适合做这类网站,也会拿出ssr来强行做事。殊不知需要SEO的网站使用静态文件是最合适的。大多数人认为前后端分离是使用vue,react,angular,使用jquery的不叫前后端分离,这完全是搞混了概念,实际上后端的controller层也属于视图层,也可以归属于前端。

现在去网上一搜,问一下身边的人怎么看待前后端分离的,大多数人秉持着支持的态度,认为前后端分离好处多多,列举几条:

  • 专业的人做专业的事
  • 前后并行开发,效率高
  • 前端工程化,组件化
  • 解耦
  • 降低了开发学习难度

等等……

大家说的都说到点上了,这也是前后端分离能发展起来的驱动力。但是道理说的都挺好,如果不结合实际情况的话就是大炮打蚊子,不但达不到理想的效果还浪费资源。而且前后端分离带来的负面情况也不可忽视:

  • 增加了沟通成本,一些前后端都可以做又都不想做的事或许只能由权利大的来决定。
  • 一般前端开发速度会比后端快,在接口没开发好时前端只能闲等着。也有反过来的情况。前后端分离也意味着任务关联性减弱,可能不是同时开发,需要一方催着一方来完成。
  • 跨域问题导致联调困难,前端只能等待接口开发上了服务器才能调试。
  • 职责分离后确认职责也困难,一个问题出现到底是谁的问题?谁解决?
  • 一个需求需要前后端开发同时参与理解需求,有理解偏差问题。
  • 小公司多一个人多一份支出。

那么到底该不该进行前后端分离,如何进行技术选型?这需要根据一些实际情况来决定,大体判断准则有以下几点:

  • 后台系统采用前后端分离比较合适。
  • 需要SEO引流的就不要强行前后端分离了,react,vue的服务端渲染也很勉强,徒增开发难度而已。
  • 数据交互比较多的使用前后端分离,操作数据比jquery方便。
  • 页面本身特别简单,只负责简单数据展示,要求打开速度,直接服务端渲染即可。这种页面本身就是单页面,如果还要使用框架就是多此一举,增加页面负担,增加开发调试难度。
  • 开发资源充足最好前后端分离,开发资源不足时不分离,一人包揽前后台端反而更快。

最后,前后端分离是一个趋势,但不是必须。更准确的说法应该叫做“前后端分工”,毕竟在5年前这些活都是一个开发来做的,因为技术复杂性提升,前端不想只是切图,后端不想学变化太快的前端就出现了分离。你可以想象测试的工作,现在的测试大多还是测业务,但是也出现了一个自动化测试的职位,因为测试不想天天鼠标点呀点的测,想搞点高深的东西,而开发又特别烦写单元测试代码,这就又出现分离。再者,数据库也是一样,所以出现了DBA这个角色。谁知哪一天又会合起来呢!