前端技术选型的遗憾和经验教训

news/2024/7/5 6:52:42

我是Max,Spectrum的技术联合创始人。Spectrum 是一个面向大型在线社区的开源聊天应用程序,最近被GitHub收购。我们是一个三人团队,主要拥有前端和设计背景,我们在这个项目上工作了近两年时间。

事后看来,以下是我做出的令自己感到遗憾的技术选型以及从中学到的经验教训。

遗憾1:没有使用react-native-web

Spectrum的很大一部分吸引力在于内容是公开的和可搜索的,所以我们在开发原生应用之前先开发了网站。

我们的搜索索引做得很成功,但用户一直在要求有更好的移动体验。我们现在正在开发原生应用程序,但因为是从头开始,所以很耗时。如果我们当初使用react-native-web来构建网站,就可以重用一些基础组件,加快原生应用程序的开发速度!

最重要的是,我们应该已经对网站的移动版本进行了优化。如果移动体验做得足够好,即使是在桌面上也是可接受的,只需要做一些调整即可。然而,桌面体验在移动设备上的表现就有点令人生厌了。事实证明,不管我们做得多么好,都难以在各种尺寸的设备上有良好的表现。

学到的第1课:构建一个好产品就是要不断进行实验,加快开发速度,为了迭代速度和灵活性而优化。

遗憾2:没有使用Next.js

出于SEO的目的,我们需要使用服务器端渲染。但我们已经使用create-react-app构建了应用程序的第一个版本。我们考虑过切换到Next.js,但我认为重新设计路由和数据获取比我们自己构建服务器端渲染的工作量更大。

但事实证明,自己构建生产就绪的服务器端渲染非常困难。它需要很大的工作量,并且很难为开发人员和用户提供良好的体验。

Next.js提供了惊人的开发体验和性能,更不用说活跃的社区和优秀的文档。如果我们现在重新开始,我会怀着激动的心情使用它。

学到的第2课:尽可能使用现有的解决方案来解决技术问题,特别是那些你不了解的问题。

遗憾3:使用了RethinkDB

我之所以选择RethinkDB作为我们的主要数据存储,主要是因为它的changefeed功能。这个功能允许你监听几乎任何一个查询的实时更新。我认为它可以降低系统的复杂性,因为我们不需要为了实时功能单独使用另一个发布和订阅系统。

但不幸的是,我们在RethinkDB上遇到了很多麻烦。由于它没有被广泛使用,几乎没有关于如何操作数据库的文档和资料。我们经历了好多次数据库中断,调试问题感觉像是在蒙着眼睛走路。

事实证明,changefeed的可扩展性并不如我们预期的那样好。虽然我们设法解决它,但我们原本没有必要这么做。

现在,我会选择一个更成熟的数据库(或许Postgres?),并基于它构建一个发布和订阅系统。

学到的第3课:谨慎选择以后难以更改的核心技术。

学到的第4课:在选择技术时,优先考虑社区规模和维护活跃度,尤其是在不熟悉的领域。

遗憾4:使用了DraftJS和WYSIWYG编辑器

文本输入是Spectrum用户的主要活动之一,我们希望为用户带来很棒的输入体验。我决定使用基于Draft.js(最近由Facebook发布)的自定义WYSIWYG编辑器替换纯文本Markdown输入。

可惜的是它效果并不好。即使经过数月的努力,我们的用户仍然在不断抱怨,说编辑器真的很难用。最重要的是,编辑器的库占了我们JavaScript包大小的大部分,而且缺乏跨浏览器支持意味着我们必须将普通文本输入作为后备选项。

另一个框架可能效果更好,但我们应该专注于更紧迫的功能。我认为我们需要WYSIWYG编辑,但并没有与用户就此事展开交流。否则,我们很快就会意识到根本就没有必要所以这个编辑器。

学到的第5课:在考虑新技术时要谨慎,偏向保守的选择。

学到的第6课:开放路线图,了解用户的优先事项。

小贴士

即使改变了这些决定,也不会让Spectrum自己成为更好的产品。但这样会节省我们的时间,让我们花更多的时间进行实验。

