么要分给两个人写?以表单提交为例,后端要对数据做校验,前端也要做。为什么要让两个人都写一次?前端说可以让后端也写 Node.js ,这样就可以服用代码了呀。后端写了三年的 Java 你现在告诉他要全部重来?后端肯定不愿意啊。矛盾就出在,分『后端』和『前端』两个职位上。大公司细分后端和前端,也是可以理解的。
说前后端分离的缺点:
1. 大部分站点,不应该分前后端。除非你的前端,非常非常非常复杂。但是大部分站点的前端,根本没有那么复杂! 2. 分了前后端很容易出现各自为政的情况。推诿、邀功、互相鄙视,不一一列举了。 3. 有人问一个人怎么又学后端又学前端?我的建议是把前端做薄,如果没有必要,不要搞什么 Angular 、 React 。用原生 JS 或者 jQuery 能满足大部分网站。同时后端向 Rails 学习。局部交互复杂的地方,采用动态加载来做交互。 4. 有人说你是前端的叛徒,你这么做前端还有什么前途。
其实真正主题是:前后端分离是前端不得志的必然结局。
难道前后端分离没有好处吗? 只有一个好处:好招聘。毕竟你要招一个优秀的全栈工程师是极其困难的。
思路
1. 保持前端简单,复杂了就用原生的方式封装,具体来说就是用自定义标签来封装复杂组件。这样一来,后端同事还是可以开发页面,因为只是多了一个自定义标签而已,本质还是 HTML 2. 尽量不要在开发状态加 watcher ,目的也是让后端可以直接上手,不需要了解那么多工具。转译放到 Web 框架的开发者模式里面做,看到 less 请求加转义成 CSS 不是什么难事也不复杂。 3. 前端只是辅助(这里说的是大多是网站,不包括重型 Web 应用),前端要做好服务化:健全的文档、友好的接口。 4. 前端也要学后端知识,别在那自嗨。 5. 小公司别搞前后端分离,徒增复杂度!
单元测试
前后端分离后,意味着更多的业务逻辑将融入到前端程序中, 对应的我们需要前端工程师需要完成对应业务逻辑的单元测试, 以确保前端质量不会逐渐沦陷.
- 基于 java script 的单元测试被证明是一种高效的测试方法,其中 71% 的组织执行了 java script 单元测试,而 84% 的组织则相信它是有益的!
- Jasmine 和 Mocha 是最流行的 java script 单元测试框架,Jasmine 主要配合 AngularJS 进行单元测试,而 Mocha 则与 ReactJS 配合使用。
目前前端自动化单元测试社区情况:
Jasmine & Protractor (72.4%),
Jasmine & Karma (67.7%),
Jasmine & Jest (58.3%),
Karma & Protractor (58.6%).
服务端
组件化是我们基础设施之一, 服务端(.net, java)也想做更多通用组件.但往往项目或产品研发周期紧, 在一些组织没有足够时间研发通用组件.
权衡
我们更多的时候,更应该思考的是平衡和最优组合:
什么情况下应该后台渲染,什么情况下应该前台渲染。 什么情况下应该用html+css控制页面,什么情况下应该用js控制页面。
React.js里所谓的“页面组件”,并不是指一个checkbox,或一个input这样细粒度的组件,可以理解为对一个“功能单一的一个页面区域”的封装,粒度更大。虽然checkbox等也需要封装住成组件,但那是粒度更细Controls,和React.js的组件概念不是一个级别。 单纯使用react而不搭配其他类库是作死 真的还不如用jquery。
工程化的需求也比前些年提高的无数倍,去年我用grunt,后来用gulp,然后browserify来了,2016年用webpack,babel,工具的更换意味着开发体验也是越来越好。另外JSX不是HTML,JSX不是HTML,JSX不是HTML。
React满足上面的一些方面,不满足另一些方面,和其他工具一样。你需要React,是因为两点
第一, 你充分评估了你的项目,理解你要解决的问题是什么,是快速开发,性能,团队的ergonomics,多数情况下要解决的问题是多个要素的平衡
第二, 你充分评估了React这个栈,理解它是解决你的具体问题的最佳工具,你真的理解了自己的场景中非用React不可的那些事情 只是一个营销类的推广页面,仅仅只有轮播、几个文本框的表单的极浅交互,我还是推荐大伙使用原生 / zepto / jQuery之流。假如您很在意体积,计较网络环境(2G/3G)等,可以使用服务器端渲染或者无阻塞UI(即添加占位符),使用带有GZIP的CDN,React各类库绝对能够在100K以内,假如超过,建议您使用按需加载。我相信您的服务器应该会添加有304/ETAG之类的缓存。
对于中大型项目,React确实是优良之选,当然也可以尝试Vue去迭代中小型项目。flux/reflux/redux 不仅仅只能用在React,也能用在Vue/Angular等等框架,仅仅只是一个数据流思想,您选择性地使用。
对于大型项目,推荐 Webpack 来构建业务代码, Rollup 来打包你的小轮子。使用Rx优化你的数据流。Typescript强健你的代码,提升你的开发效率(头一周可能会有些痛苦)。但在此之后的收益是非常高的。 对于中小型项目,推荐React/Redux/React-Router来构建你的代码
总结
因为没有完美的框架,只有适合的应用场景,选择我们自己更适合的。 框架都只是为了开发效率和良好地组织项目代码,并不完全是为性能而生。 注意IT时代在变, 任何技术都会演进, 凡是存在的, 都是合理的。 服务端研发工程师也少有全栈工程师。React.js适合长期, 用户体验高的交互多的项目或信息系统产品。
--------------------------------------------------------------------------------------------------------------------------------------------
今天先到这儿, 希望对您在团队管理, 项目管理, 产品管理, 系统架构 有参考作用 , 您可能感兴趣的文章: 前端工程师技能整理 精益IT组织与分享式领导 企业信息化与软件工程的迷思 企业项目化管理介绍 软件项目成功之要素 人际沟通风格介绍一 精益IT组织与分享式领导 学习型组织与企业 企业创新文化与等级观念 组织目标与个人目标 初创公司人才招聘与管理 人才公司环境与企业文化 企业文化、团队文化与知识共享 高效能的团队建设 项目管理沟通计划 构建高效的研发与自动化运维 某大型电商云平台实践 互联网数据库架构设计思路 IT基础架构规划方案一(网络系统规划) 餐饮行业解决方案之客户分析流程 餐饮行业解决方案之采购战略制定与实施流程 餐饮行业解决方案之业务设计流 |