当前位置: 首页 > 后端技术 > Node.js

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

时间:2023-04-03 13:11:04 Node.js

Ngui简介这是一个GUI排版显示引擎,也是一个跨平台的GUI应用开发框架,基于NodeJS/OpenGL,也是第一款移动端Android/iOS结合NodeJS的前端GUI项目,至此JavaScript成为真正意义上的前后端通吃的语言。Ngui的目标:在此基础上开发GUI应用程序,既能兼顾Native应用程序的性能和体验,又能拥有开发WEB应用程序的简单和速度。开源跨平台移动项目Ngui【介绍】开源跨平台移动项目Ngui【入门】开源跨平台移动项目Ngui【视图和布局系统】开源跨平台移动项目Ngui【Action动作系统】开源跨平台移动端项目Ngui【CSS样式表格规则及使用】NguiAPI文档Benchmark自项目第一版发布以来已经发布了一段时间。虽然做了benchmark测试,但是这段时间忙于找工作和外包,并没有把测试结果给大家汇报。总体测试结果还是比较满意的,基本达到了开发这个库的初衷,但是也有不足之处。在iPhone6上创建100,000个Div并设置相关属性需要10多秒,但是这个时间在Android上会减少到1/2,因为Android使用V8,而iOS使用JSC,使用glueLayer粘在V8的API上,所以JS性能不如安卓。对于2D图形,GPU不是主要瓶颈。主要瓶颈是CPU,但还有很大的优化空间。测试主要针对图形,包括JS调用API的时间开销、图形渲染的帧率、CPU的运行百分比。文件IO和网络的测试比较少,这里就不做表态了,因为库本身是基于NodeJS的,基本没有变化。NodeJS的名字相信大家都不陌生。以下数据是iPhone6、GoogleNexus6和iPadmini2的测试结果。注意以下时间单位是毫秒,CPU配比是按单核计算的。100%表示CPU核心已满载。还有一点需要注意的是,在画面没有变化的情况下,CPU占用率一般在1%左右。View在全屏Scroll视图中创建10万个Div视图,然后滚动Scroll查看CPU占比和屏幕刷新率。Div视图是自动布局的,因此100,000个Div不会同时出现在屏幕上。这里主要测试Dom的运行,视图的排版布局,绘图性能。设备Div数量创建时间FspCPU占比iPhone61000012576045%Nexus6100006706048%iPadmini21000012696060%iPhone62000024576058%Nexus62000012656070%iPadmini22000024606090%iPhone65000061624897%Nexus65000029873997%iPadmini25000059594297%iPhone6100000126472597%Nexus610000058592097%iPadmini2100000119642297%这是iPhone6截图:下面是主要的测试源码:newGUIApplication({multisample:2}).start(${Array.from({length:100000},()=>{varcolor=newColor(random(0,255),random(0,255),random(0,255),255);返回;})})Action同屏随机创建4000个视图,并随机设置旋转动作,然后查看CPU占用率和屏幕刷新率。主要测试运动系统性能,同屏绘图性能,以及设备CPU和GPU的性能。CPU比率越低,帧率越高,性能越好。可用设备FSPCPU的数量帐户为iPhone610006054%Nexus610006065%iPadmini210006090%iPhone620006098%nexus6200040110%ipadmini22200040404040488%iphone640001040104%nexus6400020110%cpucpucpucpucpucpucpucpucpucpucpucpucpuaips300000%。这是iPhone6的屏幕截图:CSS创建100,000个样式表所用的时间。设备创建时间iPhone614699Nexus610381iPadmini214808跟Dom操作很像,时间有点长。这是因为属性值的解析是通过调用JS方法完成的。如果这个过程在Native,这个时间会减少很多,这也是以后版本的要求。解决了问题。下面Storage是调用storage.set()20万次、storage.get()20万次、storage.del()20万次消耗的时间。Deviceset()get()del()iPhone6438138213547Nexus6717865396567iPadmini2495142564179End以上数据只能作为一般参考。我还没有找到更好的标准来测试这个GUI框架。