前言
从前,一个类B/S架构的应用里,FEer,或者叫切图仔,切图+表单验证就是工作的全部。无奈我所做的全部,只是整个应用的冰山一角…责任小了,边缘感就强了,owner意识自然差,视野自然受限。
感谢V8引擎的极速体验&chrome浏览器的紧随规范,js执行速度快的飞起,w3c规范愈加丰满,FEer终于可以翻身农奴把歌唱了。推倒了切图仔的定位并不断扩展js的责任田。
其实前端可以有模块化
其实前端可以满足除老本行表单验证外更多的业务逻辑
其实前端可以有路由层
其实前端可以有数据层
…
看吧,这种趋势已经势不可挡,js从单文件脚本开始有模块化概念,有前端主义特色的MVC,有更高大上、业务层实现更easy的MVVM,react,vue,angular.js (姑且叫美中三强?)越来越多的WEB应用开始变为SPA。
什么?你在质疑JS,你说SEO?我们FEer来加一个服务端渲染,顺带白屏时间长问题一同解决送你,还吹毛求疵?请UEmm做一张精美的loading图附加给你,无话可说了吧~
野心越来越强,client已经无法满足FEer,感谢酷酷的高性能服务器专家Ryan Dahl和他的node.js,不仅贡献了一个基于事件的高性能的WEB服务器,还带来了javascript的大繁荣。FEer终于可以有机会低成本触及server端开发了,因为遥远的对岸将不止有json”炮弹”,还会有我们熟悉的js大兄弟,你懂得这意味着什么,海峡两岸是一家!未来的沟通,一切将变得更加简单方便称心如意,未来对岸的大兄弟(可能就是你自己)将给你更舒心更懂你的json”礼包”。事件驱动,异步I/O,顺带手FEer就可以自信高效的将VIEW渲染、路由分发等之前可望不可及的工作包揽实现。
也就是这样,FEer腿也不疼了,腰也不困了,一口气完成前后端开发,不费劲。好像title都可以变了,把自己称为全栈工程师,责任大了,owner意识强了,曾经的后端RD被我们亲切的成为服务端RD,FEer可以豪爽的说:『提供给我服务就好,页面渲染、路由分发这些小事儿,小的做就行了,您去专心开发更复杂的服务端接口吧』。不过就算这样,我们还是很开心,因为我们是FEer,我们也是Full Stack developer,没错,我们是更懂前端的后端!
新职责
工作流
我们已经不是游击队了,我们有自己的作战部队,需要自己独立指挥。虽然FEer在饱受折磨,强烈抗议,争得前后端分离开发的荣誉后,已经在工作流上有质的优化了(主要体现在有了写build.sh,养成了编译的好习惯)。现在作为全栈,还需要重新梳理下工作流。在社区有社区的方案,在百度,我们这样做。icafe + icode + agile ,一条龙服务标准、周到、包满意。
需求管理
icafe是百度内部的工作平台,在我理解,就是需求管理平台。PM等需求方在icafe上发布需求,开发小哥肢解圣意,将一个Aplication级别的需求不断拆分,拆分成story,逐个开发满足。PM、RD、QA在icafe平台了解PM所需,测验RD所得,清楚QA所测。
代码开发
记得曾经听开发icode平台的同学骄傲的讲,BAT中只有百度有全公司级别的统一代码仓库,并且使用git管理代码,不明觉厉,我也很骄傲。icode平台代码的提交可以通过issue号与icafe里的需求store连接起来。通过git进行版本控制是业界及开源社区主流的选择。包括百度EFE的大神们编纂了公司级别统一的各种语言的编码规范,代码提交会触发编码规范校验,保证了入库代码的规范,review后准入的限制基本保证了代码的质量。
持续集成
百度的持续集成解决方案是依托于agile平台实现。还记得朴大的广告,集成的,好喝的!
。每个icode项目都会要求开发者编写一个BCLOUD脚本,类似travis ci的.travis.yml
的文件,代码提交会触发线上云编译机集群完成编译,并记录编译状态,协助开发者保证线上代码分支的持续可用。agile另一个主要功能是完成代码发布,发布后,代码即进入公司级代码仓库。
域名
什么,你在说域名?我真的可以包办域名了!在你要包办域名的前,首先需要判断你心仪的希望使用的域名是否已被占用。dig
、nslookup
是我使用的判别方法。
nslookup baidu.com //只是做示范,提醒自己小伙子野心不要太大
在确认你心仪且该域名尚未被占用的后,你就应该了解下A记录、CNAME了。简言之,一个域名的A记录是域名指向ip的映射,而CNAME是域名指向其他域名的别名映射。在百度,有shifen系统,shifen系统的域名是A记录,但它其实指向的是vip(虚拟ip),机房、机群多了以后,这样会尽可能的保证运维的灵活度。
数据库
B/S架构应用运转的本质就是数据的流动。任何业务逻辑的实现到最后都会被抽象成数据结构,持久化到数据库中保存。数据库种类很多,业务中最常用的可能就是MySQL,Redis,MongoDB等。大多数的B/S应用数据库选型都会使用MySQL,因为它是最流行的关系型数据库,体积小、速度快、性能卓越。Redis常用于session共享及业务逻辑数据缓存,提高接口响应速度。说到MySQL,phpMyAdmin是一个不错的MySQL数据库管理工具,当然,作为新时代的FEer,在不方便使用phpMyAdmin的场合,你也得掌握基础的MySQL命令。
// 登录MySQL server
mysql -h IP -P port -u username -ppassword
// RD让你导出个表,不能不会
mysqldump database table
// 看下MySQL server上有哪些数据库
show databases;
// 想操作哪个库
use db;
// 想操作的库里有哪些表
show tables;
// 查看下编码
show variables like "%char%";
// 咦、不是utf8?
SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results='utf8';
// 增?
INSERT INTO `table` (`prop`,`prop`...) VALUES(value1,value2);
// 删?
DELETE FROM `table` WHERE conditions;
// 改?
UPDATE `table` SET prop=value WHERE conditions;
// 查?
SELECT * FROM `table` WHERE condition;
前端
如果还不用美中三强或其他MVVM框架(比如百度errorrik大神的san,据说能扛IE6的MVVM)怎么好意思说自己是前端。前端标配已经是webpack + babel + MVVM + (FE)-router + (FE)-Store/x… 包括module bundler,transformer,MVVM,前端路由,前端状态管理,数据驱动,状态机,这些东西已经融入到现代WEB前端产品内,缺少一样,都觉得少了点什么,像个中官
。
后端
说到node.js,说到后端服务器框架,不得不再感谢一个大拿,TJ,贡献太大了。express, koa, co等等,进一步降低了FEer进入的门槛。后端选TJ大拿的框架就够了,当然包括百度、阿里在内都有一些自己的服务端框架,基本都是基于TJ大拿加上业务线的实际运用场景之上的封装。包括yog2,egg等。对了,MySQL orm推荐使用sequelize,这里有篇文档介绍的挺全。
服务端
如上文所述,FEer把路由分发、页面渲染这些杂活揽下以后,RD大大们就可以专心写服务端接口了。node server 与其他服务端server的通信可以通过RPC、Webservice等方式实现,node server也可以做proxy,将客户端的请求代理到其他服务器获取业务的数据。当前开源风愈来愈强的风气下,各类相关node包一片大繁荣,大家可以自行选择你看中的。在我的业务场景下,我最常使用的是百度FEX Team的 node-ral。
MORE
责任越大,就要求能力越强。从FEer到Full stack developer,不是那么简单,需要变化的不止一点,要不断扩大自己的技术关注圈,提升自己的技术广度与深度,增强技术视野,只有真正按RD的标准来要求自己,配合FEer的看家本领,才能做一名合格的全栈开发。