写点什么

我用一个跨平台 Web 应用替换了原生 iOS 应用,竟没人发现

  • 2022-05-20
  • 本文字数:2929 字

    阅读完需:约 10 分钟

我用一个跨平台 Web 应用替换了原生 iOS 应用,竟没人发现

不知为何,我的跨平台 Web 应用实际上更稳定。我想,我浪费了大量时间开发原生 iOS 应用。


这一切要从我想做一款可以帮助父母们安排孩子上学的 App 开始。


我是一个有 3 个孩子的父亲。在工作中,有很多功能强大的工具可以帮我组织和管理团队,但在家里却没有任何工具可以帮我安排孩子们去上学,每次都搞得一团糟,为此我感到很恼火。于是我想,为什么不给孩子们列一个待办事项清单呢?我可以让它的使用体验看起来像游戏一样,甚至嵌入游戏化的设计元素,帮助孩子们保持专注和参与度。


所以我开发了“School Morning Routine”,效果非常棒。现在,孩子们准备上学的时间缩短为原来的 30%,我们唠叨的时间也减少了 95%(是的,我算过了)。


但在开发过程中,我犯了一个大错误。我浪费了大量时间开发原生 iOS 应用。

为什么最开始我选择了原生开发


在 2022 年,要开始一个移动 App 项目,最大的问题在于有很多完全不同的技术方向可供你选择:原生应用、跨平台 Web 应用、React Native、Flutter、渐进式 Web 应用、Xamarin 等等。


默认的方案是写 3 次代码,一次针对 iOS,一次针对 Android,一次针对 Web。



但是,对我们软件开发人员来说,多次编写相同的代码是非常令人不安和不自然的。因此,这么多年来,我们已经尝试了几十种方法,试图实现“一次编写,到处运行”,但它们都涉及令人讨厌的权衡。


如果选择了跨平台 Web 应用,你只需要使用通用的 Web 技术编写代码,然后将其部署到多个平台上,只是有少量涉及 iOS 和 Android 功能的原生代码无法在浏览器中运行。


但你需要在性能方面做出权衡。


2014 年,我尝试用 Ionic Framework 开发一款不同的应用,然后我和大多数人都发现了统一的问题:Android 和 iOS 运行 Web 应用的表现很糟糕。


它们响应慢、行为不可预测、断断续续、忽隐忽现,触屏互动体验也很古怪。


所以,我很早就确定 School Morning Routine 不应该是一款跨平台 Web 应用。这款应用将大量使用游戏风格的动画,因为它是面向儿童的,所以它需要出色的触屏互动体验。


不知为何,我的跨平台 Web 应用实际上更稳定


所以,我决定开发一款原生应用。原生应用通常风险最小、质量最高。当然,同样的应用做了两次,这不是什么好事,但它毕竟是一款小应用,我相信努力比魔法更重要。


首先,我做了一款漂亮的 iOS 应用,并与测试用户进行了多次迭代。然后我将其发布到 App Store 上,并获得了一些用户反馈。除了收到五星好评,还有来自用户的电子邮件。用户在邮件里说这款应用是如何改变了他们的生活和工作。



我很高兴自己取得了一些成绩,并决定接下来要开发 Web 应用。我使用了 React,再加上 CSS 动画、Framer 和一些 Lottie 动画。在开发完成后,我花了一下午仔细调优性能,只是想确保没有做不必要的渲染。


那时,我的孩子们已经使用 iOS 原生版 School Morning Routine 好几周了。为了测试这个新的跨平台 Web 版本,我把它装到孩子的 iPad 上。他们可以用它来测试,为上学做准备。


有趣的是,我忘记告诉他们那个 App 已经从原生改为 Web 版了,但第二天早上他们却没有注意到。


他们没有注意到。


他们甚至都没有注意到。


如果你没有孩子,可能就不会意识到这个。要知道,孩子总是抱怨所有的东西。真的,所有的东西。但是,当第二天我问他们是否注意到有什么不同时,他们不仅没有抱怨那款 Web 版 App ,还感谢我,因为我在 Web 版中使用了不同的动画,他们当中有两个更喜欢它。


他们是对的,新版的动画流畅如黄油,触屏互动体验更加精准。



我感到很震惊。也许只是因为 iPad 的性能好?于是,我出去买了一台低端的 Android 平板电脑。我选择了一款功能配置差的,即使是打开设置屏幕都很不流畅。但这也是一项重要的测试,因为对许多人来说,这是他们唯一能使用的设备。


