折腾来折腾去,我打算做一个卡片记忆软件,用来记忆面试题、知识点等。很多东西看了就忘了,我想做一个软件来帮助我记忆。这个软件的功能就是每天给我推送一些卡片,我看了就可以记住,然后就可以刷题了。
当然,业内已经有很多成熟的软件了。这几年我体验过好几款,如闪卡、惊叹笔记、氢刻等,感觉都蛮好的。但是我还是想自己做一个,原因如下:
- 老早就想做软件了,一个全平台的软件,不管这个成不成功,我想做出一个成品,这也能在面试中加分。
- 我觉得这种记忆软件是可以轻松结合AI的,这部分还在构思中,功能上有很多我自己的想法。作为资深用户,我觉得我可以做出一个更好的软件。
产品期望
- 支持全平台,包括Windows、Mac、Linux、Android、iOS、Web和鸿蒙。
- 提供网页端,可在网页端管理和查看卡片。
- 结合AI,智能生成卡片甚至卡片册,其他功能还在规划中。
- 界面设计简洁美观。
- 卡片支持图片、视频、音频、代码、Markdown、LaTeX、公式、表格、链接等。
- 应用艾宾浩斯记忆法,自动推送卡片并调整复习时间。
- 集成微信公众号,可将卡片推送至微信公众号,并在公众号上查看。
- 提供详尽的统计功能,包括学习进度、学习时间和学习效率。
个人能力
我是一名普通的Java程序员,擅长后端技术。前端一般般,会一些简单的语言,比如python,scala(之前搞大数据的时候学的),spark,vue等等
在实际项目中,我主要使用uni-app。昨晚花了几个小时学习了electron,觉得开发还挺简单的。不过可惜的是,官方文档写的是桌面端全家桶,虽然网上有移动端的解决方案,但性能可能会受影响。
最后,我选择了使用Flutter进行开发,全平台支持确实很棒。
技术选型
网上看了很多全平台的技术方案,主要就这么几个:
- flutter
- react native
- electron
- uni-app
- qt
- tauri
- nw.js
先简单总结下各个框架优缺点
技术 | 支持平台 | 性能对比 | 使用语言 | 社区对比 | 开发文档对比 | 上手难度 | 开发公司 | 活跃度 | 包大小 | 内存占用 | 兼容性 | 缺点 | 稳定性 | 官网地址 |
Flutter | Android, iOS, 桌面 | 优秀 | Dart | Google支持 | 丰富 | 中等 | 高 | 中等 | 中等 | 高 | 部分三方库不够成熟,打包体积较大,启动速度慢 | 高 | Flutter | |
React Native | Android, iOS | 高 | JavaScript | Facebook支持 | 丰富 | 中等 | 高 | 中等 | 中等 | 高 | 集成原生模块复杂,性能受限于JavaScript | 中等 | React Native | |
Electron | Windows, macOS, Linux | 中等 | HTML, CSS, JavaScript | GitHub支持 | 丰富 | 中等 | GitHub | 高 | 较大 | 较大 | 高 | 包体积大,内存占用高,启动速度慢 | 中等 | Electron |
Uni-app | Android, iOS, H5, 小程序, App | 中等 | Vue.js | DCloud支持 | 一般 | 低 | DCloud | 中等 | 中等 | 中等 | 高 | 性能相对其他框架较低,灵活性不足 | 中等 | Uni-app |
Qt | 桌面, 移动, 嵌入式 | 高 | C++ | Qt公司支持 | 丰富 | 高 | Qt公司 | 高 | 较大 | 较大 | 高 | 学习曲线陡峭,包体积较大 | 高 | Qt |
Tauri | Windows, macOS, Linux | 高 | Rust | 社区支持 | 一般 | 中等 | Tauri社区 | 中等 | 较小 | 低 | 高 | 生态相对不够成熟,文档相对不足 | 中等 | Tauri |
NW.js | Windows, macOS, Linux | 中等 | HTML, CSS, JavaScript | 社区支持 | 一般 | 中等 | NW.js社区 | 中等 | 较大 | 较大 | 高 | 性能相对其他框架较低,内存占用高 | 中等 | NW.js |
flutter
Flutter是一个由Google开发的跨平台移动应用框架,使用Dart语言。它具有优秀的性能和丰富的UI组件,支持Android、iOS和桌面平台,并且可以通过Flutter Desktop扩展支持桌面应用。Flutter的社区支持非常强大,拥有丰富的开发文档和活跃的开发者社区。然而,部分三方库可能不够成熟,导致一些功能可能不够稳定。Flutter的缺点包括打包体积较大和启动速度较慢。总体来说,Flutter在稳定性方面表现良好,官网地址为Flutter。
Flutter的优点包括:
- 跨平台支持:Flutter可以在Android、iOS和桌面平台上运行,极大地简化了跨平台应用程序的开发流程。
- 优秀的性能:Flutter通过自带的渲染引擎Skia实现了高性能的渲染,能够提供流畅的用户体验。
- 丰富的UI组件:Flutter提供了丰富的现代化UI组件,开发者可以轻松构建精美的用户界面。
- 强大的开发工具:Flutter提供了丰富的开发工具和调试支持,使开发者能够高效地进行应用程序开发和调试。
- 快速开发:Flutter具有热重载功能,可以快速查看代码更改的效果,加快了开发迭代的速度。
Flutter的缺点包括:
- 初始启动时间较长:由于Flutter应用需要加载Dart运行时和Flutter框架,因此初始启动时间可能会比较长。
- 包大小较大:由于Flutter应用需要打包Dart运行时和Flutter框架,导致应用的安装包大小较大。
- 三方库的成熟度:部分三方库可能不够成熟,导致一些功能可能不够稳定或者缺乏完善的支持。
总的来说,Flutter在跨平台开发和性能方面表现出色,但在初始启动时间和包大小方面存在一些缺点。
react native
React Native是由Facebook开发的跨平台移动应用框架,使用JavaScript和React构建。它允许开发者使用相同的代码库来构建Android和iOS平台上的原生应用,同时保持高性能和良好的用户体验。React Native的核心理念是“learn once, write anywhere”,即只需学习一次,就能在多个平台上进行开发。
React Native的优势在于其能够实现接近原生应用的性能,因为它允许开发者使用原生组件来构建用户界面。此外,React Native还具有热重载功能,能够实时查看代码更改的效果,加快了开发迭代的速度。它还拥有庞大的开发者社区和丰富的组件库,开发者可以快速找到所需的组件和解决方案。
然而,React Native也存在一些挑战,比如在某些情况下需要使用原生模块来实现特定的功能,这可能需要开发者具备一定的原生开发技能。另外,由于需要打包JavaScript引擎和React Native框架,导致应用的安装包大小较大,且内存占用较高。
总的来说,React Native是一个强大的跨平台移动应用框架,能够帮助开发者高效地构建原生级别的移动应用。
React Native的优点包括:
- 跨平台支持:React Native允许开发者使用相同的代码库构建Android和iOS平台上的原生应用,从而节省开发成本和时间。
- 性能接近原生应用:由于React Native的架构允许使用原生组件,因此它的性能接近于原生应用,能够提供流畅的用户体验。
- 热重载功能:React Native具有热重载功能,可以实时查看代码更改的效果,加快了开发迭代的速度。
- 社区支持和丰富的组件库:React Native拥有庞大的开发者社区和丰富的组件库,开发者可以快速找到所需的组件和解决方案。
- Facebook支持:作为由Facebook开发和维护的开源项目,React Native得到了强大的支持和持续的更新。
React Native的缺点包括:
- 集成原生模块复杂:在某些情况下,需要使用原生模块来实现特定的功能,这可能需要开发者具备一定的原生开发技能。
- 性能受限于JavaScript:由于React Native使用JavaScript进行逻辑处理,一些性能密集型的任务可能受到限制。
- 包体积大,内存占用高:由于需要打包JavaScript引擎和React Native框架,导致应用的安装包大小较大,且内存占用较高。
总的来说,React Native在跨平台开发和性能接近原生应用方面表现出色,但在集成原生模块和性能方面存在一些挑战。
electron
Electron 是由 GitHub 开发的跨平台桌面应用框架,它使用 HTML、CSS 和 JavaScript 技术栈,并基于 Chromium 和 Node.js。这意味着开发者可以使用熟悉的前端技术来构建桌面应用程序。Electron 支持 Windows、macOS 和 Linux 平台,使开发者能够轻松地为多个操作系统构建应用程序。
Electron 的优点包括:
- 跨平台支持:开发者可以使用相同的代码库构建适用于多个操作系统的桌面应用程序,从而节省开发时间和成本。
- 使用现有技术栈:Electron 使用 HTML、CSS 和 JavaScript 技术栈,这意味着前端开发者可以直接应用他们的技能来构建桌面应用程序,无需学习新的语言或工具。
- 强大的社区支持:Electron 拥有庞大的开发者社区和丰富的第三方库,开发者可以快速找到所需的组件和解决方案。
- 可扩展性:Electron 提供了丰富的 API 和插件系统,使开发者能够轻松地扩展应用程序的功能。
然而,Electron 也存在一些缺点,包括:
- 包大小较大:由于需要打包 Chromium 和 Node.js,导致应用的安装包大小较大。
- 内存占用较高:Electron 应用程序通常会占用较多的内存,这可能会影响应用程序的性能和资源消耗。
总的来说,Electron 是一个强大的跨平台桌面应用框架,能够帮助开发者使用现有的前端技术来构建功能丰富的桌面应用程序。
uni-app
Uni-app 是一个基于 Vue.js 的跨平台应用框架,可以用于快速开发多端应用,包括H5、小程序、Android、iOS等。Uni-app 提供了丰富的组件和开发工具,使开发者能够使用统一的代码库构建多端应用,从而节省开发时间和成本。
Uni-app 的优点包括:
- 跨平台支持:开发者可以使用相同的代码库构建适用于多个平台的应用程序,包括H5、小程序、Android、iOS等。
- Vue.js 技术栈:Uni-app 基于 Vue.js,这意味着前端开发者可以直接应用他们的 Vue.js 技能来构建多端应用程序,无需学习新的语言或工具。
- 丰富的组件和工具:Uni-app 提供了丰富的组件和开发工具,使开发者能够快速构建功能丰富的应用程序。
- 社区支持:Uni-app 拥有庞大的开发者社区和丰富的第三方库,开发者可以快速找到所需的组件和解决方案。
然而,Uni-app 也存在一些挑战,包括:
- 部分三方库不够成熟:由于 Uni-app 是相对较新的框架,一些三方库可能不够成熟,导致一些功能可能不够稳定或者缺乏完善的支持。
- 打包体积较大:由于需要同时支持多个平台,Uni-app 应用程序的打包体积可能较大。
总的来说,Uni-app 是一个强大的跨平台应用框架,能够帮助开发者使用 Vue.js 技术栈来快速构建多端应用程序。
qt
Qt 是一个跨平台的 C++ 应用程序开发框架,它提供了丰富的 GUI 组件和工具,可以用于开发桌面、移动、嵌入式等多种类型的应用程序。Qt 具有以下优点:
- 跨平台支持:Qt 可以在 Windows、macOS、Linux 等多个操作系统上运行,开发者可以使用相同的代码库构建跨平台的应用程序。
- 高性能:由于 Qt 使用 C++ 语言进行开发,因此它能够提供高性能的应用程序体验。
- 丰富的 GUI 组件和工具:Qt 提供了丰富的现代化 GUI 组件和开发工具,使开发者能够轻松构建功能丰富的用户界面。
- 强大的社区支持:Qt 拥有庞大的开发者社区和丰富的第三方库,开发者可以快速找到所需的组件和解决方案。
- 可扩展性:Qt 提供了丰富的 API 和插件系统,使开发者能够轻松地扩展应用程序的功能。
然而,Qt 也存在一些挑战,包括:
- 学习曲线陡峭:由于 Qt 使用 C++ 语言进行开发,因此对于一些开发者来说,学习曲线可能会比较陡峭。
- 包体积较大:由于需要打包 Qt 库和应用程序代码,Qt 应用程序的安装包大小可能较大。
总的来说,Qt 是一个强大的跨平台应用框架,能够帮助开发者使用 C++ 语言来构建功能丰富的应用程序,并且在跨平台支持和性能方面表现出色。
tauri
Tauri 是一个使用 Rust 编写的跨平台应用框架,它结合了 Web 技术和原生 UI 组件,可以用于构建高性能的桌面应用。Tauri 具有以下特点:
- 跨平台支持:Tauri 可以在 Windows、macOS 和 Linux 等多个操作系统上运行,开发者可以使用相同的代码库构建跨平台的桌面应用程序。
- 高性能:由于 Tauri 使用 Rust 语言进行开发,因此它能够提供高性能的应用程序体验。
- 社区支持:Tauri 拥有一个积极的开发者社区,提供丰富的文档和示例,使开发者能够快速上手并解决问题。
- 包大小:相比其他框架,Tauri 应用程序的包大小相对较小,这有助于减少应用程序的安装包大小。
然而,Tauri 也存在一些挑战,包括:
- 生态相对不够成熟:由于 Tauri 是相对较新的框架,一些功能可能不够稳定或者缺乏完善的支持。
- 学习曲线:对于一些开发者来说,学习 Rust 语言和 Tauri 框架可能需要一定的时间和精力。
总的来说,Tauri 是一个有潜力的跨平台桌面应用框架,能够帮助开发者使用 Rust 语言和 Web 技术来构建高性能的桌面应用程序。
nw.js
NW.js(以前称为Node-Webkit)是一个基于Chromium和Node.js的框架,用于构建跨平台的桌面应用程序。它允许开发者使用HTML、CSS和JavaScript等前端技术来构建桌面应用,并且支持Windows、macOS和Linux等多个操作系统。NW.js具有以下特点:
- 跨平台支持:NW.js可以在多个操作系统上运行,使开发者能够使用相同的代码库构建跨平台的桌面应用程序。
- 前端技术栈:开发者可以使用熟悉的前端技术,如HTML、CSS和JavaScript,来构建桌面应用程序,无需学习新的语言或工具。
- Node.js集成:NW.js集成了Node.js环境,使得开发者可以使用JavaScript进行后端逻辑处理,同时能够访问操作系统的底层功能。
- 社区支持:NW.js拥有一个积极的开发者社区,提供丰富的文档和示例,使开发者能够快速上手并解决问题。
然而,NW.js也存在一些挑战,包括:
- 性能相对其他框架较低:由于NW.js同时运行Chromium和Node.js,可能导致一些性能方面的挑战,例如初始启动时间较长和内存占用较高。
- 生态相对不够成熟:相比一些其他框架,NW.js的生态系统可能相对不够成熟,一些功能可能不够稳定或者缺乏完善的支持。
总的来说,NW.js是一个强大的跨平台桌面应用框架,能够帮助开发者使用前端技术来构建功能丰富的桌面应用程序。