本周项目:Kap
Electron 社区正在快速发展,人们正在以惊人的速度创建强大的新应用和工具。为了庆祝这种创造性的势头并让社区了解其中一些新项目,我们决定启动一个每周博客系列,重点介绍值得关注的 Electron 相关项目。
这篇文章是该系列的第一篇,介绍了 Kap,这是一个由 Wulkano(一个由自由设计师和开发人员组成的地理分布式团队)构建的开源屏幕录制应用程序。
什么是 Kap?
Kap 是一款开源屏幕录制工具,主要面向设计师和开发者,方便他们捕捉自己的工作成果。人们用它来分享动画原型、记录错误、制作有趣的 GIF 动图等等。
我们看到不同年龄和背景的人在教育、录屏、教程等各种场景下使用它……不胜枚举。甚至用于创建生产素材!我们完全被我们这个小项目的受欢迎程度所震撼。
你们为什么要构建它?
这是一个很好的问题,现在并不缺乏屏幕录制工具!我们觉得现有的工具要么太复杂,要么太贵,要么功能太有限。没有一款工具能完全满足我们的日常需求。我们还认为,如果我们用来工作的工具是开源的,那就太好了,这样每个人都可以参与塑造它们。构建 Kap 最终也关乎我们没有做什么。细节决定成败,正是这些小的改进积累起来,才形成了我们想要使用的工具的轮廓。
然而,也许最重要的是,Kap 已经成为我们抛开烦恼、纯粹为了自己和像我们这样的人而快乐地构建东西的地方。创造一个你可以尽情发泄、尝试新事物、享受你手艺的环境是如此重要。没有要求,没有压力,没有期望。设计师和开发者应该做些副业项目吗?是的,他们应该。
你们为什么选择在 Electron 上构建 Kap?
有很多原因
- Web 技术
- 团队中的大多数成员都是 Web 开发人员
- 我们对 JavaScript 情有独钟
- 它为更多人参与贡献打开了大门
- Electron 本身是开源的
node_modules
强大且易于维护的模块化特性- 跨平台的可能性
我们认为应用程序的未来在浏览器中,但我们还没有完全做到这一点。 Electron 是迈向未来重要的一步。它不仅使应用程序本身更容易访问,而且使构建它们的代码也更容易访问。一个有趣的设想是,想象未来操作系统是一个浏览器,而标签本质上是 Electron 应用程序。
此外,作为主要的 Web 开发人员,我们非常喜欢 JavaScript 同构的特性,因为它允许你在客户端、服务器以及现在的桌面上运行 JS。使用 Web 技术(HTML、CSS 和 JS),许多事情比原生开发要简单得多:更快的原型设计、更少的代码、flexbox > 自动布局(macOS/iOS)。
在构建 Kap 时,你们遇到过哪些挑战?
使用 Electron 提供的资源录制屏幕是最大的挑战。它们的性能不足以满足我们的需求,并且在我们看来,这将使项目失败。虽然这不是 Electron 本身的问题,但在原生开发和使用 Web 技术构建桌面应用程序之间仍然存在差距。
我们花费了大量时间尝试解决 getUserMedia
API 性能不佳的问题,这是 Chromium 中的一个问题。我们开始制作 Kap 时,主要目标之一是使用 Web 技术构建整个应用程序。在尝试了所有方法使其正常工作之后(最低要求是在 Retina 屏幕上达到 30 FPS),我们最终不得不寻找其他解决方案。
我在仓库中看到了一些 Swift 代码。那是怎么回事?
被迫寻找 getUserMedia
的替代方案后,我们开始尝试 ffmpeg
。除了是音频和视频转换的最佳工具之一之外,它还具有在几乎所有操作系统中录制屏幕的功能,并且我们能够录制出满足我们在 Retina 屏幕上最低 30 FPS 要求的清晰视频。问题是性能“😩”,CPU 使用率失控了。所以我们回到了原点,讨论了我们的选择,并意识到我们必须做出妥协。这导致了 Aperture 的诞生,这是我们用 Swift 编写的 macOS 屏幕录制库。
Electron 在哪些方面需要改进?
我们都知道 Electron 应用程序可能会占用大量 RAM,但这实际上是 Chromium 的问题。这是其工作原理的一部分,并且实际上取决于你运行的内容,例如,Kap 和 Hyper 通常使用不到 100MB 的内存。
我们认为最大的改进领域之一是有效负载,特别是 Electron 如何分发 Chromium。一种想法是共享一个 Electron 核心,并让应用程序安装程序检查它是否已存在于系统上。
创建跨平台 Electron 应用程序的体验可以更好。目前,平台之间存在太多不一致之处、特定于平台的 API 以及缺失的功能,这使得你的代码库中充斥着 if-else 语句。例如,活力效果仅在 macOS 上受支持,自动更新程序在 macOS 和 Windows 上的工作方式不同,甚至在 Linux 上不受支持。透明度在 Linux 上时好时坏,通常是坏的。
调用原生系统 API 也应该更容易。Electron 附带了一套非常好的 API,但有时你需要它没有提供的功能。创建原生 Node.js 插件是一个选择,但这很难使用。理想情况下,Electron 应该附带一个良好的 FFI API,例如 fastcall
。这将使我们能够用 JavaScript 编写 Swift 部分。
你喜欢 Electron 的哪些方面?
我们最喜欢的一点是,任何拥有 Web 开发知识的人都可以构建多平台原生体验并为之做出贡献。更不用说它开发起来轻松愉快、文档出色以及生态系统蓬勃发展。
从前端的角度来看,构建 Kap 与使用浏览器 API 构建一个简单的网站没有什么不同。Electron 在使应用程序开发类似于(基本上与之相同)Web 开发方面做得非常出色。事实上,它是如此简单,以至于我们不需要框架或类似的东西来帮助我们,只需要干净且模块化的 JS 和 CSS。
我们也是构建它的人、他们的奉献精神和支持,以及他们维护的活跃而友好的社区的忠实粉丝。拥抱你们所有人!
Kap 接下来的计划是什么?
我们的下一步是在为 2.0.0 里程碑做准备时审查应用程序,其中包括 React 重写以及对插件的支持,允许开发人员扩展 Kap 的功能!我们邀请每个人关注项目并为我们的 GitHub 仓库 做出贡献。我们正在倾听,并希望听到尽可能多的人的意见,让我们知道如何才能使 Kap 成为你最好的工具!
Wulkano 是什么?
Wulkano 是一家设计工作室和数字团体,一个由远程技术专家组成的团队,他们喜欢一起从事客户项目和我们自己的项目。我们是一个分布式但关系密切的团队,成员来自不同的地方和背景,在我们虚拟的办公室(恰好是基于 Electron 的 Slack!)中分享知识、想法、经验,但最重要的是分享有趣的表情包和梗。
对其他开发者有用的 Electron 技巧?
利用并参与到这个奇妙的 社区 中,查看 Awesome Electron,查看 示例 并利用优秀的 文档!