我加载了 School Morning Routine,你猜怎么着,它运行得很好。虽然不算很出色,但这只是一款低端的 Android 平板电脑,你还能期待什么?


于是,我走到办公桌前,删除了我的原生 iOS 应用,决定使用 Ionic Capacitor。


现在,我要开发一款可以在三个平台上运行的 App。我的构建脚本中有 3 个命令,分别用于部署到 iOS 平台、Android 平台或 AWS 的网站上。



这太酷了!


从那时起,我便在 Android、iOS 和 Web 上发布 School Morning Routine。不仅我的 iOS 用户没有注意到,漏洞的数量也减少了。有一个麻烦的 Bug 与渲染表格视图有关,这个问题只发生在 iOS 14 上,它打印出来的堆栈跟踪信息没有用……但在我的跨平台 Web 应用中,就不存在这个问题。


直线出现在跨平台 Web 应用发布之后


不知为何,我的跨平台 Web 应用实际上更稳定!

这是怎么回事?


为儿童开发的一款到处都是动画的 App 居然是一款 Web 应用,这怎么可能?


事实证明,在 2022 年,对于许多应用程序来说,编写一次就可以在任何地方运行的梦想终于实现了。


对于跨平台 Web 应用来说,成本和收益之间的权衡总是以较差的性能换取较短的开发时间。对于 2014 年的大多数应用来说,这是一个糟糕的权衡。但在过去的 8 年里,很多事情都发生了变化。浏览器性能在稳步提升:


图片来源:https://v8.dev/blog/10-years


Web 应用开发工具的种类和成熟度也在增加。现在,我们有了 React 和 TypeScript。IDE 和 Chrome 调试器比原生应用开发工具要领先好几光年。有很多创新的设计模式和开源库可用于实现你能想到的目标。JavaScript 的世界比 Swift 或 Kotlin 的世界更加有活力和丰富多彩。


2022 年,成本和收益之间的权衡发生了变化。


跨平台 Web 应用的时代正在到来


我一直是 Ionic 的铁粉。他们在几年前创办了一家公司,是跨平台 Web 应用的早期倡导者。我喜欢他们所做的工作,但我一直为他们感到难过。他们似乎押错马了,支撑跨平台 Web 应用的技术无法支撑他们的梦想。


但到了今天,我认为技术的发展终于与 Ionic 的愿景合拍了。


可能你在几年前就疯狂地想要开发一款像 School Morning Routine 这样的跨平台 Web 应用。这确实没毛病!它很漂亮,真的!我已经在谷歌 Play Store 和苹果 App Store 上发布了这款应用,你甚至可以在线使用它。


