前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >华为自研的前端框架是什么样的?

华为自研的前端框架是什么样的?

作者头像
公众号@魔术师卡颂
发布于 2023-12-04 12:09:12
发布于 2023-12-04 12:09:12
52500
代码可运行
举报
文章被收录于专栏:魔术师卡颂魔术师卡颂
运行总次数:0
代码可运行

大家好,我卡颂。

最近,华为开源了一款前端框架 —— openInula[1]。根据官网提供的信息,这款框架有3大核心能力:

  1. 响应式API
  1. 兼容ReactAPI
  1. 官方提供6大核心组件

并且,在官方宣传视频里提到 —— 这是款「大模型驱动」「智能框架」

那么,这究竟是款什么样的前端框架呢?我在第一时间体验了Demo,阅读了框架源码,并采访了框架核心开发者。本文将包括两部分内容:

  1. 对框架核心开发者陈超涛的采访
  2. 卡颂作为一个老前端,阅读框架源码后的一些分析

采访核心开发者

开发Inula的初衷是?

回答:

华为内部对于业务中强依赖的软件,考虑到竞争力,,会开发一个内部使用的版本。

Inula在华为内部,从立项到现在两年多,基本替换了公司内绝大部分React项目。

卡颂补充背景知识:Inula兼容React 95% API,最初开发的目的就是为了替换华为内部使用的React。为了方便理解,你可以将Inula类比于华为内部的React

为什么开源?

回答:

华为对于「自研软件」的公司策略,只要是公司内部做的,觉得还ok的自研都会开源。

接下来的提问涉及到官网宣传的内容

宣传片提到的大模型赋能、智能框架是什么意思?

回答:

这主要是Inula团队与其他外部团队在AI低代码方向的一些探索。比如:

  1. 团队与上海交大的一个团队在探索「大模型赋能chrome调试业务代码」方面有些合作,目的是为了「自动定位问题」
  2. 团队与华为内部的「大模型编辑器」团队合作,探索「框架与编辑器定制」可能性

以上还都属于探索阶段。

Inula未来有明确的发展方向么?

回答:

团队正在探索引入「响应式API」,相比于「React的虚拟DOM」方案,响应式API能够提高运行时性能。24年可能会从Vue composition API中寻求些借鉴。

新的发展方向会在项目仓库以RFC的形式展开。

补充:RFC「Request for Comments」的缩写。这是一种协作模式,通常用于提出新的特性、规范或者改变现有的一些规则。RFC的目的是收集不同的意见和反馈,以便在最终确定一个决策前,考虑尽可能多的观点和影响。

为什么要自研核心组件而不用社区成熟方案?

卡颂补充:所谓「核心组件」,是指状态管理、路由、国际化、请求库、脚手架这样的框架生态相关的库。既然Inula兼容React,为什么不直接用React生态的成熟产品,而要自研呢?毕竟,这些库是没有软件风险的。

回答:

主要还是丰富Inula生态,根据社区优秀的库总结一套Inula官方推荐的最佳实践。至于开发者怎么选择,我们并不强求。

卡颂的分析

以上是我对Inula核心开发者陈超涛的采访。下面是我看了Inula源码后的一些分析。

要分析一款前端框架,最重要的是明白他是如何更新视图的?这里我选择了两种触发时机来分析:

  1. 首次渲染

触发的方式类似如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Inula.render(<App />, document.getElementById("root"));
  1. 执行useState的更新方法触发更新

触发的方式类似如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function App() {
  const [num, update] = useState(0);
  // 触发更新
  update(xxx);
  // ...
}

顺着调用栈往下看,他们都会执行两步操作:

  1. 创建名为update的数据结构
  2. 执行launchUpdateFromVNode方法

比如这是首屏渲染时:

这是useState更新方法执行时:

launchUpdateFromVNode方法会向上遍历到根结点(源码中遍历的节点叫VNode),再从根节点开始遍历树。由此可以判断,Inula的更新机制与React类似。

所有主流框架在触发更新后,都不会立刻执行更新,中间还有个调度流程。这个流程的存在是为了解决:

  1. 哪些更新应该被优先执行?
  2. 是否有些更新是冗余的,需要合并在一块执行?

Vue中,更新会在微任务中被调度并统一执行,在React中,同时存在微任务(promise)与宏任务(MessageChannel)的调度模式。

Inula中,存在宏任务的调度模式 —— 当宿主环境支持MessageChannel时会使用它,不支持则使用setTimeout调度:

