技术实现路线的一波三折

#品牌故事/我们对产品的思考

经过长达数月的讨论,最终确定了从提升思考力的工具 -- 卡片笔记 -- 开始做起,去打造我们助力成长的产品。接下来一个重要的问题摆在我们面前,我们只有两个人,一个多年不写程序的程序员和一个以平面见长的设计师,如何在资源这么“匮乏”的前提下,把我们的想法给实现?技术路线的选择就至关重要了。

回到卡片笔记这个产品,回归到他的主要场景,我们的一个共识是,卡片笔记的核心场景都是在桌面端。因此在资源这么有限的提前下,我们首先肯定是选择最核心的场景。所以我们决定,先从桌面端做起。

但从桌面端做起,并不意味着不做移动端。因此,在选择桌面端技术路线的同时,我们也在考虑能不能兼顾到后续做移动端。尽可能在技术路线的选择上,做到“复用”,不要重复造轮子。有这样的考虑,本质上的原因就是我们的资源太有限了,怎么去最大化有限资源的利用效率,是我们自始至终很重要的一个命题。

从桌面端做起,第一个想到的自然是做 Web 端,像 Notion、Flomo 等一众笔记软件都是这么做的,看上去这好像也是一个很自然且很合理地选择。但别人的选择毕竟是别人的选择,最终这个选择是不是适合我们,不取决于它有没有被很多人选择,而取决于它对我们来说,是否是最合适的。

我们对卡片笔记的定义中,笔记之间的双链关系的表达,是一个很重要的基础功能。双链关系的表达,既需要方便地进行相互链接,又需要能够在全局和局部层面能够一目了然看清卡片之间的关系。最终我们对卡片笔记有一个憧憬是,记下的一张张卡片,通过他们之间的各种链接,形成了一个星罗棋布的网状结构。这个网状结构,应该就是我们大脑中的知识结构在现实中的外显化和具象化。我们可以通过迭代这个网络,来迭代我们的认知。

要做全局的网络结构,上面还有不少的交互,这就要求要把全量的笔记数据都加载到本地。如果做 Web 端的话,大量数据的本地存储,在浏览器层面会遇到比较大的挑战;如果所有的数据都实时从网络获取的话,网络环境不好的时候,整个笔记的体验就会很糟糕。从这些点上看,Web 端似乎对我们来说,并不是一个合理的选择。

我们继续探索着。后来我们在体验一个做得还不错的新产品 -- 墨问便签 -- 的时候,发现在微信小程序这个平台上,有很多的优势。首先,微信小程序天然是跨平台的,一次开发,可以在多个平台上使用,能够把开发的效率发挥到极致。其次,我们看到墨问便签在电脑端的体验和表现,也是非常优秀的。因此,我们感觉小程序平台也是一个不错的选择。

由于我们并没有小程序开发的基础,就这么做决定是有点草率的,所以一直也挺犹豫。在这个过程中,花了一些时间仔细研究了一下小程序整个生态体系和相关技术。调研之后,我们得出的一些结论是:

首先,小程序的优势在于社交传播,如果是对于社交传播要求比较高的产品,可以考虑小程序,比如墨问便签就是这样的产品,创作者需要很方便地把自己的内容传播出去,才会有更多的订阅者。

其次,小程序本身是架设在整个微信之上的一个技术生态,他的主要开发技术跟 Web 开发有点像,但是差别也挺大。比起浏览器对 Web 的限制,微信对小程序的限制会更多。所以,一些复杂的交互逻辑,在小程序上的实现,会非常有挑战。比如我们上面说的全局的笔记网络图,还有好用的 Markdown 的编辑器,都是很有挑战的。

再次,小程序是一个很有地域特色的技术,小程序上的开发者都是我们国内的开发者,相比于其他的像 Web、Android、iOS 这样全球通用的技术体系,小程序的整个生态的成熟度还不太好,这就会导致遇到问题之后大部分情况下可能只能靠自己。这对于我们这种边学边干的团队来说,挑战是巨大的。

确定了Web 和小程序不是适合我们的技术路线之后,我们对所需要的技术路线也有了一些比较明确的关键词:桌面、跨端、成熟。

循着上面这些关键词,经过了一番调研之后,最终我们选择的技术方案是:Electron + Node.js。

Electron 是优秀的桌面跨端技术方案,已经有很多成熟的软件在使用它,比如 VSCode、Obsidian 还有国内的 QQ 桌面端等,有这么多大公司用,说明技术的成熟度本身是非常 OK 的。Electron 的开发技术栈,就是传统的 Web 开发技术,这个相对来说学习的门槛会低很多,也是我们选择他很重要的一个原因。

总体上来说,Electron 开发上很像 Web 开发,学习门槛相对低,各种技术的成熟度都挺高,有很多可以用的第三方库,能够从最大程度上避免重复造轮子。更重要的是,从开发出来的产品体验上,Electron 跟用传统的 Native 语言开发出来的,基本体验不出差别。而且用 Electron,还可以很方便地调用本地操作系统的各种能力,能够把桌面系统的性能发挥到极致。用了 Electron 之后,我们的卡片笔记的数据存储就可以做成本地优先为主、自动网络同步为辅的方式。这样的设计,带来的好处就是用户体验的极大提升,用户会感觉到像访问本地操作系统一样的丝滑,但同时也不用担心数据丢失,换个地方只要登录自己的账号,数据就可以实时同步下来。

客户端就这样选了 Electron作为主要的技术路线,服务端在调研了一番之后,最后选择的是 Node.js 的技术栈。选择 Node.js 的原因有几个:一是Node.js 本身确实很优秀、很成熟了,已经非常适合做服务端应用了;二是 Node.js 用的语言是 Javascript,而我们前端用的 Electron 中,Javascript 也是最主要的语言之一,选择 Node.js,这样我们前后端的技术栈就可以打通了,不用再去学习其它新的语言了。对于只有一个程序员有情况下,选择合适的全栈路线,Electron+Node.js 是一个非常好的组合。

后来在实际的开发过程中,也确实觉得 Electron+Node.js 是一个很好的选择,一个人开发前后端,很丝滑。希望我们最终交付到大家手里的产品,能够被大家喜欢!

(作者:Jason)


Copyright © 2025 杭州思维宇宙科技有限公司