我不知道国外有没有「前后端分离」的运动,我只知道国内的大公司喜欢搞这个。

前后端分离大概的意思就是后端只给前端提供数据,前端负责 HTML 渲染(可以在服务器渲染,也可以在浏览器渲染)和用户交互。

说这个说得最多的就是阿里的前端了。同时阿里的前端也是在中国最活跃的。

为什么做前后端分离?

本篇文章我来腹黑地揣测一下原因。以下言论不针对某个个人,而是对前端群体的群嘲。我坦然接受你的反嘲讽。

最开始的前后端:

图一

某些团队做前后端分离,主要的原因是

如果不分离,前端对网站的控制力太弱,没有话语权。

前端想要扩大势力范围。扩大了势力范围才有晋升的机会。

在前后端分离之前,前端就是页面仔。技术大牛都是后端,鲜有前端能晋升到架构师层级。这不是对前端的歧视,而是前端真的只是做做页面、加个动效而已,凭什么晋升到架构师。

当时前端能控制的,就是 CSS 和 JS 文件。连 HTML 都是放在后端的仓库的。因为 HTML 是由服务器输出的,用到的模板语言就是后端的。

Node.js 火了之后,前端看到一个机会, HTML 是可以用 Node.js 来输出的呀,于是鼓吹前后端分离,把 HTML 层面交给前端来控制。这样前端就能管控更多的东西了(好可怜,终于能掌握 HTML 的控制权了)

HTML 如果放在浏览器渲染,就是下图

图二

HTML 如果用 Node.js 渲染,就是这样

图三

看起来只是掌握了 HTML 的控制权,但是这里面可以做的文章可多了。

以前 HTML 是 Java 、 PHP 输出的,或多或少存在效率不高的地方,现在用 Node.js 重写,效率是不是就提升了(很少有程序重写了,效率还下降的)。效率提升了是不是该奖励下前端,给几个晋升名额呢?

前端得到好处了,就更要巩固自己的地位了。以前的 jQuery 代码,后端看看就懂。「那不行,我要搞点后端看不懂的」,这样才能显示我前端的技术含量,这样才能升值加薪啊。于是 React 、 Gulp 什么全加上。

好了,我编不下去了。

总之我不认同这种前后端分离。

为什么?

因为

又增加了一个中间层(当然程序员通过增加中间层来解决问题),好处是有,职责明确;但是也有坏处:人为地拉长了战线。对比图一和图三你就会发现,结构变复杂了,一个人能做的事情变成需要两个人做了

并没有实质变化。以前的后端结构也是存在调用 Service 逻辑的,现在只不过换成让前端用 Node.js 做。除了把本来就吃紧的前端人力耗费在他不擅长的领域,我没看到什么提升。这里唯一的好处就是前端是势力范围扩大了。

我认同的是「全栈工程师」。

一个业务的前后为什么要分给两个人写?以表单提交为例,后端要对数据做校验,前端也要做。为什么要让两个人都写一次?前端说可以让后端也写 Node.js ,这样就可以服用代码了呀。

搞笑吗?后端写了三年的 Java 你现在告诉他要全部重来?后端肯定不愿意啊。

矛盾就出在,分『后端』和『前端』两个职位上。

大公司细分后端和前端,也是可以理解的。这里不表。

我只是说前端端分离的缺点:

大部分站点,不应该分前后端。除非你的前端,非常非常非常复杂。但是大部分站点的前端,根本没有那么复杂!

分了前后端很容易出现各自为政的情况。推诿、邀功、互相鄙视,不一一列举了。

有人问一个人怎么又学后端又学前端?我的建议是把前端做薄,如果没有必要,不要搞什么 Angular 、 React 。用原生 JS 或者 jQuery 能满足大部分网站。同时后端向 Rails 学习。局部交互复杂的地方,采用动态加载来做交互。

有人说你是前端的叛徒,你这么做前端还有什么前途。

搞笑,你做了前端就要一辈子为前端说话吗?太屁股决定脑袋了吧。

标题有点标题党,其实真正主题是:前后端分离是前端不得志的必然结局。(好像更标题党了 XD )

难道前后端分离没有好处吗?

我觉得只有一个好处:好招聘。毕竟你要招一个优秀的全栈工程师是极其困难的。

有人说,你真有意思,说这么多缺点,你还不是给不出解决方案,说了跟没说一样。

说下我的思路

保持前端简单,复杂了就用原生的方式封装,具体来说就是用自定义标签来封装复杂组件。这样一来,后端同事还是可以开发页面,因为只是多了一个自定义标签而已,本质还是 HTML

尽量不要在开发状态加 watcher ,目的也是让后端可以直接上手,不需要了解那么多工具。转译放到 Web 框架的开发者模式里面做,看到 less 请求加转义成 CSS 不是什么难事也不复杂。