不只是我,Josh Wardle 在去年末开发了 Wordle,这款手机游戏现在正风靡全球。正如我在另一篇文章(https://uxdesign.cc/wordle-is-a-masterclass-in-product-design-simplicity-52de1ba06d85)中所写的,它甚至都没有原生版本,只是一个使用 Web 组件开发的渐进式 Web 应用。

结论


我多么希望在我开始开发 School Morning Routine 时能够读到这样的文章。过去,我忽视了跨平台 Web 应用,只因为我觉得它们太慢了,但没想到它们却完美匹配我的应用。


浏览器和 Web 技术每年都在变得越来越强大,每年都有更多类型的应用可以跨平台开发。


所以,在开始下一个项目之前,为什么不考虑一下跨平台 Web 应用呢?或许它们真的不适你的项目,但或许,就像我一样,你会发现它们可以“编写一次,到处运行”。我觉得这非常出人意料。


如果你想了解跨平台技术在国内的最新实践,点击 GMTC全球大前端技术大会(北京站)发现 Weex 2.0Waft(基于 WebAssembly 和 Skia 的 IoT 应用开发框架),还将看到 KMMDSL 的优秀表现。


原文链接(本文对文章结构有小小的改动):https://javascript.plainenglish.io/i-replaced-my-native-ios-app-with-a-cross-platform-web-app-and-no-one-noticed-1653901ce244

2022-05-20 20:569676

评论 4 条评论

发布
用户头像
现在感觉满电脑的electron
2022-06-03 09:28
回复
用户头像
事实上我们公司用的RN,运行的是相当稳定。反而纯原生的APP各种毛病,想想也是RN框架已经是FB给你把底层给封装好了,小白也能上手。纯原生如果开发者水平不行,反而会搞出这么多麻烦。
2022-05-31 16:05
回复
用户头像
酷!
2022-05-30 22:42
回复
用户头像
堆栈转移到服务端的确是优势。
2022-05-21 19:59
回复
没有更多了
发现更多内容

手把手教会你|Sockets多用户-服务器数据库编程

TiAmo

服务器 socket通信 数据库编程

如何保证 RabbitMQ 的消息可靠性

小小怪下士

Java 程序员 RabbitMQ 消息中间件

神秘的IP地址8.8.8.8地址到底是什么?为什么会被用作DNS服务器地址呢?

wljslmz

DNS 三周年连更

MySQL 并行复制方案演进历史及原理分析

Java你猿哥

Java MySQL ssm 并行复制 主从延迟

假期做了一项调研:大厂为啥都自研RPC?结果合乎情理!

冰河

程序员 RPC 架构师 技术提升 大厂招聘

SPFA 算法:实现原理及其应用

繁依Fanyi

算法 SPFA

Mac音乐制作软件推荐:Ableton Live 11 Suite中文版「win/Mac」

Rose

Ableton Live 11破解版 Ableton Live 11中文版 苹果软件下载

如何解决Paragon NTFS for Mac安装分卷失败?

Rose

Paragon NTFS ntfs 安装分卷失败

阿里巴巴官方上线!号称国内Java八股文天花板(终极版)首次开源

Java你猿哥

Java 微服务 算法 JVM 多线程

工业互联网:加速从“中国制造”迈向“中国智造”

华为云开发者联盟

云计算 工业互联网 华为云 华为云开发者联盟 企业号 5 月 PK 榜

你想要的【微前端】都在这里了! | 京东云技术团队

京东科技开发者

前端 微前端 微前端框架 企业号 5 月 PK 榜 mirco

阿里P8撰写1500页程序性能调优笔记:GitHub标星79k

程序知音

Java 性能优化 JVM java架构 Java进阶

阿里巴巴官方上线!号称国内2023最新Java八股文天花板(终极版)首次开源

程序员小毕

程序员 微服务 JVM java面试 Java八股文、

GitHub上“千金难求”的Spring Boot趣味实战全彩版手册,太干了

程序知音

Java spring 微服务 springboot Java进阶

IPRAN网络结构智能优化

鲸品堂

网络 通信 企业号 5 月 PK 榜

景区共享电动车与校内共享电单车是否可行

共享电单车厂家

共享电动车厂家 景区共享电单车 校内共享电单车 共享电动车投放

基于 Rainbond 的混合云管理解决方案

北京好雨科技有限公司

Kubernetes 云原生 rainbond 混合云架构

字节首次公开!23年Java后端面试上岸手册 ,竟含全套后端面试考点

Java你猿哥

Java 算法 JVM 多线程 java面试

Redis Set 用了 2 种数据结构来存储,到现在才知道

Java你猿哥

Java ssm sets

Apache Pulsar 在火山引擎 EMR 的集成与场景

字节跳动数据平台

大数据 开源 云原生 解决方案 企业号 5 月 PK 榜

从0到1:可自定义数据列的成绩查询小程序开发笔记

CC同学

面向万物智联的应用框架的思考和探索(上)

HarmonyOS开发者

HarmonyOS

10分钟带你徒手写个Java线程池

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜 Java线程池

Python网络爬虫原理及实践 | 京东云技术团队

京东科技开发者

Python 爬虫 python 爬虫 爬虫入门 企业号 5 月 PK 榜

主流框架都用SPI机制,看一下他们的区别和原理

Java你猿哥

ssm 框架 JavaSPI Spring SPI Dubbo SPI

Java面试题1000+附答案大全(合适各级Java开发人员)

架构师之道

Java 面试

阿里巴巴爆款“Spring Cloud Alibaba 全彩笔记”正式发布

采菊东篱下

微服务

Prometheus 瘦身第一步,使用 mimirtool 找到没用的 Prometheus 指标

巴辉特

Grafana Prometheus Mimir mimirtool

HTML和xml有哪些区别?

海拥(haiyong.site)

三周年连更

史上最强升级!音乐制作软件Logic Pro中文特别版

Rose

Logic Pro Mac音乐软件下载 Logic Pro破解版

新来个技术总监:发现谁再用 delete 删数据直接开除!

Java你猿哥

Java MySQL ssm 存储 delete

我用一个跨平台 Web 应用替换了原生 iOS 应用,竟没人发现_大前端_Chris Nielsen_InfoQ精选文章