同时,与这套调度机制配套的还有个简单的优先级算法 —— 存在两种优先级,其中:

  • ImmediatePriority:对应正常情况触发的更新
  • NormalPriority:对应useEffect回调

每个更新会根据「更新的ID」(一个自增的数字)+ 「优先级对应的数字」 作为优先级队列中的排序依据,按顺序执行。

假设先后触发2次更新,优先级分别是ImmediatePriorityNormalPriority,那么他们的排序依据分别是:

  1. 100(假设当前ID到100了)- 1(ImmediatePriority对应-1) = 99
  2. 101(100自增到101)+ 10000(NormalPriority对应10000)= 10101

99 < 10101,所以前者会先执行。

需要注意的是,Inula中对更新优先级的控制粒度没有React并发更新细,比如对于如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
useEffect(function cb() {
  update(xxx);
  update(yyy);
})

React中,控制的是每个update对应优先级。在Inula中,控制的是cb回调函数与其他「更新所在回调函数」之间的执行顺序。

这意味着本质来说,Inula中触发的所有更新都是「同步更新」,不存在React并发更新中「高优先级更新打断低优先级更新」的情况。

这也解释了为什么Inula兼容 95% 的React API,剩下 5% 就是「并发更新相关API」(比如useTransitionuseDeferredvalue)。

现在我们已经知道Inula的更新方式类似React,那么官网提到的「响应式API」该如何实现呢?这里存在三条路径:

  1. 一套外挂的响应式系统,类似ReactMobx的关系
  2. 内部同时存在两套更新系统(当前一套,响应式一套),调用不同的API使用不同的系统
  3. 重构内部系统为响应式系统,通过编译手段,使所有API(包括当前的React API与未来的类 Vue Composition API)都走这套系统

其中第一条路径比较简单,第二条路径应该还没框架使用,第三条路径想象空间最大。不知道Inula未来会如何发展。

总结

当前,Inula是一款「类React的框架」,功能上可以类比为「React并发更新之前的版本」

下一步,Inula会引入「响应式API」,目的是提高渲染效率。

对于未来的发展,主要围绕在:

  • 探索类 Vue Composition API的可能性
  • 迭代官方核心生态库

对于华为出的这款前端框架,你怎么看?

参考资料

[1]

openInula: https://www.openinula.net/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 魔术师卡颂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
让Nginx 支持 ASP ASP.NET配置方法
nginx 作为世界顶级轻量WEB服务器。越来越受到网站开发者的喜欢了。国内大的网站 也都纷纷采用nginx作为生产环境。
用户1685462
2021/07/18
5.2K0
Nginx负载均衡
在大型网站中,负载均衡是有想当必要的。尤其是在同一时间访问量比较大的大型网站,例如网上商城,新闻等CMS系统,为了减轻单个服务器的处理压力,我们引进了负载均衡这一个概念,将一个服务器的压力分摊到几个服务器上,一方面减轻了宕机的几率,另一方面也使得宕机后还要其他服务器可以继续稳定运行,提高了系统的健壮性。
业余草
2019/01/21
1.1K0
Nginx负载均衡
opensuse nginx+mono 2.8支持aspx环境的配置
nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的门户网站及搜索引擎Rambler(俄文:Рамблер)使用。  其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中包括
张善友
2018/01/30
4.4K0
借助Nginx搭建反向代理服务器
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
java架构师
2019/02/26
3.2K0
Nginx
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。
框架师
2021/04/16
5780
Nginx
nginx+iis实现负载均衡
用户1168362
2018/01/05
2.5K0
nginx+iis实现负载均衡
Nginx负载均衡与反向代理
一、nginx配置属性详细说明: #全局设置 main  # 运行用户 user www-data;     # 启动进程,通常设置成和cpu的数量相等 worker_processes  1; # 全局错误日志及PID文件 error_log  /var/log/nginx/error.log; pid        /var/run/nginx.pid; # 工作模式及连接数上限 events {     use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方
Sindsun
2018/04/28
9830
Nginx负载均衡与反向代理
【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
一、反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从
小小科
2018/05/02
1.5K0
【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
Windows下Nginx负载均衡实现
2.配置nginx  打开nginx.conf文件 在http模块内添加 upstream 模块,插入 
星哥玩云
2022/07/25
8090
Windows下Nginx负载均衡实现
nginx 实现Web应用程序的负载均衡
文章转载自 博客园, 原文地址 http://www.cnblogs.com/ivanyb/archive/2011/11/16/2250710.html
乔达摩@嘿
2020/09/11
1.3K0
nginx 实现Web应用程序的负载均衡
Linux下的.NET之旅:第一站,CentOS+Mono+Xsp构建最简单的ASP.NET服务器
  由于Linux/Unix等有更强的安全性、运行效率高、拥有大量优秀的开源组件,而.Net则有着其他语言无与伦比的开发效率,因此在非微软平台下运行.Net程序的需求很强烈。Mono 是一个由Novell 公司发起、并且得到微软支持的开源项目。Mono 项目可以在Linux,FreeBSD,Unix,Mac OS X 、Android和苹果系统等非微软操作系统下兼容运行.Net程序。目前占IOS游戏应用市场55%份额的游戏都是使用基于Mono的Unity3d技术开发的。    基于Mono让ASP.Net开发的网站运行在Linux操作系统下也已经有了大量成功的案例,比如世界著名的网站“维基百科WikiPedia ”的搜索部分就是使用Mono支撑运行的、Mozilla开发者社区也是基于Mono运行,可以看http://www.mono-project.com/Companies_Using_Mono  这一些使用Mono进行开发的公司的列表。让.Net脱离Windows的禁锢,在开源的世界中尽情的徜徉。
