跨平台开源项目Ngui【基准性能测试报告】

Ngui简介

这是一个GUI的排版显示引擎和跨平台的GUI应用程序开发框架,基于NodeJS/OpenGL,这也是第一个在移动端Android/iOS融合NodeJS的前端GUI项目,至此JavaScript成为了真正意义上前后端通吃的语言。

Ngui的目标:在此基础上开发GUI应用程序可拥有开发WEB应用般简单与速度同时兼顾Native应用程序的性能与体验。

Benchmark

距离项目第一个版本发布已有一段时间,虽然有做基准测试,但这段时间忙着找工作与外包的事情,一直没有向大家报告测试结果。 总体测试结果还算比较满意,基本达到当初开发这个库的初衷,但也有不足的地方。 在iPhone6上创建10万个Div并对相关属性进行设置需要10秒以上的时间,但在Android上这个时间会减少到1/2, 因为Android使用的V8,而iOS上是使用的JSC并通过胶水层粘合到V8的API,所以JS性能不如Android

对于2d绘图GPU不是主要瓶颈,主要瓶颈集中在CPU,但可优化的空间还很大。

测试主要集中在图形方面,这包括JS调用API的时间开销,图形绘制的帧率,CPU的运行百分占比。对于文件IO以以及网络方面的测试相对比较少,这里也不做陈述,因为库本身是基于NodeJS基本没有任何改动,相信大家对NodeJS的大名已如雷贯耳。

下面的数据是对iPhone6Google Nexus6iPad mini2的测试结果。

  • 注意下面的时间单位都为毫秒,CPU占比以单核为准100%表示一个CPU核心满载运行。
  • 还有一点需要注意在屏幕没有任何变化时,CPU占用一般为1%左右。

View

在一个全屏Scroll视图中创建10万个Div视图,然后滚动这个Scroll,这时查看CPU占比以及频幕刷新率。 Div视图是自动布局的,所以10万个Div不会在屏幕中同时出现。这主要测试Dom的操作、视图排版布局、以及绘图性能。

设备Div数量创建时间FspCPU占比
iPhone61000012576045%
Nexus6100006706048%
iPad mini21000012696060%
iPhone62000024576058%
Nexus62000012656070%
iPad mini22000024606090%
iPhone65000061624897%
Nexus65000029873997%
iPad mini25000059594297%
iPhone6100000126472597%
Nexus610000058592097%
iPad mini2100000119642297%
  • 这是iPhone6截图:

这是iPhone6截图

  • 下面是主要的测试源码:
new GUIApplication({ multisample: 2 }).start(
	<Root backgroundColor="#000">
		<Scroll width="full" height="full">
			${
				Array.from({length:100000}, ()=>{
					var color = new Color(random(0, 255), 
						random(0, 255), random(0, 255), 255);
					return <Div backgroundColor=color class="item" />;
				})
			}
		</Scroll>
	</Root>
)

Action

在同一屏幕随机创建4000个视图,并随机设置旋转动作,这时查看CPU占用,与屏幕刷新率。这主要测试动作系统性能、同屏绘图性能,以及设备的CPU与GPU的性能。CPU占比越低帧数越高表示性能越好。 可

设备数量FspCPU占比
iPhone610006054%
Nexus610006065%
iPad mini210006090%
iPhone620006098%
Nexus6200040110%
iPad mini220004088%
iPhone6400030104%
Nexus6400020110%
iPad mini2400025104%

从数据上可以看出Nexus6的单核CPU性能不如iPhone6。

  • 下面是iPhone6截图:

这是iPhone6截图

CSS

创建10万个样式表所消耗的时间。

设备创建时间
iPhone614699
Nexus610381
iPad mini214808

这里与Dom操作很类似时间有点长,这是因为对属性值的解析是通过调用JS方法完成,如果这个过程在Native中,这个时间会减少很多,这也是以后的版本所需要解决的问题。

Storage

下面分别是调用20万次storage.set()、20万次storage.get()、20万次storage.del()消耗的时间。

设备set()get()del()
iPhone6438138213547
Nexus6717865396567
iPad mini2495142564179

End

上面的数据只能做大体参考,对这种GUI框架的测试我现在还没有找到比较好的标准。

转载于:https://my.oschina.net/u/3686604/blog/1592381

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值