2017年的9月,正式从后端开发转做前端工作,这其中更多的是机缘。公司技术部门组织调整,原先的团队发生变动,领导准备组织新的人员去总部接项目,当时想着给自己更多挑战,就申请加入了新的团队。当时现状是,公司前端开发人员较少,属于稀缺资源,新的团队没有FE。到现场以后才知道,因为前后端分离,前端是单独的项目,使用的也是新的前端技术,ES6是基础,框架是React、Redux、antd,以及公司基于Webpack封装的构建框架,整个项目的开发和最终在系统上运行的流程也是全新的技术思路,需要一定的前端知识。当时自己的现状是会写JSP,写过一段时间的JS,也因为曾经在前端工作较重的情况帮助FE同事做过一些Angular1、Angular2的项目,算是在整个团队里面前端知识相对"丰富"的了,顺理成章就由我接了前端的两个项目。回来以后,由于自己对前端技术一直比较好奇,对大前端也有耳闻,前端人员人手不充足也给了自己机会,所以就在现在的领导的帮助下,顺利转了前端,正式成为了前端的开发小白,对我来说这是一个比较大的转折点。
在这几年的开发过程中,接触的前端技术也发生了很多的变化:
最开始的时候,公司没有单独的前端开发人员,前端的页面是由后端完成的,使用的是JSP。JSP 是运行在服务端的语言,使用服务端渲染,适用前后端耦合的项目。随着时代的发展,前后端的界限分得越来越明确,术业有专攻,后端工程师把精力放在了高可用,高性能,高并发,存储,安全等问题上,而前端工程师主要负责页面展示,浏览器的兼容性,用户体验等问题,前后端分离是中大型公司的一种必然趋势。在此基础上,前后端耦合的项目,需要前端工程师使用java的IDE,以及配置各种后端的开发环境,对前端开发非常的不便。而且使用JSP,每一次请求都是访问servlet后再输出流到html页面,效率没有直接使用html高。而且前端工程师在使用jsp的时候,如果没有java基础,修改页面遇到一些标签也会难以使用。另外,现今的局面是,对于互联网项目的性能要求越来越高,前后端耦合在一起的架构模式也逐渐不能满足我们,动态资源和静态资源全部耦合在一起,服务器压力大,因此需要通过解耦,来大幅度提升项目的负载能力。所以放弃jsp,也是一种趋势所在。
公司有了前端开发工程师后,就已经抛弃了jsp,使用的前端框架是Angular1,后来又逐步换成了Angular2。在这段时间,我只是参与了几次前端的开发,对Angular1和2的使用和区别有一些了解。1、Angular2是重写的,不是Angular1的升级版,所以他们之间的差别比较大,可以认为Angular2是全新的框架。2、Angular1是JavaScript,可以直接在浏览器中运行,而Angular2是TypeScript,需要经过编译后才能在浏览器中运行,所以它必须使用构建工具。3、在Angular1 中控制器Controller是非常重要的,用于封装视图控制逻辑,而Angular2中开发模式改为了模块化开发,去除了Controller,4、在Angular2中没有$Scope,而是使用zone.js来记录监测变化。5、Angular1中没有明确的生命周期机制,在Angular2中有精心设计的生命周期。
在这段时期,公司的项目虽然引入了新的前端框架,但是并没有实现真正意义上的前后端分离,而是将最终的文件打包到后端项目的静态资源文件夹中,实际最终运行的只有一个后端项目。显然这不是我们想要的前后端分离的架构模式。
在正式开始前端工作之后,因为公司前端技术发生了一些调整,先后接触了Vue、React,再后来为了技术统一方便维护,公司大力推行统一的框架,React就成为主流一直使用至今。Vue虽然使用的不多,但是给我的感觉是比较轻量,学习成本低,上手快,适合需要快速开发迭代的项目。因为是双向数据绑定,不需要写过多的代码,但是也因为如此,有时候会发生不可预料的数据问题,可操控性不强。相对而言,React单向数据流,虽然需要写很多的change事件,但不会出现数据不可操控的问题,适合比较大型的项目。React是Facebook创建的Javascript UI框架,他推广了Virtual DOM,并创造了新语法JSX,允许开发者在Javascript中书写HTML。无论React还是Vue都是JavaScript的UI框架,有别于Augular的功能齐全,需要使用其他功能时就得通过组件引入。
从后端开发到前端开发的这段时间,深深的感悟到前端在不断的向一个更加成熟的方向发展。从一开始后端开发包揽前端工作,到后来有独立而专业的前端开发,从普遍的前后端耦合项目,到后来前后端分离的架构模式在项目中广泛被应用。从jsp的广泛使用,到后来前端自己的框架和库丰富成熟,短短的几年时间,前端开发已经成为整个项目开发周期中很重要的一环。也坚定了自己选择前端开发道路的信心。两年的前端开发工作,对于自己熟悉前端已经有了很好的基础,接下来的日子里,会对自己有更高的要求,希望自己能在这条道路上越走越远~