前端的技术近几年发展很是迅速,各类框架也如同雨后春笋。前端
从两个维度去分析前端的技术发展,一个维度是前端复杂度,具体来说就是前端在解决建立应用复杂度方面作的一些事情;另外一个是从广度层面看前端作的事情, 这两个维度构成了一个相似于二维平面的时间事件平面。vue
单看复杂度,前端最开始的阶段只有HTML、JS、CSS,应用虽然是很是简单的,开发起来倒是很是复杂的,所以,单单只是DOM操做方面就有大量的DOM操做API。为了下降操做成本,就出现了DOM操做框架,好比jquery。这个阶段相似于从原始的刀耕火种进入石器时代。对dom的操做带来了很大的便利性。尽管如此,真正在构建一个复杂应用的时候,由于业务逻辑和手动操做dom逻辑交织在一块儿,应用维护变得愈来愈难。node
下一个阶段,引入了MVC分层思想,好比backbone,这可以将逻辑梳理的更加清晰一些。不过,MVC仍是须要去关注视图层的。react
接着,就出现了mvvm框架,开发者不须要再关注视图层的更新,只须要关注逻辑层、数据层。这一点为构建复杂大型app提供了极大的便利性。mvvm从Angular到如今react、vue的普遍应用,前端在逻辑构建层面发展已经到了一个新的阶段。jquery
在构建大型应用的时候,仅有逻辑层是不行的,还缺少工程性的思想。所以,出现了打包的模式,帮助咱们构建更复杂的应用。这样咱们所能作的APP复杂度是一个指数型的增加。android
为了进一步提升可构建应用的复杂度、加强前端的性能,assembly技术标准出现,提供了前端字节码的标准,为建立更加复杂的应用打好了坚实的基础。ios
刚开始只能在浏览器上运行,后来有了node代码,可让咱们的代码扩展到服务器端。紧接着PC端有electron。再到移动端有RN框架,支持咱们向移动端进展。web
如今出现了小程序,小程序框架可以让前端继续在移动端轻应用作探索。小程序
这里没有讲到的嵌入式开发,这方面也有相应的解决方案。swift
前端不断扩展广度,把前面的边界不断扩大。
最终前端想一统天下,把前端全栈化。
全部的技术在发展时期都有两条线去支撑着它发展,一条线是技术需求,即技术层面的技术创意和技术诉求;另一条线是商业需求,即技术要知足对应的商业诉求。
一个解决方案只有同时知足商业诉求和技术需求,才能蓬勃的发展。若是偏离这两条线,就很难发展起来。举个例子,好比Symbian,有些人有想尝试这个技术诉求,可是由于它已经脱离商业需求的层面,因此这个技术会慢慢被淘汰掉。
那么,若是仅有商业需求又会出现怎样的状况呢?
好比,2000年的时候对AI有商业上的需求,可是技术需求并知足,当时AI就是一个要被搁置的东西。
前端全栈,是怎样在知足技术需求的同时知足商业需求的呢?
咱们回归到移动端APP的开发实际场景,只有两个层面:一个是UI交互界面的开发,这个是能够被用户感知到的,另一个是用户感觉不到的服务逻辑层面。若是来看现有的开发模式,单单从UI交互界面上来看,就有不一样的平台端android、ios、h5,对应的语言有Java、OC、swift、js等几种语言,后端的语言和技术实现是更多的。在如今的模式下,一个小型公司若是须要开发一个完整的APP项目,就须要六种技术!
每一种技术若是须要找一个专门的人来作,这就须要6我的。那么反映到公司企业运营上面,人力成本是比较高的,除了人力成本还有一样很是高的沟通成本。从沟通的角度上来看,全栈式开发模式的出现,可以让一我的负责更多的业务开发,下降沟通成本。
因而可知,前端全栈既知足技术需求,也知足商业需求的,因此我相信将来前端全栈必定会蓬勃发展。
再回过头看前端散落的各类技术,在这个发展的过程当中,有一个很深的隔离,这个隔离本质上就是物理隔离,好比前端和后端,存在手机和服务器之间的物理隔离。
**由于各类端是实体端,每一个端之间都存在物理隔离。**就好比前端和后端,存在手机和服务器之间的物理隔离。若是能解决这些隔离,就能够把前端的技术作到真正的统一开发模式,才能作到真全栈开发。
其实后端的物理隔离,好比每台服务器之间的物理隔离,能够经过云端化,咱们把代码上传到云端平台,云端平台会屏蔽机器之间的物理隔离,暴露给开发者的只有一个集群的概念,而不是一台机器一台机器管理部署。云端化以后,后端的物理隔离被消除了。
咱们如今的前端代码和服务器之间终存在一个物理隔离,目前的解决方案是经过中间的协议打破物理隔离,好比http协议,但http协议毕竟是中间协议。
而serverless的理念就能完彻底全解决掉这层物理隔离,由于代码即服务,serverless能打破这层隔离实现前端的真全栈。
Serverless中的FaaS,函数即服务,我在使用后端服务的时候,再也不关心后端的ip地址,后端的域名是什么样的,直接调用函数便可,对前端来讲,后端服务是一个函数,函数就是前端的代码的一部分,后端服务和前端彻底的融合在一种代码体系里去了,这样后端的服务便是一个函数,至于这个函数是在前端实现,或者是在后端很远的地方实现,开发者均可以不用关心。因此说,severless打破了物理隔离。开发者再也不去作任何隔离中间层的事前,我只须要关心函数的实现就能够了,函数也是用个人前端代码来写,因此达到了充分融合的定义。
回过来看具体的实现场景,好比云开发,整个小程序的先后端逻辑都能在一个IDE里面完成,用户其实彻底不用担忧哪些是服务器的逻辑,他们都去向了哪里,只须要像前端函数同样去理解就能够了。云函数如今也支持了本地调试,就像前端代码同样调试,因此能够作真正的前端全栈技术开发,这对现有的开发模式是一个很大的革新。
那么,在大前端技术发展的这波浪潮里面,小程序云服务又有什么样的发展呢?
早在2017年初小程序正式发布的时候,第一代腾讯云小程序云服务就已经诞生了,但随着8月份全面向我的开发者开放,咱们发现这套支服务仍是有必定门槛的。因而就开始着手去作更深度的云服务整合和优化,才有了后来的wafer2 和如今的云开发。
早期第一代产品 Wafer 的整个开发部署流程,统计了一下大概须要十几步,对许多中长尾的客户来讲并非那么友好。因而咱们开始着手优化。
**经过整个优化,能够简略成四步。**第一步是经过一键的配置购买就能把云开发产品开通起来,第二步是工程师进行小程序的先后台开发,第三步进行代码的预览上传,测试体验完,最后即是发布。通过咱们这一两年的努力,小程序开发的流程已经由十几步简化到四步了。目前若是从市面上来看,咱们这个产品在用户体验以及流程简化度上,在行业内是较为领先的。
那么,咱们腾讯云团队和微信团队如何一步一步优化咱们的产品,将产品的接入门槛下降、流程变简的呢?
最初咱们看到的是能够将 devops 的部份环节给优化一下,包括代码上传部署。这就催生了后来的Wafer 2,亦即第二代的小程序云服务产品。
另外开通购买步骤也是比较繁琐的。将腾讯云和小程序的帐号打通后,能够作到一键受权而且开通环境与服务,而且咱们提供了一个免费的开发环境,这样可让更多开发者在进来发布小程序以前,能够以更低的成本门槛用上云开发。
剩下还能够优化的就只有 SDK 引入和填写配置的环节了。
SDK 其实能够采用内置的方式,毕竟小程序的前端接口也是直接内置到运行环境的 webview里面的。可是配置这块并不太好作了。由于一直以来,小程序前端和后台的开发都是割裂的,所以整个用户的鉴权机制都是交由小程序开发者本身去处理。但为何小程序与云服务必定是要割裂的呢,为何不能整合到一块儿呢?而 Serverless 这种开发模式是先后端紧密结合的最佳粘合剂。
通常而言,请求从小程序侧发起,到云服务的后台逻辑进行鉴权处理,若是鉴权成功再调用微信公开发 API,而后再把数据返回到小程序。
但咱们稍微将整个请求链路改变一下,小程序侧的请求先经过微信的服务,认证并鉴权成功以后,再到腾讯云这边的 Serverless 服务进行逻辑的处理,处理完毕后再返回到小程序侧。这样,咱们把整个配置和鉴权服务都帮用户完成了,这又大大减轻了开发者的负担。
经过介绍整个小程序云服务的优化历程,相信你们能感悟到整个产品的理念,就是但愿一方面云能力逐步成为小程序开发的基础能力,另外一方面也但愿尽可能减小开发者须要理解的概念。
在云开发模式的推进下,咱们开发模式是怎么一步步走到如今的开发模式的?
在Web刚出现的时候,后台开发本就是大包大揽,后台逻辑完成后,再把模板和数据吐出来到浏览器渲染。当时基本上都是作一些比较简单的Web应用。可是当时没有人会吐槽你的后台工程师只有一我的,怎么都把后台和前端服务都干完了,可能当时的业务逻辑并非很复杂,前端技术也不是那么的规范化,应用场景不是那么多,因此才出现这样的状况。
但是到后来,随着浏览器逐步发展,JS、CSS、HTML有一个规范委员会帮它每一年制定一些新的特性。并且随着业务场景愈来愈复杂,这种状况下开始提出先后端分离,开始要求后台和前端是分开两我的作事情,先后两端是经过API的请求和返回去作一个数据交互。
再到了2008年的时候,乔老爷子凭一己之力开启了移动端的开发生态。到了2017年张小龙大神也跟微信团队推出了小程序且打造了小程序生态。这个时候不少专家提出了“大前端”的概念,但愿只写一份代码,就是编译并完成不一样客户端的业务,这些端只须要共享一个后台服务就能够了。
这个时代国外出现了一些跨端方案,好比React Native,国内也涌现了 Taro, Omi 等优秀的跨端方案。这几个时期的前端职能是有明显扩张的。
只作了大前端彻底知足不了前端的野心,随着Node.js的发展,有一些中台的服务,好比同构渲染和业务接口但逐步转给Node.js 来作。后台的同事开始专一于去写一些后台的调度服务或者优化整个数据的读取性能。这个时期,前端开发者也开始从前端逐步日后台作一个拓展。
但大前端的步伐远远不仅于此,在不少业务场景里面,前端工程师比较贴近客户,因此他更可以去理解到一些业务逻辑,不管是业务的前台或是后台,交给前端工程师来作是更好的。举个例子,云开发的其中一个客户是惟品会的前端团队。他们其中有个业务须要依靠后台来支持,但他们的后台人力很紧缺没有办法立刻投入支持。因而他们的前端就借助云开发,投入1个前端工程师就迅速把这个业务给作完上线了。其实许多公司的业务都有相似的状况,公司业务发展很是快,但有的时候要前端等待后台的人力,这样就影响到整个公司的业务发展。
但是前端的全栈开发的模式,从前端到后台,把全部的业务全都写完了,其实你会发现又回到咱们最初的一个工程师大包大揽的作事情。但是这个业务是复杂的,若是没有一个工具或者一个云的基建设施去支撑这个梦想的话,实际上是彻底不能实现的。
面对这样的挑战,咱们应该怎么答复咱们的老板呢?
腾讯云目前提供的解决方案就是云开发。
传统开发模式会让前端变成大包大揽地作业务,实际上是至关困难的,由于一方面要开发前端和后端的逻辑,还要处理全部的运维的事情,靠一我的是不可能的,因此才有了如今这样的传统分工模式,就是前端、后台、运维。若是把这个业务用上云开发的话,咱们主要关心的只有一小部分,主要都是咱们的业务逻辑。至少只要这个工程师可以懂Node.js,基本上就能够把服务稳定、性能卓越和有必定安全性的小程序应用独立开发出来。
云开发的开发模式真正能够实现前端工程师全栈开发的理想模式。