Skip to main content

electron-tauri

Electron 主进程和渲染线程​

在 Electron 应用中,主进程是 Electron 应用的入口点,它是由 Node.js 的 electron 模块启动的一个 Node.js 进程。主进程负责管理应用的生命周期、处理系统事件、创建和管理渲染进程等任务。

渲染进程是指 Electron 应用中的浏览器窗口所使用的进程,每个渲染进程都运行在自己的沙箱环境中,负责渲染窗口的界面和处理与界面相关的任务。每个渲染进程都有一个独立的 JavaScript 上下文,它们之间可以通过 IPC 通信来传递数据和消息。

主进程和渲染进程之间可以通过 IPC(进程间通信)来进行通信。Electron 提供了 ipcMain 和 ipcRenderer 两个模块分别用于在主进程和渲染进程之间建立 IPC 通信管道。通过 IPC,主进程和渲染进程之间可以传递消息、调用方法、共享数据等。

需要注意的是,由于 Electron 应用中的渲染进程运行在沙箱环境中,它们不能直接访问 Node.js 模块和原生模块,必须通过 remote 模块或自定义的 IPC 协议来访问主进程中的方法和数据。在主进程中可以通过 BrowserWindow 对象的 webContents 属性来获取渲染进程的 webContents 对象,从而建立 IPC 通信管道。

在 Electron 中创建多线程的基本步骤如下:​

在主进程中使用 webContents 对象创建一个新的渲染进程,即一个新的 BrowserWindow 对象。 在渲染进程中使用 Node.js 的 worker_threads 模块创建一个新的 Worker 对象。

在主进程和渲染进程之间建立 IPC 通信管道,使用 webContents.send 方法将消息发送给渲染进程,使用 worker.postMessage 方法将消息发送给 Worker 线程。

在渲染进程中监听 message 事件,并在事件回调中使用 worker.postMessage 方法将消息发送给 Worker 线程。在 Worker 线程中监听 message 事件,并在事件回调中处理消息。

在渲染进程中使用 remote 模块调用主进程中的方法,将数据传递给主进程进行处理。在主进程中使用 ipcMain 模块监听渲染进程发送的消息,处理数据并返回结果。

Tauri​

App 后端应该是 Tauri 缺陷之一(但或者是最大的优势,这取决于你)​

在 Electron app 中,你用 Javascript 编写代码,因为 Electron 使用 Nodejs 的 runtime。而 Tauri 的后端是基于 Rust 实现的,如果开发 app 后端的你精通 Rust ,你会乐此不疲,但是如果你不得不从头学习 Rust

web的渲染​

Electron 底层使用 Chromium,所以你在 Windows、linux、macos 上看到的前端效果都是一样的

而Tauri 使用的系统自带的 webview:windows 上 Edge webview2,linux 和 macos 上的 webkitGTK。

Safari(基于 Webkit)一直落所有的 web 浏览器一步所以,就会存在一些 bug,就是你在 chrome 上不能看到,能够在 Safari 用户上看到。

在 Tauri 上,你只能引入 polyfills。所以此项的胜者是 Electron。

Tauri 应用时碰到的一个问题就css 打包不会携带 -webkit 前缀,导致css 全是 bug。

自动更新​

Electron 和 Tauri 都有内置的自动更新器,在 Electron 中,使用electron-updater;但是 Tauri 更加简单