跨平台开源项目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数量

创建时间

Fsp

CPU占比

iPhone6

10000

1257

60

45%

Nexus6

10000

670

60

48%

iPad mini2

10000

1269

60

60%

iPhone6

20000

2457

60

58%

Nexus6

20000

1265

60

70%

iPad mini2

20000

2460

60

90%

iPhone6

50000

6162

48

97%

Nexus6

50000

2987

39

97%

iPad mini2

50000

5959

42

97%

iPhone6

100000

12647

25

97%

Nexus6

100000

5859

20

97%

iPad mini2

100000

11964

22

97%

  • 这是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占比越低帧数越高表示性能越好。 可

设备

数量

Fsp

CPU占比

iPhone6

1000

60

54%

Nexus6

1000

60

65%

iPad mini2

1000

60

90%

iPhone6

2000

60

98%

Nexus6

2000

40

110%

iPad mini2

2000

40

88%

iPhone6

4000

30

104%

Nexus6

4000

20

110%

iPad mini2

4000

25

104%

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

  • 下面是iPhone6截图:

CSS

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

设备

创建时间

iPhone6

14699

Nexus6

10381

iPad mini2

14808

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

Storage

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

设备

set()

get()

del()

iPhone6

4381

3821

3547

Nexus6

7178

6539

6567

iPad mini2

4951

4256

4179

End

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏杂谈

聊天IM的时间戳显示规则

======================================================

962
来自专栏python爬虫实战之路

新浪微博PC端模拟登陆

本来给自己定了个2018的目标,平均每月写两篇文章,现在已经快三月了,第一篇稿子才憋出来,惭愧呀,直入主题吧,今天给大家带来的是新浪微博PC端的模拟登陆。

2723
来自专栏点滴积累

Fish Shell

今天看到阮一峰同学的一篇博客(Fish shell 入门教程),讲述的非常详细、清楚,有兴趣的可以直接转去查看此文,本文仅提供一下个人使用心得。 一、fish ...

3276
来自专栏小白课代表

Autodesk Revit 2017安装教程

Revit是Autodesk公司一套系列软件的名称。Revit系列软件是专为建筑信息模型(BIM)构建的,可帮助建筑设计师设计、建造和维护质量更好、能效更高的建...

602
来自专栏小樱的经验随笔

破解Zip加密文件常用的几种方法

从网络上下载了一个zip文件,最后却发现它是用密码保护的,或者自己用密码加密了一个很重要zip文件,但是一段时间后忘记了密码,无法打开。这个时候,我们就可能就需...

2824
来自专栏杨建荣的学习笔记

图形工具和命令行的博弈-swingbench配置(r8笔记第63天)

对于图形工具,很多人都会抱有一种不太理性的想法,感觉只要一图形界面就失去技术含量,图形能点点的东西,操作太容易,太简单就没有技术含量。 我有时候就有些矛盾,但是...

3183
来自专栏小白课代表

Altium Designer 18 安装教程

1774
来自专栏贾鹏辉的技术专栏@CrazyCodeBoy

React Native 集成分享第三方登录功能分享第三方登录模块开发(iOS)

在我们常用的App中经常会看到分享与第三方登录的功能,可以说分享与第三方登录已经成为了各大APP的必备功能。对于产品运行与推广来说,分享与第三方登录不仅能加强用...

36310
来自专栏地方网络工作室的专栏

Shell 命令行获取本机IP,grep的练习

Shell 命令行获取本机IP,grep的练习 在 mac 下面输入 ifconfig 或者在 linux 下面输入 ip a 就可以得到我们的网卡信息。不过通...

3646
来自专栏施炯的IoT开发专栏

DumpMem and Monster - Virtual Memory Explorers on Windows Mobile/CE

      Windows Mobile 5 和 6的平台是建立在CE5.x的基础上的。当可用的内存很少时,平台会自动关闭应用程序。而且,在这个移动平台上,同时...

17510

扫码关注云+社区