Edison Zhou
2018/08/20
1.4K0
Linux下的.NET之旅:第一站,CentOS+Mono+Xsp构建最简单的ASP.NET服务器
在腾讯云上单机使用Nginx负载均衡发布网站
恕我见识短浅,不知道Nginx有Windows版本,可以运行在Windows系统下,当初遇到Socket并发压力增长,学习负载均衡的时候,找的是LVS的4层负载均衡,没有考虑7层负载均衡,所以一直不了解Nginx的Windows版本。今天写此教程,就是为了告诉大家怎么在Windows下配置Nginx。
opengps
2019/03/25
3K0
nginx实现负载均衡和动静分离
这篇文章主要为大家详细介绍了nginx实现负载均衡和动静分离,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
菲宇
2019/06/12
5290
在Ubuntu中配置ASP.NET站点
mono是.NET在Linux等非Windows平台上的第三方实现,借助它就可以实现.NET的跨平台应用。虽然mono还不能支持所有的.NET应用,但对于普通的小型程序,mono已经足够胜任了。更让人鼓舞的是当前最为流行的桌面Linux系统Ubuntu已经集成了mono的运行环境,只要手上有一个.net应用程序,拷贝到Ubuntu中,然后就可以运行了。实际上,在Ubuntu中,已经有一些应用程序是用C#完成的,例如附件中的便签程序Tomboy就是用C#写的,打开Tomboy的文件目录,就会发现很多在Windows中常见的dll程序集,所以,跨平台也不是不可以的。
用户1685462
2021/07/28
1.8K0
FastDFS蛋疼的集群和负载均衡(十四)之Nginx+Tomcat负载均衡
Interesting things 今天来配置一下Nginx+Tomcat负载均衡环境。 image.png What did you do today 什么是虚拟
用户2032165
2018/06/05
6460
Nginx反向代理和负载均衡配置
Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。
用户5706463
2019/07/21
1.3K0
在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验
本文介绍如何在.NET Core之前实现.NET跨平台,通过使用Mono、CentOS和Jexus服务器。首先,本文介绍了如何更新系统并安装Mono所需的库和GDI+兼容API的库Libgdiplus。然后,讲解了如何安装和配置Jexus服务器,并介绍如何部署ASP.NET Web应用程序。最后,总结了部署过程中的关键步骤和注意事项。
GuZhenYin
2018/01/04
9060
在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验
ASP.NET Core跨平台技术内幕
ASP.NET Core设计初衷是开源跨平台、高性能Web服务器,其中跨平台特性较早期ASP.NET是一个显著的飞跃,.NET现可以理直气壮与JAVA同台竞技,而ASP.NET Core的高性能特性更是成为致胜法宝。
有态度的马甲
2020/04/16
1.2K0
ASP.NET Core跨平台技术内幕
(转载非原创)Nginx的安装和部署
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
xlj
2021/07/17
4140
Nginx负载均衡配置与使用
现在Nginx到处都可以见到,经常会看到宕机后的网页会显示nginx的字样,这也说明Nginx由于高性能、使用配置简、开源单这些特点被越来越多的用户所接受,所使用。
Java帮帮
2018/12/24
7990
推荐阅读
相关推荐
让Nginx 支持 ASP ASP.NET配置方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验