总而言之,以下是我总结的六个经验教训。

  1. 构建一个好产品就是要不断进行实验,加快开发速度,为了迭代速度和灵活性而优化。

  2. 尽可能使用现有的解决方案来解决技术问题,特别是那些你不了解的问题。

  3. 谨慎选择以后难以更改的核心技术。

  4. 在选择技术时,优先考虑社区规模和维护活跃度,尤其是在不熟悉的领域。

  5. 在考虑新技术时要谨慎,偏向保守的选择。

  6. 开放路线图,了解用户的优先事项。

查看英文原文:https://mxstbr.com/thoughts/tech-choice-regrets-at-spectrum


http://lihuaxi.xjx100.cn/news/236273.html

相关文章

c语言指针要点,C语言指针的重点有哪些?

指针说难也不难,说不难吧,有点难理解把握几点,就不是很难了1、指针是变量,可以当成一般的变量来操作2、指针可以做减法,不可以做加乘除,减法的意思是求两个内存空间之间隔着几个字节。加乘除没有意义3、内存…

kali linux网络配置

事情是这样的 今天早上想安装一个按个人信息生成密码的软件 发现无法安装 发现问题后 我首先检查了kali有没有获取到IP 然后就是没有获取IP 怎么解决问题如下: 原理进程: 1.写入dhcp服务 1.进行DNS设置 首先输入命令: gedit /etc/network/int…

小米4c怎么添加语言怎么设置在哪里,小米4c路由器设置教程

摘要 腾兴网为您分享:番茄小说,唱吧app,酷狗,腾讯会议,唯品会等知识经验教程,欢迎大家关注腾兴网。小米4c路由器该怎么设置,不少小伙伴们不清楚设置方法是什么,想要知道该怎么设置的&#xff0c…

流程快速开发平台,工作流引擎中间件,工作质量考核设计

为什么80%的码农都做不了架构师?>>> 工作质量考核设计关键字:CCBPM工作质量考核时效考核 需求背景:我们把在工作流程引擎中的考核分为两种模式,一种是时效考核、另外一种是质量考核。 时效考核就是对用户的操作进行时间点的记录&…

android 自定义录像机,android-camera2 - 将自定义捕获请求构建器选项设置为使用Camera2 API捕获图像以使用OpenCV库进行摄像机校准 - 堆栈内存溢出...

我们正在使用Camera2 API捕获N张图像,而未设置任何自定义捕获请求构建器选项。 我们正在使用这些图像通过OpenCV Android库411进行相机校准。然后,我们正在使用OpenCV Android库进行图像失真处理。 角落处的输出图像不清晰,角落向中心缩小。 …

【spring boot2】第8篇:spring boot 中的 servlet 容器及如何使用war包部署

嵌入式 servlet 容器 在 spring boot 之前的web开发,我们都是把我们的应用部署到 Tomcat 等servelt容器,这些容器一般都会在我们的应用服务器上安装好环境,但是 spring boot 中并不需要外部应用服务器安装这些servlet容器,spring …

ubuntu安装deepin terminal 终端

1. 依赖库 sudo apt-get install libatk1.0-0 libc6 libcairo-gobject2 libcairo2 libfontconfig1 libfreetype6 libgdk-pixbuf2.0-0 libgee-0.8-2 libglib2.0-0 libgnutls30 libgtk-3-0 libjson-glib-1.0-0 libpango-1.0-0 libpangocairo-1.0-0 libsecret-1-0 libvte-2.91-0…

三星android获取root权限,三星G9250(S6 Edge公开版全网通 Android 5.1)获取ROOT权限详解教程...

伴随着安卓刷机越来越流行,很多安卓用户都喜欢上了这种可以自定个性系统的行为,那么三星G9250(S6 Edge公开版全网通 Android 5.1)怎么获取ROOT权限?三星G9250(S6 Edge公开版全网通 Android 5.1)一ROOT过程如何操作呢?奇兔小编在此大家说一说一键ROOT的…