-
Notifications
You must be signed in to change notification settings - Fork 135
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面向前端与未来标准的Node.js Web 框架再进化 #1240
Comments
面向前端与未来标准的Node.js Web 框架再进化 by 淘系技术Web 开发一直是 Node.js 的主流方向,无论新人必学的 Express / Koa,或者是社区流行的企业级框架 Egg / Nest,各类 Web 框架层出不穷。本次分享来自阿里巴巴前端技术专家刘子健(繁易)在第十六届D2前端技术论坛的分享,为大家带来 Node.js Web 框架的发展历程,分析各类框架的适用场景及利弊,并基于阿里的 Node.js 框架 Midway,为大家介绍在过去这两年,我们对下一代 Node.js Web 框架的思考、设计、实践,包含如何面向前端做一款前端“爱用”的 Node.js 框架,如何面向未来标准甚至参与标准来设计 Node.js Web 框架两部分。 Node.js & Web 框架简述 Node.js是基于Chrome V8 JavaScript 引擎的运行时,一般用于编写CLI、处理数据、编写Restful API、进行页面渲染等等多种作用。之前JavaScript在浏览器端限制比较多,但是自从有了Node.js以后,应用范围得到很大拓展。 ▐ Web框架功能现代的Web开发不管使用什么语言都离不开Web框架。Web框架具有Restful API、数据库CRUD、页面渲染、身份校验等功能,提供了高效开发Web应用的方式,同时Web框架存在适用场景以及规则约束,有源源不断的框架推陈出新。 ▐ Node.js框架的发展阶段Node.js的发展分成三个阶段,分别是起步期、企业架构期、面向前端期。
其优点是简单易学,易于集成,Express框架容易集成到Nest和Webpack框架中,Koa.js框架容易集成到Egg和Midway框架中,生态繁荣,久经考验。 其缺陷也是比较明显,表现为缺乏规范和最佳实践、不利于团队协作和大规模开发、Express年久失修。
在2014年到2017年,Node.js规模化落地,专业的Node.js工程师出现,主打企业级框架和架构以及规模化和团队协作化。 在这一段时间主要出现的框架有nest、Egg、Midway框架,但大多以Express和Koa框架作为基础框架,如下图: 企业级框架优点为大而全,功能完善,规范并且最佳实践明确,易于团队协作,同时社区生态活跃。 缺陷是大而全导致上手成本高;限制多,难扩展。
这些框架的优点主要是来自于前端,全栈开发,简单容易学习,支持Serverless部署。 其缺陷是后端功能较弱,自定义扩展困难,强依赖于平台支持。
▐ 总结
Midway - 面向前端的框架演进之路 Midway是2014年开发的框架,发布了7个大版本,2018年正式开源。 Midway作为一款企业级开发框架,技术选型上,主要有TypeScript(静态类型、多人协作)、IoC(复杂架构、面向接口编程)、Egg(统一框架、复用生态)。Midway Demo示例如下图: ▐ Node.js应用状况集团在2019年的时候,Node.js应用状况表现为:
传统应用的缺点限制了Node.js在阿里的进一步发展。 ▐ 前端诉求
总体上需要赋能前端,让云原生给前端降本增效。 ▐ 技术方向通过以上现状和诉求,2019-2020 阿里巴巴前端委员会的四大技术方向为: ▐ 面临挑战
前端工程师和Node.js工程师出现割裂。前端工程师偶尔写接口,希望简单易上手;对于Node.js工程师来说,因为日常管理上万行代码,更注重于复杂场景的应对能力。
简单场景和企业级场景不同,简单场景要求快速实现CRUD,接口聚合;企业级场景注重维护性,依赖注入,基础架构,简单场景将会逐步演化成为复杂场景。
目前主流的前端都在从Class Component 向 Function + Hooks转变,包括React、Vue等,最终会导致函数式开发和OOP开发并存,如下图比较图: 同一个开发者在写前、后端的时候,思维是不一样的,那么框架有没有可能支持函数式开发,又能与OOP 并存? ▐ 解决办法:渐进式设计
JavaScript 函数即接口,统一并且无协议。
针对前后端范式不一致的问题,设置了useContext API,可以直接拿到运行时的参数,最终实现无需手动传入参数,就能够实现前端保持一致。示例代码如下: 面向全栈应用设计
如果是面向后端,可以使用IoC+装饰器、Middleware、ORM、Swagger、Cache、HTTP、gRPC,部署在Server上,实现复杂的企业级应用。
▐ 落地情况Hooks于2020年4月发布,有2500多个应用,是阿里前端的主流模式。 ▐ 总结
未来 - 面向标准&规划 ▐ 类型安全▐ 展望:云端融合目前有两个在推的提案,分别为JS Module Blocks(动态引入代码)和JS Module Fragments(模块可以命名,模块可以静态导入)。 根据这两个提案,引入我们的第三个方向,最终实现在一个文件中,可以实现server端和ssr端以及client端融合。 目前正在与前端委员会标准化小组推进TC39 提案,反馈场景,谋求推进至Stage 2。 项目网址:https://github.com/tc39/proposal-module-declarations/issues/14 团队介绍 作者|繁易 编辑|橙子君 |
https://mp.weixin.qq.com/s?__biz=MzAxNDEwNjk5OQ==&mid=2650458797&idx=1&sn=b3a29bd7ac6bbba6002f67dcf44ae3ba
The text was updated successfully, but these errors were encountered: