[RFC] 095 - 桌面端 #6878
Replies: 6 comments 4 replies
-
话说桌面端能带来什么独占功能/优势吗 |
Beta Was this translation helpful? Give feedback.
This comment was marked as off-topic.
This comment was marked as off-topic.
-
是那种,下载桌面端,然后连接上自己搭建的db数据库,实现多端数据同步这种嘛。 |
Beta Was this translation helpful? Give feedback.
-
使用过其他客户端,用同一个API速度会快一些,基于next-electron-rsc的在回复速度上是否会优于Web版本? |
Beta Was this translation helpful? Give feedback.
-
研发问题 & 关键思路记录1. service 层复用 server.ts 还是新建 electron.ts由于 nextjs 的 standalone 模式会完整输出可以直接运行的 next 应用,next-electron-rsc 模块会直接通过 next的入口文件启动 next 实例,因此在启动 electron 的时候等于同时启动了一个 nextjs 的进程。 这里的问题就是当前端将请求发到 service 层时,应该走独立的 electron main端执行,还是走 nextjs 的服务端调用。 从短期来看直接调用 nextjs 的服务端进程是成本最低的方案。唯一可能需要替换的就是 db 要从 neon 的 postgres 切换到 pglite。但这里就会存在一个问题是,一旦这么搞了的话,后续所有 electron 桌面端的逻辑可能都需要和 next 的服务端耦合。 如果从长期可维护性的角度来看,应该仍然每个 service 都建一个 electron 的 ipc 调用走到 electron main 端,然后在 main 端实现相关逻辑。因为这样才能保证各个端具有相对各自独立的迭代能力,各个端的迭代不会对其他端带来太大影响。这样 next 就只做了 electron 模式下的服务端渲染,确保页面直出。 |
Beta Was this translation helpful? Give feedback.
-
打算什么时候发布桌面版? |
Beta Was this translation helpful? Give feedback.
-
背景
桌面端是我们必须要做的东西,无论是从产品体验,还是说能力边界,桌面端都是能够给我们带来很多拓展能力边界的形态。
设计思路
首先桌面端选型上是 Electron 这个无可争议,我之前还做过一个带有自动化 ci workflow 的 electron 脚手架模板,基本上是轻车熟路了。
不过在具体评估可行方案时,我们需要考虑现有 Nextjs 项目的复用问题,因此调研到了几种可能的潜在可选项。
基座调研
ToDesktop
ToDesktop 是一款专业的 Web 应用转桌面应用工具,允许开发者快速将现有 Web 应用转换为跨平台(Windows、Mac 和 Linux)的原生桌面应用。无需编写额外代码即可实现基础功能,同时提供丰富的原生 API 扩展能力。
ToDesktop 的核心优势包括:自动更新系统、原生通知、离线支持、全局热键、系统托盘、深度链接、启动项设置等原生功能。它提供了直观的拖放式构建器,使开发者能够轻松定制应用外观和行为。
对于企业用户,ToDesktop 还提供代码签名、下载分析、品牌化下载链接等高级功能。其定价从个人免费使用到企业级解决方案不等,适合从个人开发者到大型企业的各类需求。
这个方案的优点是省心,可以一键将在线网页转为 desktop 套壳应用。但缺点有几个:
因此这个方案被抛弃了。
next-electron-rsc
这个方案来源于 https://medium.com/@kirill.konshin/the-ultimate-electron-app-with-next-js-and-react-server-components-a5c0cabda72b 这篇文章,通过一天的尝试发现可以很完美地跑起来。因此整个实现的基座就会基于这个包来搞。
独立 repo VS 主仓库子目录
本来一开始想的是独立 repo,但是评估下来发现维护整个成本会有点高,因为我们现在的 cloud 是在 开源版 lobe-chat 基础上的一个私有仓库,如果开源版桌面端是一个独立 repo,就意味着 cloud 的仓库也需要对应变成独立 repo,一次性维护4个仓库显然成本有点过高了。
Beta Was this translation helpful? Give feedback.
All reactions