作者:腾讯IMWeb前端团队
2021年大前端领域没有出现革命性的明星项目,但在各个细分的技术领域都有一定的拓展与深耕,有很多新技术或者新特性有望在2022年迎来爆发。在互联网“寒冬”的当下,前端技术人员唯有修炼好内功,不断壮大自身,才能更好地迎接春天的“东风”。那前端技术人员应该修炼哪一块“肌肉”呢,或许我们可以在《2021年JavaScript明星项目》找到一些答案:
zx工具包仅用了7个月就荣登全年Star增长最快的项目,这侧面表明了前端开发在全栈的持续渗透和影响力。
在前端框架上面,龙头React和Vue还是稳步发展,持续创新。而黑马Svelte在今年崛起,一举超越Angular占据第三位,并对头名虎视眈眈。那么Svelte能否破局?
在构建工具上面,对原生ES模块的接纳仍在继续,vite势头难挡,另一方面,出于对性能的考虑,越来越多的前端工具开始用其他语言(Rust、Go)来构建。
在桌面端,大火的Tauri打破了Electron的统治,基于Rust(可替换),Tauri对比Electron有更小的包大小和内存占用,未来可期。
接下来,主要盘点下2021年前端行业发生了哪些重要的事情,同时分享下腾讯IMWeb团队在过去一年中都做了哪些工作。
总结2021年度趋势1、TypeScript稳健增长从Github的语言使用数据(Toplanguagesovertheyears)来看,2021TypeScript依然稳居第四。
从最新的2020JS问卷调查数据看,TypeScript使用率在同类工具竞争中依旧排名第一(StateofJSsurvey)。
从StackOverflowDeveloperSurvey2021来看,TypeScript受大家喜爱程度依旧在提升,估计在2022年还会保持增长。
回顾回顾2021,官方的Roadmap阐明了TypeScript的目标是继续完善其类型系统、实现强大的工具提高生产力、提高使用体验、提高社区参与程度、改进基础设施和工程化系统。提出目标后,这一年TypeScript团队还是非常给力的发了4个版本,目前最新版本4.5,其中许多新特性确实使用起来更香了,比如:
更好的元组类型支持,允许任意位置的剩余类型以及可选类型。
更好的模板字符串字面量类型支持。
更智能的条件分支域的类型推断。
索引类型支持Symbol和模板字符串模式。
Awaited类型和Promise类型改进。
除了特性,它还完善了许多使用体验,比如:
性能优化如更快的类型生成、增量编译和Sourcemap生成。
更智能的IDE补全。
非Javascript源文件定位。
另外,TypeScript新官网在8月上线了,全新的文档查阅起来也更加方便。
目前TypeScript已经是IMWeb团队的标配。无论是Web前端、项目还是公共模块,从脚手架模板就默认支持TypeScript,其中公共模块体系不仅仅使用TypeScript编写代码和类型检查,同时利用ESLint实现TS语言标准AST的特定校验来实现公共模块规范,还结合TypeDoc生成使用文档等等。
展望TypeScript在未来将提供更多激动人心的特性,例如:
扁平化声明文件(Flatteningdeclarations),只输出一份总的文件,而不是一个模块一个文件。
环境装饰器(Ambientdecorators),用来声明一些环境信息,例如API是否是deprecated。不影响输出的运行时代码,只在声明文件中体现。
条件编译(Conditionalcompilation),有点类似C++中的#if宏定义,可以在编译前预处理代码并保留符合条件的代码分支。
函数表达式以及箭头函数的装饰器(Decoratorsforfunctionexpressions/arrowfunctions),目前TypeScript中装饰器只能用于class中,未来将可能支持类外的函数表达式以及箭头函数使用装饰器。
正如其Roadmap所说,TypeScript正在朝正确的方向前进,提高生产力还有很多的类型特性、性能优化、体验优化、配套工具可以做,正努力成为JS语言的标准类型系统。随着TypeScript的日益发展和完善,未来,TypeScript是否能得到浏览器和原生支持呢?我们一起期待吧。
2、React一马当先且持续创新React18在2021年下半年完成了Alpha、Beta和ReleaseCandidate版本的发布,将于2022年初发布正式版本。
当React18发布时,它将包含开箱即用的改进(如Automaticbatching),全新的API(如startTransition)以及内置支持了的全新SSR架构。这些功能之所以能够实现,要归功于在React18中新加入的可选的“并发渲染(concurrentrering)”机制,它为React解锁了非常多新的可能性,来帮助你提高你应用程序的实际与感知性能。
React18采用循序渐进的策略,由于React18中的并发性是可选功能,所以并不会立刻对组件行为带来任何明显的破坏性变化。你几乎不需要对应用程序中的代码进行任何改动就可以直接升级到React18,且可以根据自己的节奏和需要来尝试新特性。总的来说,React18带来了以下3个方面的更新:
➢Automaticbatching
➢SSRforSuspense
➢NewAPIsforappandlibrarydevelopers
➢Automaticbatching
React18通过默认执行更多batching(批处理)来增加开箱即用的性能改进,无需在应用程序或库代码中手动批处理更新。batching是指,React可以将回调函数中多个setState事件合并为一次渲染。
●SSRforSuspense
完整名称是:StreamingSSRwithselectivehydration。
即像水流一样,打造一个从服务端到客户端持续不断的渲染管线,而不是rerToString那样一次性渲染机制。selectivehydration表示选择性水合,水合指的是后端内容打到前端后,JS需要将事件绑定其上,才能响应用户交互或者DOM更新行为,而在React18之前,这个操作必须是整体性的,而水合过程可能比较慢,会引起全局的卡顿,所以选择性水合可以按需优先进行水合。
●NewAPIsforappandlibrarydevelopers
ConcurrentAPIs:
ConcurrentRering相关的变动是React18的主要变动之一,简而言之,这个能力会让React应用保持更好的响应性。这是一种可中断渲染的设计架构。什么时候中断渲染呢?当一个更高优先级渲染到来时,通过放弃当前的渲染,立即执行更高优先级的渲染,换来视觉上更快的响应速度。
useTransition:允许组件在切换到下一个界面之前等待内容加载,从而避免不必要的加载状态。
startTransition:被startTransition回调包裹的setState触发的渲染被标记为不紧急的渲染,这些渲染可能被其他紧急渲染所抢占。
useDeferredValue:返回一个延迟响应的值,例如一个选择输入框过滤列表的场景,我们可以针对列表使用useDeferredValue传入选择器对应的值。
新的startTransition与useDeferredValueAPI,本质上都是允许你将UI的一部分标记为较低的更新优先级。
其他APIs:
useSyncExternalStore:useSyncExternalStore将替代useMutableSource用于订阅外部源,解决ConcurrentRering可能导致的数据不一致的问题,也是库作者可能需要,一般开发者不太能用到。
useId:useId用于在客户端与服务端之间产生唯一ID,避免SSRhydrate时元素不匹配。
useInsertionEffect:用于插入全局DOM节点。
React18将在明年与新的ReactNative架构(可用React18特性)一起发布。
3、Svelte前端框架战局中的黑马前端领域风起云涌,框架层出不穷,前端三大马车React、Vue、Angular始终稳居前三甲。同时我们也注意到在众多前端框架中,由RichHarris(Ractive,Rollup和Bubble的作者)开发的Svelte有望成为一批黑马,在前端框架中脱颖而出。
在《StackOverflow于2021年准备的最新调查》中,71.47%的受访者将Svelte选为最受欢迎的框架,领先于的69.28%和Vue的64.41%。而在JS现状2020调查中,Svelte在用户满意度89%、兴趣度66%均取得了第一的成绩表现。Svelte从一诞生,就用来对标React/Vue等框架,我们也看到了关于Svelte与React的争论,看到了19年尤大回复的《如何看待Svelte这个前端框架》以及21年vue-Svelte-size-analysis评测,足见Svelte的发展态势。
前端战局中的黑马我们调查发现,开发者喜爱Svelte,主要源于以下几点:
1、更高的开发效率。Svelte有着极其简洁的语法,交互式教程让其有较低的学习曲线和上手成本,熟悉vue语法的基本上很快能够上手。
2、更小的体积。Svelte的核心思想在于通过静态编译减少框架运行时的代码量,这在小型应用中,优势相当明显,React的压缩版本大小为42.2KB,Svelte的压缩版本大小为1.6KB。但是在中大型应用中,这个优势会被慢慢缩小,甚至成为劣势。
3、更高的性能。Svelte没有采用现在普遍使用的VirtualDom,而是另辟蹊径采用Template语法,让编译器在编译阶段就记录了哪些数据需要更新。这让Svelte性能不仅胜过React,还胜过Angular和Vue。
4、更优的WebComponents分发。Svelte直接编译成JS,生成浏览器能够识别的WebComponents组件,这让基于Svelte开发的组件能够用于其它框架,譬如React/Vue/Angular等。
时光飞逝,Svelte的发展速度可能也超乎我们的想象。被诟病不支持TypeScript的前端框架没有未来的Svelte在2021年也支持了TypeScript,UI库SvelteMaterialUI也在逐步迭代中,开发者社区也加入了越来越多的小伙伴,丰富了Svelte在单元测试、WebComponents、SSR等方面的实践。
回顾2021年,Svelte最重要的莫过于下面两件事:
1、2021年11月20日举办了秋季峰会。峰会RichHarris给我们讲述了Svelte的历史,并宣布他将入职Vercel,之后全职维护Svelte。峰会上也邀请到了社区众多的开发者,分享Svelte的一些实践,让我们看到Svelte更多的可能性。
2、SvelteKit正式发布beta版。SvelteKit是基于Svelte开发的web应用框架,类似于基于开发的框架。它继承了服务端渲染SSR,路由,支持TypeScript,支持less/sass,支持Vite打包等特性。既能高效开发,又高性能。尽管目前SvelteKit目前还有些bug仍需要解决,部分缺失的功能亟待完善。但仍不妨碍项目敢在生产环境去使用它。
静待花开的搅局者虽然我们看到Svelte深受开发者的喜欢,但是到目前为止,仍然很难看到有大型应用在使用Svelte,其性能优势、体积优势等并没有在大型应用中得到验证。由于React/Vue/Angular先入为主,尤其是在大公司,已经有非常完备成体系的配套方案,成熟的体系基本上很难去改动,后起之秀也很难有如React等框架活跃的社区,Svelte要走的路还是很长。但是我们观察到,包括阿里、字节、腾讯等大公司也都在新业务中尝试使用Svelte开发,在中小型应用、h5应用、WebComponents等方面确实有它的优势所在,也值得尝试。尽管Svelte有很多优势,但想以一己之力挑战React/Vue/Angular的江湖地位,目前来看还是需要静待标杆大型应用,静待各大大公司推出基于Svelte开发的UI库,或许Svelte大放异彩的时机就会到来。
4、桌面端-前端开发的下一个战场持续扩大桌面应用领域影响自2014年Github推出Electron开源框架开始,前端跳出Web客户端局限,开发桌面应用的能力成为了可能,近年来,依托Electron、ReactNative、Flutter等应用框架,前端跨端开发桌面应用的概念持续升温。尽管这些方案和传统的QT、Xaramrin等技术栈相比,性能未必最优,但它意味着一些极具性价比的可选方案出现,大大降低了开发桌面应用的门槛。
ElectronElectron是GitHub开发的一个开源框架。它通过使用(作为后端)和Chromium的渲染引擎(作为前端)完成跨平台的桌面GUI应用程序的开发。已有大量知名桌面应用采用Electron进行开发,如slack、VSCode等。Electron的所需开发能力与前端开发能力技术栈有着较大的重合,因此对于前端开发同学来说,使用Electron进行桌面开发的上手门槛较低,同时Electron作为一个深耕迭代8年的项目,应用生态链丰富,进一步减少了上手成本。
使用Electron进行桌面应用开发,对于前端自身能力提升也有赋能,一方面扩展了技术广度,可以将前端的业务能力范畴由单一的Web端页面扩展到PC应用开发,一些目前Electron暂时不支持的能力,还可通过C++编写Node组件来扩展支持;另一方面很多前端侧的限制被打破,比如一些传统的Web安全限制,系统底层接口的调用,能够做到开发能力赋能。
当然,Electron也并不是全无缺陷的,一些常受诟病的缺点有:
打包体积过大,由于捆绑了Chromium内核等大量依赖,导致Electron的打包体积普遍在100M+,这一点我们可以使用asar压缩、动态链接库等方式进行优化。
内存占用高,同样的由于捆绑了Chromium内核,Electron的内存占用普遍也较高。
UI层视觉渲染效率低,这一点也可以通过优化手段,如多进程处理任务、甚至利用视觉假象来提升用户体验。
虽然Electron有着一些已知的问题,但完善的生态链、与前端技术的高度重合,目前仍然是快速开发桌面应用的推荐方案,对于性能问题我们也较容易通过一些常见的优化手段来进行解决,达到80分的程度。2021年,Electron依然保持着8周一个major版本的稳定更新频率,推出了V12到V15的多个大版本,更新的内容主要集中在API的删改、系统特性的适配、Chromium内核等依赖的版本更新等细节方面。
ReactNativeDesktopReactNative是Facebook技术团队于2015年4月在早先的React前端框架基础上开源的一套移动跨平台开发框架。对于桌面应用的构建,目前RN团队暂时没有推出官方的桌面端版本,主要依托社区项目进行持续发展的能力建设。在这之中,微软开发的ReactNativeForWindows+macOS技术方案是经验积累最多,也是开发迭代最为稳定的方案,自15年底项目发布以来,已经经过了6年的稳定迭代。2021年RN团队推出了0.64-0.66三个重要版本,而微软在ReactNativeForWindows的迭代中,也时刻保证对RN主版本的更新,同时也支持了大量Windows相关的特性。如果你构建的桌面应用主要目标用户在Windows平台,那么使用ReactNativeForWindows不失为一个好的选择。
值得一提的是,2021年RN技术团队除了在推出的重要版本中提供对新的Android12与iOS15系统的支持外,也着重提到了与微软团队在桌面应用构建技术上的共建,RN团队表示,将通过引入Facebook的Messenger团队共建,来为桌面应用提供一些「独有的」技术能力,以此提升ReactNative桌面版的用户体验,对此,我们也将拭目以待。
FlutterDesktopFlutter是由谷歌推出的移动UI混合开发框架,它实现了一整套自底而上的基础库,用户可以在iOS和Android构建高质量的原生用户界面。
目前Flutter为了支持在桌面侧的开发能力,采用的是把代码转成Web的跨端渲染方案。但FluttertoWeb性能还存在着大量提升的空间,虽然这一年内业内有不少优化方案,但想要性能有明显提升,多少都会通过魔改Flutter源码的方式来实现,这些优化手段在长期的Flutter版本迭代过程中,会有较大的优化成本。即使这样,优化过后的FluttertoWeb性能,和传统的Web项目相比,也略有不足。所以在不考虑兼容性的前提下,采用toWeb方案的开发尽量使用CanvaskitRer模式,该模式是基于Skia的WebAssembly方案,会有更好的渲染性能,但加载性能方面还需持续优化。
可能是为了彻底解决桌面端的性能问题,2021年中,FlutterDesktop侧推出了WindowsNative方案,但它目前仅支持64位系统,这使得它无法支持Win7等较低32位系统的Windows版本,会大大增加了开发者的兼容成本。不过2022年2月,FlutterDesktop正式推出了稳定版,适配了许多常用插件以包含对Windows的支持,包括camera,file_picker和shared_preferences。更重要的是,社区已经添加了各种其他package对Windows的支持,涵盖了从Windows任务栏集成到串行端口访问的全部内容。同时许多Microsoft的团队也积极配合,为正式版的发布做出了很大贡献。2022年,FlutterDesktop值得尝试一下。
Tauri包体积大小更小
运行时内存占用更小
安全摆在第一位
真正的开源
但是理性思考,对于前端开发来说,有三个致命的缺点:
Tauri使用系统webview,会有兼容性问题,这也是Electron重点解决的问题
抛弃了nodejs,生态圈目前来说还是很难比得上Electron的
底层开发要用Rust,有一定的上手成本
当然Tauri现在还不是非常成熟,但是随着Rust的生态起来,浏览器兼容性渐小之后,胜负犹未可知。
6、Rust-是时候掌握一门新语言了Rust是JS基础设施的未来随着前端生态工具的逐渐完善,大家除了探索前端的新领域之外,同时还在思考如何提高工具的性能,众所周知,JavaScript的性能一直是被大家所诟病的点,但是前端的基础设施却是十分要求性能的,比如构建等,所以大家开始考虑是否能够用别的语言来编写前端工具,于是Rust吸引了大家的眼球,Rust语言自诞生以来,就以它的安全性、性能、现代化的语法吸引了大批的开发者,在过去六年的stackoverflow最受喜爱的编程和语言中连续获得榜首的位置,并且已经有众多领域都出现了Rust重写的项目,Linux项目也表示正在使用Rust重写一部分功能,可以说Rust进入前端领域也是一种必然的趋势。LeeRobinson在2021年写的一篇文章《RustIsTheFutureofJavaScriptInfrastucture》(《Rust是JS基础设施的未来》)列举了众多Rust编写的前端工具项目,并表示Rust将会持续加大影响Javascript的生态圈,这篇文章也是被众多公众号转了个遍,引发大家的热烈讨论。
Rust工具融入前端生态在前端构建领域,2021年出现了一个十分突出的项目——swc,它是由Rust编写的构建工具,可以用来编译、压缩、打包,目前它已经被一些知名项目使用,比如、Parcel、Deno等,直接使用了swc替代babel,并在他们的官网博客表示说使用了swc之后,热更新速度提升到了原来的三倍,构建速度提升到了5倍,由此可见,Rust性能的强大。
除了构建方面,在前端的其他领域也是有着Rust的身影,比如Deno的运行时引擎也是用的Rust编写的V8引擎;前端的下一代工具全家桶Rome宣布使用Rust重写;可以通过napi-rs来调用Rust模块,实现高性能扩展;使用Rust编写的dprint规范代码器,要比Prettier快30倍;Rust也可以编译成WASM,并且出现了像yew、percy这样的WASM前端框架。
可以预见的是,Rust工具将会更加深度地融入前端生态,说不定会引发前端生态的又一次更新换代。
前端人是时候学习一门新语言相信有不少人看到过这样一个推特截图,Redux作者DanAbramov在某个提问“未来三年最值得学习的语言是什么”下回答了“Rust”,这或许是对前端人员的一个启发,我们也是时候学习一门新语言来让前端生态圈再次焕发活力了,可是不少人会被Rust陡峭的学习路线给劝退,但其实Rust在不少地方是跟前端开发有着相似的地方的,要想入门的话也并不是那么陡峭。
比如,在工具链上,Rust的rustup就相当于nvm,可以切换运行工具cargo(Rust版的npm)的版本,但它也比nvm强大,在安装rustup的同时,还会安装clippy(Rust版的eslint)、rustfmt(Rust版的prettier),用Rust配套工具新建的项目就已经带有代码格式化、分析配套的工具。
再来看看cargo与npm的相似之处,两个工具在很多命令上都有着相似的地方,并且npm一些需要自己在项目配置的命令在cargo这是不需要配置的,甚至cargo是自带了monorepo的管理,可以直接配置多package的项目,与其说cargo跟npm对应,倒不如说cargo更像是npm与yarn的结合,这也是Rust团队借鉴参考现代化语言工具链的成果。
在语法上Rust也是极具现代化语言的特点,借鉴了函数式编程、结构化语言的特点,并且在它们的基础上也创造了许多更为先进的语法。在函数式编程的地方,也有着不少JavaScript的身影,比如JS的箭头函数对应了Rust的闭合函数;Rust的数组同样也有着map、reduce、filter等方法;Rust的函数也可以赋值给一个变量。
如果在以前说前端可以去学习的第二语言是C++,那么现在或许就是Rust了,它有着比C++更现代化的依赖管理、语法、工具链,让你不至于在一开始就被劝退,还能让你在前端领域更具竞争力。
6、低代码将持续成为热点话题距我们在2020技术趋势中谈及“低代码”又过去了一年,从2020年19亿到2021年28.5亿的市场规模,无疑表明该领域依旧火热,依旧在快速发展中。如果说2020年让我们收获了对低代码领域持续升温的预期,那么2021年则让我们看到了更多关于低代码领域未来发展的趋势。
一方面,我们看到腾讯微搭、阿里宜搭等企业级低代码平台在行业内开始发力,公司内也有无极等专注管理台搭建的平台逐步成熟。大量平台型产品仍在差异化高速发展,仍是主流的发展思路。在IMWeb团队内,从19年开始的运营低码平台Vision,到20年的管理台低码框架Hulk,我们一直在通过垂直类低码平台加速业务研发。2021年,我们进一步在服务端场景进行了尝试,打磨出了专注接口搭建的HulkData平台。
另一方面,值得思考的是,在高速发展的差异化、场景化的平台产品之间,是否存在某些共性?毕竟不管针对什么场景,从零建设一个低码平台的成本绝不低,此类的资源浪费在大厂里尤为突出。
同时,我们也看到在今年底的GMTC大会上,阿里已经对外宣传了集团的低代码引擎,从分享内容看已经支撑了60多个低代码平台的建设;而腾讯内部的低代码Oteam也在21年开始组织起来,主要的目标也是底层核心的共建。从整个行业看,低代码引擎已经开始崭露头角,且可预见到趋势还将上升。只是这个细分赛道更多可能只是大厂参与,因为其需要大量的场景支撑验证,而这是小厂或独立开发者不具备的。
总观下来,差异化的平台产品仍将是我们接触低代码领域的主要途径;而低代码引擎的出现,将为整个行业带来更多的可能。
7、D2C前端智能化未来可期“前端智能化”是近些年业界在前端+AI方向上的新的探索。何谓智能化?就是将智能化算法结合前端工程化实践,让机器进行辅助开发。
D2C:历史与现状截止目前,前端智能化领域最大规模落地的产品形态就是各种DesigntoCode(下文简称D2C)工具:输入UI设计稿,通过一系列算法,输出可用的代码。
2017年一篇论文pix2Code,提出了图像生成代码的想法。2018年,微软开源了Sketch2Code项目,进一步验证了该方向的可行性。紧接着2019年,阿里淘系上线imgcook,并在接下来的几年里支撑了双十一、618等大量业务。这标志着D2C技术逐渐成熟,大规模业务落地势在必行。
时间来到2021,国内外各大公司都在此领域展开了相应的探索和实践:腾讯IMWeb团队启动了ProjectAuton,已经在内部上线试水,预计今年6月对外提供服务;阿里的imgcook依旧在持续进行快速迭代;字节内部基于低代码平台,孵化出了“ALYX”项目,也在内部展开了实践;58团队开源了Picasso;转转上线了”神笔马良”平台
另外,D2C领域也涌现出一批创业公司。如国内的CodeFun、蓝湖,国外的Framer、Anima等。值得一提的是CodeFun,在易用性、还原度方面有相对较好的表现,上线后获得了不错的口碑。但在整个前端开源社区,目前D2C领域还没有一个足够有影响力的开源项目。因此各家也基本都处于“闭门造车”的状态。
硬币的两面:缺陷、场景与机会相对于早期基于纯视觉算法的方案,目前大规模落地的D2C产品基本都是以设计稿源文件(Sketch、Figma、XD等)作为原始输入。由于纯视觉算法很难从二维图像上提取UI的层级等信息,而设计稿文件则可以通过解析内部DSL获取更详细的结构化UI描述,更方便进行后续的处理与代码生成。
传统的pro-code开发模式下,通常都是“PRD+设计稿”作为输入,产出业务代码。但D2C系统把设计稿作为唯一输入,设计稿只是单纯的UI描述,导致很多信息无法从设计中推断出。如动画、交互、逻辑甚至是响应式等都无法单独依靠D2C实现。由于这些缺陷,D2C的场景大多也只是作为面向开发的辅助工具。距离真正的完全智能化(无需人工干预即可产出逻辑完备且生产环境可用的代码)还为时尚早。
虽然存在上述诸多缺陷,但在UI开发这一领域,D2C大有可为。
D2C的产物(组件/页面代码或描述UI的DSL)通常有如下几种消费路径:
产出代码,作为基础UI组件,由开发者进行二次开发。
产出代码,作为基础物料供给,结合low-code/no-code平台进行二次编辑和编排。
产出DSL,结合定制化的rer进行直接渲。
尤其是第二种消费路径,借助近些年大热的low-code平台,对D2C产出的UI物料进行数据绑定、逻辑编排、样式编辑、交互编排等人工干预和二次编辑,可以补全D2C的能力短板,并且建立出一套快速、高效、可沉淀、可复用的代码生产SOP。
另外,D2C以其高效的供给效率,可以突破low-code/no-code的物料生产瓶颈,为前端的研发范式从pro-code走向low-code的变革加上了助推剂。
借助D2C+low-code/no-code,再结合近年来大热的SaaS、FaaS、BaaS等技术产品形态,可预见地在不远的未来,真的可以实现不需要工程师就可以零代码快速上线一个数据、交互、逻辑完备的产品。这极大地降低了很多创新型业务的初期成本,甚至可能助推下一波互联网创业浪潮,让我们拭目以待。
不过目前为止,还没有出现哪一个平台能把上述几种产品形态(D2C+low-code/no-code+SaaS/FaaS/BaaS)完美地整合起来形成闭环,同时保持优秀的用户体验。未来几年,这个领域或许会催生出一些明星创业公司。
展望未来:深耕、整合、研发范式变革展望2022年,可以预见前端业界智能化及D2C还将进行持续地发展,整体为如下两大趋势:
纵向上:持续深耕,优化流程、算法和体验,让“智能化”真正的越来越“智能”。
横向上:建立标准和流程,打通整合上下游能力,串联low-code、no-code、FaaS、BaaS、SaaS、设计体系、算法体系、研发体系、数据体系等真正形成工业化的快速生成体系,解放生产力。
从长远来看,一旦上述体系建立起来,必将驱动业界开始下一次的研发模式变革。从目前的pro-code为主的研发模式,变革为pro-code、low-code、no-code三种模式相辅相成、互相供给和赋能的模式。同时由于标准化体系的建立,物料和产物都可以更容易实现通用和复用。这对于研发效能的提示无疑是巨大的!
这一些都充满想象,即使智能化的路程中充满质疑与险阻,但未来是值得期待的。新的一年还将继续深耕和发展,2022未来可期……
8、DevOps,研发效能仍是重点和敏捷的概念类似,到底什么是研发效能很难精确定义。其实很多复杂概念也不是定义出来的,而是逐步演化出来的,是先有现象再找到合适的表述。其实,效率和效能也从来都不是软件工程的专有名词,纵观人类发展史,就是生产力和生产效率不断提升的发展篇章,到了数字化时代,软件研发效能的重要性被凸显了出来。如果要用一句话来总结研发效能的话,我们会用“更高效、更高质量、更可靠、可持续地交付更优的业务价值”来总结。
我们能做的不是提升研发效能的绝对值,而是尽可能减缓研发效能恶化的程度,使其下降的不至于太快,努力保持现状就是成功。
IMWeb团队在DevOps方面,2021年有较大的进展。一方面,我们与腾讯云Coding在开发、测试、部署、运维等多个领域进行了共建,团队自研的效能平台Thanos与Coding团队深度打造应用工作流方案,代理联调平台TDE与Coding团队打通测试环境Nohost网关,接口联调契约平台Tolstoy与Coding共建API托管、Mock和测试的能力。在研效大背景下,我们通过腾讯云Coding实现了效能平台的大统一,整体研发效能提升30%以上。
9、微前端,不可轻视的一环2016年ThoughtWorks提出了微前端思想:将庞大的项目拆分成各个小型灵活项目,这些小项目互不干扰,可以独立开发、独立运行以及独立部署,由此拉开微前端帷幕。在2019年阿里在single-spa基础上开发了qiankun微前端框架后,微前端的热度一直在增加。在微前端的发展过程中,开发者们也慢慢摸索出当下微前端的应用场景:
Image
时间来到2021年,微前端的框架已经非常多了,其中名声比较响亮的有老牌的single-spa,GithubStar数最高的微前端框架qiankun,以及新兴微前端框架京东的MicroApp。
Image
single-spa自2020年发布了后,在去年上半年主要工作还是围绕一些Bug的修复,而在下半年7月份发布了的beta版本。虽然也有一些BreakingChanges,但是对于这些Changes,大多数用户是不需要更新自己代码的。其中比较重要的是在浏览器方面,将是最后一个支持IE11的版本,且在以后的版本+将不再支持IE11,single-spa团队将会把更多精力从浏览器兼容转到维护整个single-spa生态上。还加入两个新特性:
支持异步取消页面导航。
暴露patchHistoryApi,开发者可以使用single-spa封装后的pushState/replaceState/popstate/hashchange。
不仅老牌框架在发力,号称“可能是你见过最完善的微前端解决方案”qiankun也在不断更新。qiankun主要还是解决不同应用场景的一些问题,以及修复沙箱中一些JavaScript的兼容问题,比如沙箱中的defineProperty问题,以及沙箱性能问题等。虽然qiankun在去年看起来没太多更新,但是它也给出了令人激动的,里面说到了非常多更新,主要更新有:独立应用加载模块以及独立沙箱模块。
不过,qiankun依然没有解决侵入性强的问题,并不能像类似iframe一样很方便地嵌入页面。
下半年一个好消息是,京东也推出了自己微前端的解决方案MicroApp。它并没有采用single-spa和qiankun的组件化思路,而是借鉴了WebComponent的思想,通过CustomElement结合自定义的ShadowDom,将微前端封装成一个类WebComponent组件,从而实现微前端的组件化渲染。它有以下特性:
类WebComponent+HTMLEntry
生命周期
资源地址补全
JS沙箱、样式隔离、元素隔离
数据通信
预加载
插件系统
MicroApp在使用性和侵入性都做得非常完美,这个框架的发展和未来是非常值得期待的。
总的来说,微前端的基础来自于“所有大型系统都逃不过熵增定律”,它能解决的问题也是解构一些巨石应用,所以微前端更多时候是“悲观主义工程师”在工程上的妥协。对于是否要使用微前端,可以看qiankun作者kuitos在这篇《你可能并不需要微前端》里的分析。
展望2022技术趋势业务可能会碰到瓶颈,但是技术的发展是永不止步的。只有“厚积”才能“薄发”,前端人必须时刻磨炼自己,突破自身界限,才能在这个规范化、工业化、智能化、大统一化的时代走的更远!
在细分领域方面,我们可以对2022年做一些展望:
React和Vue还是按照自身的特色在持续发展,重点还是围绕着用户体验和开发者体验两块。而黑马Svelte是否能够破局,以及Svelte新思潮的冲击和影响,值得期待。
随着全栈的深入发展,各大UI框架都有自己的“元框架”来构建全栈应用,再加上传统大哥Nest和后起之秀Remix,真可谓百家争鸣。但后台开发的深海不是某个框架能够填平的,更需要的是前端开发者的意识与经验积累,相信未来一年,前端会渗透的更加深入和全面。
TypeScript已经是前端项目的标配了,可以预计未来将会有更多强大的配套工具提高生产力还有提升使用体验。
各大跨端框架都瞄准了桌面端,另外随着“云游戏”的火热,“云应用”也非常有潜力,前端开发当然不能丢掉这个阵地了,Electron的社区以及Tauri的性能都值得期待。
如果希望自己走的更远,是时候学习一门新的语言了,JS基础设施的未来——Rust,全栈——Go,AI——Python,Flutter——Dart,前端人打破自身边界,更待何时?未来WASM必定大火,无前端不识!
ToB的转变趋势明显,低代码大有可为,令人高兴的是,更多的大厂趋向统一低代码,开源引擎,结束低代码平台遍地跑的乱局,这也是互联网行业走向工业化和智能化的必经途径。
D2C是前端智能化的开端,道路还非常漫长,很期待更多的前端智能化产品落地!
研效平台也处在大一统的阶段,未来一年应该还会持续进行,虽然会有阵痛,但为了未来研发工业化与智能化,这个付出是值得的!
随着业务发展,管理系统不断增长以及大统一的趋势,巨石应用是不可避免并且会越来越多的,如果得了这个病,微前端不失为一方良药,微前端的生态和建设、以及MicroApp借鉴WebComponent的思想都非常值得期待!





