我已经用电脑二十多年了。我的第一台个人电脑是一台66兆赫的486机器,有2.4kbps的调制解调器,网络上甚至没有谷歌(我们有Altavista)。由于互联网速度很慢,我把大部分时间花在可以安装在本地机器上的应用程序上。现在,我把大部分时间花在网络应用上,不知何故,我感觉我们是在倒退,而不是前进。
几年前,当我试图找出内存耗尽的原因时,我偶然发现了Chrome的任务管理器。Gmail占用了700MB的内存,而我打开的只有收件箱。没有花哨的搜索框或写作,收件箱占用了700MB的RAM来以表格格式显示文本行。我一直是电子邮件客户端的重度用户,如果你选择任何一个本地客户端(Thunderbird、Outlook、Apple Mail),打开一系列搜索和撰写窗口,内存使用量仍将保持在100MB以下。
几十年前,我使用mIRC连接到多个聊天服务器,运行我自己的机器人,通过DCC提供文件和运行脚本,所有这些都保持在20MB以下的RAM。这些天来,要通过Slake发送文本消息,我需要超过1 GB的RAM。即使是带有所有跟踪器、外部javascript脚本和DOM的基本应用程序也会占用内存中100MB的空间。内存不足的最常见解决方案是关闭Chrome窗口。
多米很慢。更新布局和重新绘制甚至都很慢。JavaScript是一种动态语言,速度很慢。如今,Web应用程序一点也不简单,因为它们必须在所有速度较慢的组件的限制下工作,所以CPU最终会弥补这一点。Chrome几乎总是出现在我的Macbook的“使用显著能源”选项卡中。另一方面,我很少在电池栏中看到本地应用程序,除非我正在做一些实际会消耗大量CPU周期的事情,比如在Ableton中运行多个合成器或编译。当应用程序是为移动构建的时,电池使用是一个需要优化的主要领域。但是,甚至没有人考虑过网络应用程序。
移动应用程序运行速度为60fps,本地桌面应用程序运行速度为60fps,游戏运行速度(或至少设计为)运行速度为60fps。Chrome上的Instagram起步价为2-3fps,通常徘徊在30fps左右。我的笔记本电脑应该比我的手机更强大,但即使它们都运行在相同的分辨率下,也只能粗制滥造出一半的帧频!Web应用程序并不是一帆风顺的,有时可能会变得摇摇欲坠。当然,有些人可以非常努力地工作,并将网站优化为始终以60fps的速度运行,但这需要付出很大的努力。移动应用程序开箱即可以60fps的速度运行,无需太多努力。
移动和本地应用程序使用GPU的效率要高得多。因为他们有更多关于正在使用的控件的信息,他们可以更好地回收项目,并通过GPU在硬件加速方面做得更好。更不用说,如果您想进一步提升UI性能,您还可以访问原始图形API。
您可以用过多的语言构建桌面应用程序,甚至对于移动应用程序,您也有许多跨平台的框架。但是为Web(和电子)而构建迫使您使用HTML/Javascript(及其衍生产品)。JavaScript是一种动态的原型语言,它不是为今天正在构建的应用程序的规模而设计的。它没有类型安全性,内存泄漏很常见,而且由于其动态特性,速度很慢。虽然已经有很多像V8s JIT这样的改进性能的努力,但它仍然落后于许多主要语言。WASM看起来很有前途,但还有很长的路要走。
可笑的是,浏览器平台本身是多么的软弱。sqlite可以在raspberry pi、嵌入式系统、移动平台以及地球上几乎所有其他平台上使用。您可以存储数据,运行复杂的关系查询,事半功倍。但它不能在地球上使用最广泛的平台浏览器上使用。
随着电子应用的兴起,又大又笨重的网络应用开始进入桌面。还有一些人甚至试图通过PWAS在移动设备上获取相同的应用程序。虽然Web具有易于访问的优势,但在用户体验方面,我们牺牲了太多来换取这一便利。*如果您用本地语言构建了一个具有相同UI和功能的应用程序,并将其作为Web应用程序,则本地应用程序将围绕它运行。