编写跨平台应用程序的另一种方法:Neutralinojs内部以及与Electron和NW.js的比较


我是来自斯里兰卡的Shalitha Suranga。 我与其他两个成员一起开始Neutralinojs项目,作为我们大学的研究项目。


跨平台应用程序开发在软件开发组织中非常有用,因为可以锁定大量最终用户。 以前有几种方法,例如,每个平台编写多个代码库,使用条件选择平台来编写单个代码库,或使用在运行时具有跨平台虚拟机的编程语言。 每个都有缺点,例如设计复杂,有限的低级可访问性和学习速度慢。 之后出现了使用Web技术进行跨平台的应用程序开发[1]。 Electron和NW.js是最流行的框架,允许开发人员使用Javascript进行跨平台应用程序。 基本上,这些流行的框架结合了嵌入式铬浏览器和节点运行时[2],[3]。


这些框架被用于创建大量的跨平台应用程序。 社区指出了这些框架的一些看不见的缺点。 大型捆绑应用程序大小,高内存消耗和漫长的开发工作流程是互联网论坛和网站所批评的关键问题[4],[5],[6],[7],[8]。 表1.1列出了Electron / NW.js的优缺点。


表1.1: Electron / NW,js的优缺点


Electron和NW.js的优势Electron和NW.js的缺点
由于使用了Javascript,因此开发非常容易应用程序捆绑被认为是过时的软件(高磁盘空间使用量)
通过节点运行时访问本机函数适用于所有受支持平台的单一代码库Linux,Windows和macOS高内存消耗和缓慢
需要安装许多节点模块

动机


Electronjs和NW.js像基于铬节点的框架一样,无法进一步减小应用程序包的大小,因为嵌入式组件的大小无法进一步降低。 一种可能的解决方案是引入一个新的跨平台应用程序开发框架,该框架具有Electron和NW.js的所有优点,但重量轻,可移植且计算机内存轻巧。 重要的是,每个平台都有内置的浏览器组件,可以代替嵌入式铬使用。 Windows平台具有MSHTML(IE10 / 11),Linux平台具有gtk-webkit2。


此外,每个平台上也都有默认的Web浏览器。 因此,铬模块可以用用户的Web浏览器或Web浏览器组件替换。 节点运行时可以替换为具有本机OS功能的轻型Web服务器。


关键目标


这项研究引入了一种新的框架体系结构,该体系结构提供了可移植的轻量级跨平台应用程序开发框架的实现,其中包括使用顶级前端框架的证明。 新框架将使用浏览器组件或用户的浏览器而不是嵌入式铬,并且将通过引入轻量级服务器运行时来替代节点运行时,该运行时公开了所需的OS级功能。 新框架架构设计的关键功能可以归类为轻量级,可移植,简单的开发工作流和本机访问。


轻巧的


应用程序捆绑包和应用程序开发套件是相同的,它将占用非常少的磁盘空间。 可以将应用程序捆绑压缩为所需的存档格式,以进一步减小其大小。


完全便携


应用程序开发套件应该是完全可移植的,这意味着在开发过程之前不需要任何先决条件。 因此,应用程序包也应该是完全可移植的,因此在执行使用新框架构建的应用程序之前,不需要任何先决条件。


简单的开发流程


应用程序开发工作流程应尽可能简单。 不应在Internet上安装任何依赖项,以节省开发人员的时间和网络使用量。 因此,调试应用程序应该像Electron一样简单[12]。


本机访问


新框架应通过基于Javascript的库公开必需的低级OS功能,并且应使用系统级线程以并发方式处理本机调用。


解决方案架构


从设计角度来看,Neutralinojs具有两个主要组件。 Neutralino运行时是一种便携式轻量级服务器,它侦听来自客户端SDK的请求。 另外,它运行一个单独的线程来运行本机窗口,该窗口包含用于呈现应用程序的内置浏览器组件。 客户端SDK是一个Javascript库,可通过XHR与服务器进行通信。 客户端SDK的功能和模块用于异步进行系统调用。



图1.1: Neutralino解决方案设计


Neutralino服务器



图1.2: Neutralino服务器设计


传入的HTTP请求通过CML获得对本机接口的访问权限,该CML创建或重用单独的线程来执行功能。 主体解析器解析该消息,并将相关数据发送到请求路由器,该路由器调用特定的本机接口。 有两个后台线程。 UI线程运行主要的本机窗口循环,当在调试模式下关闭浏览器选项卡时,Ping接收器线程停止Neutralino服务器。 配置映射是一种内存结构,其中包含用于应用程序配置的键-值对。


中性客户



图1.3: Neutralino客户端设计


Neutralino API调用会调用Neutralino客户端库中的函数。 此后,相关功能通过XHR库将XHR发送到Neutralino服务器,该服务器响应传入的请求。


根据研究成果,与其他框架(例如Electron和NW.js) 相比 ,Neutralinojs带来了更好的可移植性和轻量级的跨平台应用程序开发框架。 研究团队只实施了大多数需要的功能,而这些功能主要集中在POC上。 因此,这些框架中的所有功能目前可能在Neutralino上不可用。


立即开始使用Neutralinojs!


网站
Github


在Github上找到Shalitha Suranga ,以获取更多开源项目


参考文献

01 Lnu.diva-portal.org。 (2018)。 [在线]可用: http : //lnu.diva-portal.org/smash/get/diva2 : 1081105/FULLTEXT01.pdf


02 Electronjs.org。 (2018)。 关于电子| 电子 [在线]可用: https : //electronjs.org/docs/tutorial/about


03 GitHub。 (2018)。 nwjs /nw.js。 [在线]可用: https : //github.com/nwjs/nw.js/wiki/NW13-architecture


04 GitHub。 (2018)。 NW可执行文件大小:制作一个轻量级的独立可执行文件,发行号3955·nwjs /nw.js。 [在线]可用: https : //github.com/nwjs/nw.js/issues/3955


05 GitHub。 (2018)。 预期的应用捆绑包大小? 2003年第#期电子/电子。 [在线]可用: https : //github.com/electron/electron/issues/2003


06中。 (2018)。 电子是癌症-提交日志-中等。 [在线]可用: https : //medium.com/commitlog/electron-is-cancer-b066108e6c32


07中。 (2018)。 为什么我仍然使用Vim-提交日志-中。 [在线]可在以下网址获得: https//medium.com/commitlog/why-i-still-use-vim-67afd76b4db6


08 News.ycombinator.com。 (2018)。 问HN:您认为Electron对构建桌面应用程序有好处吗? | 黑客新闻。 [在线]可用: https : //news.ycombinator.com/item?id=14245183


09 GitHub。 (2018)。 中性/评估。 [在线]可用: https : //github.com/neutralinojs/evaluation


10 Neutralino.js.org。 (2018)。 中性| 轻便的跨平台应用程序开发框架。 [在线]可用: https : //neutralino.js.org/


11 github。 (2018)。 Neutralinojs。 [在线]可用: https : //github.com/neutralinojs


12 Electronjs.org。 (2018)。 应用程序调试| 电子 [在线]可用: https : //electronjs.org/docs/tutorial/application-debugging

Source: https://habr.com/ru/post/zh-CN443572/


All Articles