tauri的使用体验

我们开发了一款软件研发团队协作的工具,使用tauri作为框架,其中grpc proto定义在14152行,rust代码20772,typescript代码84864行。我们的项目是开源的,代码在https://jihulab.com/linksaas

tauri的优点

  • 编译出来的程序非常小巧。在windows上需要webview2运行时,大概100M。

  • 在安全性上做的非常好。做了非常强的安全限制。

  • 基于rust非常的稳定。只要对Result做了足够的判断,基本不会出现程序crash。

  • 跨平台,windows,linux,macos都支持。

  • 扩展非常方便,内置了文件系统,窗口,事件,通知等丰富的plugin。自定义plugin也非常方便。

tauri的问题

  • 由于使用了不同平台上的webview实现。在显示效果上略有差异。

  • rustlang的学习曲线比较陡峭。市面上相关人员较少。

  • 编译速度非常缓慢。我们的项目运行yarn tauri build大概需要30分钟完成整个过程。

tauri的一些坑

对wasm的支持问题

tauri模式是以浏览器自定义协议tauri://访问web资源的。在启动窗口的时候,可以通过拦截tauri://来添加下面的响应头:

Cross-Origin-Opener-Policy: same-origin

Cross-Origin-Embedder-Policy: require-corp

目前webview只有在设置上述header之后才能访问SharedArrayBuffer,这个是大部分wasm需要的数据组件。

上述方法只在windows上起效果,在macos和linux上不work。目前是需要启动一个内置http服务的方式,使windows和macos都可以使用SharedArrayBuffer。

linux上由于libwebkitgtk关闭了SharedArrayBuffer,wasm在linux暂时还有问题。

IpC注入问题

tauri在启动webview的时候,会注入ipc初始化代码。这个有严格的限制,只有tauri://协议和配置文件里面dev端口才会注入。为了运行wasm,使用内置http服务的方式,可能就无法调用tauri提供的接口能力。

我们后面的解决方案是clone了tauri的代码,对修改了相关安全限制。保证在tauri://和http://localhost情况下,可以注入ipc的初始化代码。我们修改的代码在https://jihulab.com/linksaas/tauri的local_ipc分支。

安全模式的问题

tauri提供了Brownfield 和 Isolation 两种安全模式。在Isolation 模式中,你可以提供__TAURI_ISOLATION_HOOK__对ipc请求做出拦截。但是在支持wasm的情况下,设置的http响应头,会造成浏览器的安全策略防止数据传递到iframe,从而使得整个ipc体系都无法使用。

在Brownfield 模式下,我们使用了tauri Builder里面的invoke_system方法重写了window.__TAURI_POST_MESSAGE__函数,对ipc调用进行了拦截。在自定义plugin的情况下,可以对window的label进行判断,做一些安全保护。

你可能感兴趣的:(前端框架)