将手机应用移植为浏览器扩展程序
KeyRush 最初是在 iPhone 和 Android 上启动的。当我们决定将其迁移到 Chrome 时,面临一个选择:是将现有应用封装到某个跨平台层中,还是为浏览器重写它。 我们选择了重写,基于 Android 版本进行了移植。纯 JavaScript,Manifest V3,不使用任何框架,也没有构建步骤。以下是我们在此过程中获得的经验。.
键盘现在是真的了
在手机上,打字训练软件只能算是一种近似替代。屏幕键盘既是输入设备,又是练习对象,这种情况略显奇怪。而在浏览器中,用户指尖下有一台真正的键盘——这正是该应用试图教给用户的。.
这种情况的变化超出了我们的预期。不同国家和不同设备的键盘布局各不相同。还有修饰键的存在。用户会长按按键、同时按下两个按键,甚至在操作过程中切换键盘布局。在实体键盘上,训练器中的任何细微偏差都会立即被察觉,因此我们必须对“什么才算正确的按键操作”这一标准更加谨慎。.
我们保留了屏幕键盘,但它的作用发生了变化。在手机上,它是供你按键的工具;而在扩展程序中,它则充当了引导工具:它会高亮显示你接下来应该按的键,这样你就可以把目光始终聚焦在屏幕上,而不是盯着手。这正是盲打的精髓所在,而浏览器让我们得以认真践行这一理念。.
窗口大小并非固定不变的
手机屏幕的形状屈指可数。而浏览器窗口的形状则千变万化。扩展程序的弹出窗口又窄又短;而整个标签页则可能非常庞大。同一个应用必须在这两种情况下都显得合理。.
因此,我们两种模式都提供了。KeyRush 既可以以弹出窗口的形式打开,方便快速测试;也可以在需要更多空间进行课程和比赛时,以完整标签页的形式打开。按下 Alt+Shift+K 即可直接打开,无需动用鼠标——对于一款打字应用来说,这似乎是恰当的默认设置。.
弹出窗口会忘记一切
弹出窗口一旦被点击,只要鼠标移出窗口范围,它就会立即关闭,而它占用的内存也会随之释放。在 Android 系统中,应用程序可以进入后台运行,并能完全恢复到之前停止时的状态。而在弹出窗口中,你必须假设用户随时可能离开。.
因此,所有重要的内容都存储在浏览器存储中,而不是存储在窗口中,弹出窗口和完整标签页读取的是同一个存储状态。在弹出窗口中完成测试后,打开完整标签页,结果已经显示在那里了。正是这一小小的架构决策,让整个扩展程序显得更加稳健。.
权限是一种设计决策
Android 应用也会声明权限,但用户很少会去阅读这些权限。而扩展程序的用户通常会阅读,而且浏览器会直接在安装提示中显示相关警告。KeyRush 仅请求一项权限:存储权限。它无需查看您访问的网页,因此不会请求该权限。我们曾专门撰写过一篇文章,解释了这一点对我们为何重要。.
我们保留了什么
实际产品中的几乎所有内容都保持不变:15、30、60和120秒的计时速度测试,按手指分类的盲打课程,与电脑对手的对战,统计数据,按键失误热力图,每日挑战以及全部44项成就。 从手机版切换到扩展版的使用者,应该在一分钟内就能轻松上手。.
我们也坚持了这些原则。它完全支持离线使用。进度仅保存在您的浏览器中。无需账户,也无需登录。.
我们为什么没有共享代码
重写听起来成本很高,从某些方面来说确实如此。但打字训练器并不是一个大型应用,而且关键的逻辑——评分、课程、等级、成就——足够简单,可以从 Android 的原版中仔细地手动移植过来。 作为回报,我们获得了一个加载瞬间完成、无需维护第三方依赖项更新、且运行起来仿佛专为浏览器打造的扩展程序——因为它确实是专为浏览器打造的。.