Carlo和Lorca — 精简Electron
Carlo - headful Node app framework
https://github.com/GoogleChromeLabs/carlo/
Carlo为Node应用程序提供Google Chrome渲染功能,使用Puppeteer项目与本地安装的浏览器实例进行通信,并实现远程调用基础架构,以便在Node和浏览器之间进行通信。
我能做什么?
使用Carlo用户可以创建混合应用程序,这些应用程序使用Web堆栈进行渲染,Node使用功能
对于Node应用程序,Web呈现堆栈允许用户可视化应用程序的动态状态。
对于Web应用程序,可以从Node访问其他系统功能。
可以使用pkg将应用程序捆绑到单个可执行文件中。
它是如何工作的?
Carlo找到了本地安装的Google Chrome。
启动Chrome并在流程管道上建立连接。
公开了一个高级API,用于在Chrome环境中使用Node环境进行渲染。
Lorca
https://github.com/zserge/lorca
一个非常小的库,用于在Go中构建现代HTML5桌面应用程序。 它使用Chrome浏览器作为UI层。 与Electron不同,它不会将Chrome捆绑到应用程序包中,而是重用已安装的那个。 Lorca建立了与浏览器窗口的连接,允许从UI调用Go代码并以无缝方式从Go操作UI。
这个怎么运作
在引擎盖下,Lorca使用Chrome DevTools协议来检测Chrome实例。 首先,Lorca尝试找到已安装的Chrome,启动绑定到临时端口的远程调试实例,并从stderr读取实际的WebSocket端点。 然后Lorca打开与WebSocket服务器的新客户端连接,并通过WebSocket发送Chrome DevTools协议方法的JSON消息来监控Chrome。 JavaScript函数在Chrome中进行评估,而Go函数实际上在Go运行时运行,返回的值将发送到Chrome。
问:当我们已经拥有Electron和NW.js时,这个项目的动机是什么? 这个项目与这些平台有何不同,它如何实现Electron或NW.js不可能/更难的东西?
该项目的动机之一是演示本地安装的浏览器如何与开箱即用的Node一起使用。
Node v8和Chrome v8引擎在Carlo中分离,提供可维护的模型,能够独立更新底层组件。 Carlo让用户可以控制捆绑,更多的是生产力而不是品牌。