在今天,大前端并非一个陌生的词汇,咱们偶尔会听人谈起它,前些天还看到卓同窗写了一篇《大前端时代下App开发者的生存之道》,说明这个词开始成为某种共识了。html
可是大前端到底指的是什么?事实上大前端并无明确的定义,它由国内业界发明,甚至没有对应的英文词汇(若是有,请悄悄告诉孤陋寡闻的笔者)。有人对发明技术词汇不觉得然,但我认为国内大前端相关技术发展相较于国外并不差,咱们有必要在理论、标准方面也有所建树,这样才能与咱们的发展状况相匹配。前端
上个月我在筹备GMTC2017大会的时候,走访了美团点评的刘平川老师、滴滴的左志鹏老师、手淘的天施老师,对大前端的问题进行了深刻的讨论,在这里,我想用这样一篇文章来抛砖引玉,探讨大前端的定义。但愿能看到更多关于它的讨论和分享。web
1大前端指的是什么?三个层面上的大前端小程序
若是分析咱们到底在何时使用大前端,大概有三种不一样的语境,在每种语境下,大前端的定义都有所不一样。后端
大前端与NodeJS与先后端分离微信小程序
在前端同窗的口中,大前端有时与NodeJS一块儿提,有时与先后端分离一同提起,事实上,大前端概念也正是由前端同窗提出,从这里,咱们能够得出大前端的原始定义。浏览器
过去几年,前端技术经历了爆发式的发展,这种发展最重要的推进者之一就是NodeJS。NodeJS为前端创建了与系统之间沟通的桥梁,今后前端技术不只能在服务端大放异彩,还能在本地的前端开发工具与工做流上大展身手,前端今后被解放了,JavaScript统治世界的论调一度甚嚣尘上。前端框架
不过,当人们冷静以后,发现NodeJS在服务端并无太多的优点,再加上NodeJS技术自己发展的一些波折,致使它在服务端的应用并不理想。不过,前端同窗仍是取得了一些阶段性胜利,其结果就是先后端分离。服务器
在之前前端页面模板由后端生成,致使在页面须要频繁修改的时候效率低下,先后端分离指的是后端只提供接口,前端对页面有完整控制,同时经过中间层将先后端隔开,在这里对数据进行抽取、聚合、分发等操做。这个中间层,一般也是由前端同窗负责。微信
从这个意义上,大前端的原始定义能够称为前端技术的扩大化,包括NodeJS,同时对Web页面有更强的控制权,开发承载更多功能的页面。
大前端与泛GUI交互
移动互联网时代到来以后,移动App成为新的主流,而浏览器的地位则逐渐下降,传统的前端开发遇到尴尬。
固然,前端并未真正遭遇困境,以PhoneGap/Cordova为表明的Hybrid开发,以及内嵌在App中的WebView开发,再加上微信成为主流以后的“微信Web”,前端技术其实在移动端也有不少的使用场景。
可是,当时人们提起移动开发,主要指的仍是iOS与Android原生开发技术,这一状况随着React Native的发布获得了改变。其实直到如今,在国内外大规模使用React Native仍然很少,可是它的确能解决原生的跨平台代码复用、动态化等痛点,又避免了以前Hybrid的性能问题,所以受到普遍关注。
随着React Native的加入,前端的技术栈再次扩展。而且React Native让咱们发现,其实经过加入一个虚拟视图层(Virtual DOM),逻辑操做和模型部分的代码可以获得很大程度的复用,在已有的实践总结中,大部分React Native代码都获得了80%以上的复用。虚拟视图层也不只仅只能用在移动端,在全部经过图形界面进行人机交互的地方均可行,在PC、Web、移动设备甚至还未发明出的将来的种种设备上,只要系统能运行JavaScript引擎,理论上均可以采用相似React Native的开发方案。这种前端技术,固然能够称为大前端。
若是说先后端分离是前端在纵向上变大,那么这种跨不一样的终端的前端技术则能够说是在横向上变大。
大前端团队现状
在实际中,还有一种使用大前端的状况,那就是国内公司的大前端团队/部门。据我了解的状况,目前美团点评、饿了么、网易杭研都有叫大前端的团队或者在对外时使用该称谓。
不过,因为以前大前端并无明确的定义,这些团队的人员构成并不相同,它们都是各个公司在本身对大前端的理解,以及对公司业务的支持需求下设立的。具体状况以下(可能有误差):
美团点评大前端团队:包括FE、iOS、Android开发,以及一些工程化工做。
饿了么大前端团队:以FE为主,包括NodeJS,以及Weex等。
网易杭研大前端团队:去年末在网易杭研执行院长汪源的一次分享中,他称网易杭研大前端的技术体系,包含Web前端、PC客户端和移动端。
这些写在新闻稿、印在名片上的文字,是帮助大前端概念落地的重要助力,同时也是最终肯定大前端的定义究竟是什么的断定依据。固然,目前案例太少,还不足以影响咱们对大前端的理解。
2为何说大前端是发展趋势
在客户端开发上,Native与HTML5之争持续快十年,吵了人们都失去兴趣了,从如今来看,并无谁取代谁,而是有融合的趋势,融合以后的产物就是大前端。
在这里我大胆预言:大前端不只会成为移动开发与Web前端的发展趋势,也将会是将来的显示设备终端的开发技术趋势。
为何这么说?
终端碎片化
咱们已经进入一个终端碎片化的时代,iPhone第一代发布到今年就整整10年,在这10年里,咱们并无发现智能手机有被取代的迹象。可是创新仍在继续,因而咱们有了智能手表、TV、眼镜、头戴VR等等新设备,能够想象这样的设备仍然会继续增多。
这些新设备同时也是新平台,与智能手机相似,能够安装第三方应用,而且,这些平台基本都支持浏览器或内嵌浏览器引擎。虽然有些平台限制使用Web技术开发应用,但这只是平台政策缘由,只要放开限制,前端技术就能以某种姿态进入,甚至成为主流。
有早期Hybrid和后来的React Native的探索,在显示终端应用的开发上,前端基本已经成为必备技术。
Serverless
Serverless中文译为无服务器架构,是软件架构领域的一个热门概念。这里的无服务并非说不须要服务器,而是说新的架构取代了传统服务器的概念。Serverless的表明是2014年亚马逊发布的AWS lamda,后续各大云计算厂商也纷纷跟进。
对于终端开发者,并不须要太深刻的了解Serverless,所以这里不过多介绍,只须要知道它被认为是云计算发展的趋势之一。
Serverless与大前端的关系则在于,Serverless须要更强大的前端,在《Serverless Architectures on AWS》一书中介绍了Serverless的五大原则,当中有这样一条:
Create thicker, more powerful front ends
所以,从软件架构的发展趋势来看,前端会愈来愈“大”,在整个系统中的重要性也会提高。
3大前端的表明技术
说了这么多,到底哪些是大前端的表明技术?从业务上来讲,我认为终端开发、网关设计、接口设计、桌面端的工程化均可以算是大前端的业务范畴。具体的技术,则是基于HTML五、NodeJS的通用技术,以及各平台的专有技术。从现阶段来讲,还须要掌握一些表明性的框架、平台等。
React系与Vue系:两大前端生态
前端框架目前有三架马车,除了Angular以外,React与Vue都已经造成各自的生态体系。
生态的意义就是覆盖全面,几乎没有短板,React和Vue已经覆盖了目前主流的系统平台,而且能够用React Native、Weex等框架进行原生开发,相较于其它技术有很强的优点。
PWA:开放的理想
PWA是Google力推的技术,对于前端开发者来讲,它表明着标准化的努力和开放的理想。虽然从目前来看,它还达不到实用阶段,但从我近期得到的一些信息代表,这项技术仍是有很大潜力的,也有很多的支持者。今年可能就会有更多的实践案例涌现出来。
小程序:Super App指向的另外一种将来
微信小程序正式发布以后,与它未发布以前的火热造成了反比,在市场上几乎没有声音了。但这只是产品策略的缘由,并非技术带来的问题。事实上微信小程序的用户体验很不错,代表了这项技术的应用潜力。
小程序更多的仍是为咱们带来了一种可能性,超级App成为PC时代浏览器的精神继承者,成为咱们新的操做系统。
4大前端带来的影响
最后来讲说大前端带来的影响。
新的移动开发技术栈
移动设备做为主流的终端设备,其应用开发技术也应该是大前端最关注的技术。在之前移动开发的技术栈以原生开发为主,但之后恐怕作移动开发须要同时掌握前端技术才行。卓同窗的文章也表达了这个意思。
在今年1月份的WeexConf上,天施老师分享的一段话让我很有感触,他的大意是移动端通过10年演化,创新变缓,移动开发正走在标准化的道路上,因此Weex会遵循W3C的规范。而我有更深一层的理解:移动开发以前不少组件都须要靠自研,但随着大厂更多的开源,咱们在基础组件/框架上的自研需求会愈来愈少,移动开发没有W3C这样的规范,但会有基于开源的事实标准。
因此,我认为纯原生的移动开发的道路会愈来愈窄,整个移动开发的技术栈必需要作一个大的改变。
新职业:大前端工程师
随着大前端的概念逐渐深刻人心,会带来什么?我认为会出现新的职业:大前端工程师。
它与之前的Web前端的区别是,大前端将作更多的终端开发、工程化等工做,而不只仅只是开发Web页面。大前端工程师将能搞定全部端上的开发。与充满争议的全栈工程师相比,它更具可操做性。
而且,大前端工程师将会是一个拥有强大生命力的职业,由于显示终端设备的生命力会很强,毕竟人类的信息获取有80%以上是经过视觉,不管Amazon Echo这样的语音交互设备如何演化,显示终端都会有一席之地,大前端也于是不会失业。
5结语
本篇内容确定有偏颇的地方,甚至可能有错误,但愿它能引发你的思考,那么本文就达到目的了。
做者介绍
徐川,InfoQ中文站移动主编,GMTC大会主编。长期关注移动开发与前端技术发展。
6延伸阅读
大前端时代下App开发者的生存之道:http://www.jianshu.com/p/1127b4aab135
淘宝先后端分离解决方案:http://2014.jsconf.cn/slides/herman-taobaoweb/index.html
无服务器架构:http://www.infoq.com/cn/articles/no-server-architecture-paer01