前端只是辅助(这里说的是大多是网站,不包括重型 Web 应用),前端要做好服务化:健全的文档、友好的接口。

前端也要学后端知识,别在那自嗨。

小公司别搞前后端分离,徒增复杂度!!!

extjs 前后端分离_为什么我不喜欢「前后端分离」(个人观点,欢迎来喷)相关推荐

  1. mysql编辑前200行_巧妙使用SQL Server编辑前200行功能

    在SQL Server 2005/2008/2008 R2中,我们可以使用SQL Server自带的编辑前200行功能,使用这个功能的本意是简化Update 的使用,让开发人员.DBA和不懂T-SQL ...

  2. python开发前端后端区别_一文看懂前端和后端开发

    作为一名开发者,你可能会想:2019 年最好的软件开发技术和编程语言会是什么?它们又是如何被应用在软件开发当中的?如果你在思考这个问题,那就来对地方了.这篇文章将对前端和后端开发技术做一个对比,先从基 ...

  3. mysql如何实现管理权限分离_基于SpringCloud+vue(ElementUI)+mySQL前后端分离设计之--搭建权限管理系统...

    权限图: pom.xml xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/ ...

  4. amoeba实现mysql主从读写分离_利用Amoeba实现MySQL主从复制和读写分离

    在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave) ...

  5. zabbix mysql 分离_编译安装zabbix3.0 并且与mysql分离

    [前提] 参考: 设计图: 分为三个部分: zabbix-server   zabbix*.tar.gz 源码包支持 zabbix-web  lamp 环境支持 mysql zabbix mysql数 ...

  6. solidworks批量图号分离_教你如何将SolidWorks2016图号名称分离到零件属性中

    2018年7月新书 未执行前的图号名称没有分离 关键是宏按钮的新建:打开工具-宏-新建-另存为对话框-自己给起名字-复制填写代码 另存为对话框 代码可以复制下面的-最后点保存 下面是按钮制作 Dim ...

  7. python微信小程序后端开发_使用django开发微信小程序后端

    tips: 本文面向的对象是已经会使用django开发web后端的人员 微信小程序后端与普通web的区别 微信小程序的后端开发和普通的restful API 大致上相同,只不过要注意以下几点限制 必须 ...

  8. java开发前的准备工作_三、开发java程序前的准备工作

    JDK[Java development kit]:Java开发工具包 JRE[Java runtime environment]:Java运行环境 JVM[Java virtual machine] ...

  9. array 前端面试题_一则关于js数组的前端面试题

    假设,有一个数组为[1,2,3,4,5]:再给定一个数字如7,将数组间的值进行加法运算,怎么求出最后结果为[2,5],[3,4],[1,2,4]?const sumArray = arr =>  ...

最新文章

  1. go二维map_mirrorlang——从0设计二维内存寻址语言及vm(五.内存管理的思考)
  2. jQuery 遍历方法
  3. 自然语言处理python进阶(二)
  4. webbrowser设置为相应的IE版本
  5. aix服务器屏幕显示被锁住了,AIX恢复密码过程总结
  6. 火狐中的CSS Grid Inspector新增强大的功能
  7. Android SlidingMenu 仿网易新闻客户端布局
  8. 关于字体图标在firefox上本地访问无法显示的问题分析
  9. linux tcp 服务器 c,Linux网络编程篇之Tcp协议介绍, C/S通信及聊天室实现
  10. numpy ndarray 数组对象
  11. 腾讯QQ协议分析文档
  12. Python爬取微信公众号文章、标题、文章地址
  13. matlab的模型文件扩展名,[转载]matlab simulink基础知识
  14. python requests常见用法总结
  15. 搭建Remix IDE本地开发环境
  16. 软考高项论文写作注意要点(一)
  17. 计算机网络题简单建设校园网络,计算机网络课程设计校园网络构建方案设计和实现.doc...
  18. JavaWeb-旅游网-注册和登录
  19. 火山引擎 RTC 视频性能降级策略解析
  20. [人工智能]回溯算法解数独

热门文章

  1. ASP .NET 如何在 SQL 查询层面实现分页 1
  2. Hive 1.1.0 某些字段的查询结果为NULL
  3. linux下添加新硬盘的方法
  4. Exchange server 2007中启用pop3和IMAP4协议访问
  5. CPU使用时间问题测试
  6. BZOJ 3674 可持久化并查集
  7. 每日一程-4. PyQt5-实现显示和业务逻辑分离
  8. Git学习笔记(四)
  9. oracle 触发器写法|oracle trigger 语法
  10. 【Java】springboot的学习第二天