为什么iPhone应用程序运行缓慢?

3
我注意到,我试过的每个iPhone应用程序都有很多地方似乎非常缓慢和不响应。这适用于游戏、免费应用、昂贵、流行的“专业”应用程序,甚至包括几个内置应用程序。它们似乎都有需要数秒甚至一分钟才能响应屏幕触摸的地方;会卡住并显示旋转的彩球几秒钟;“排队”输入,以便按钮按下似乎被忽略,只有像制作不良的DVR那样10秒钟后才真正做某事;而长时间锁定时操作系统看门狗会杀死它们。
因为这些性能问题如此普遍,我认为必须有一些常见的性能陷阱,一些正在一次又一次地出现在许多不同人身上的系统陷阱。由于我自己不是iPhone开发人员,因此我正在调查社区的意见: iPhone上最常见的性能错误是什么? 或者,iPhone开发的哪些人类因素使得发布性能较差变得太容易?
5个回答

5
我认为性能问题是一种感知问题。苹果在 iPhone 界面的各个方面都使用了动画效果,这产生了平稳、响应迅速的设备印象。你提到的减速现象看起来比实际情况更糟,因为它们与其他流畅界面形成鲜明对比。如果你将这些任务的总执行时间与其他移动设备上类似应用程序进行比较,我猜 iPhone 的实现仍然会排在前列。
当然,总有改进的空间,我希望人们在过去一年中学到的许多技巧将带来更快、更具响应性的应用程序。即使是开发工具本身也在不断进步,这应该会使诊断和处理性能瓶颈变得更容易。我知道我每周都在学习一些新技巧,以从 CPU、GPU 或内置存储器中挤出更多性能。
我仍然对人们如何迅速改变对手持设备能做什么的期望感到惊讶。我是一个名叫Molecules的开源应用程序的作者,它可以在iPhone上进行三维分子建模。十多年前,这些类型的渲染是在专用的SGI Irix工作站上完成的。在App Store推出几周后,我开始收到来自人们的电子邮件,抱怨当他们尝试使用超过20,000个原子的结构操纵分子时,应用程序有点卡顿。在很短的时间内,人们从将这些设备视为电话和音乐播放器转变为将它们视为便携式计算机。

问题在于iPhone确实表现出自己是一台移动计算机,拥有各种应用程序,这些应用程序的功能明显超越了电话的范畴。此外,即使在移动设备中,我发现PSP的响应速度和吞吐量要好得多,而它的CPU性能只有iPhone的一半。 - Crashworks
当然,现在将它看作一台计算机很容易,但在应用商店推出之前有多少人这样想呢?至于PSP,你不能拿苹果和橙子来比较。你试过使用PSP的网络浏览器吗?它比iPhone上的浏览器慢得多、功能也不如iPhone强大。你看到的大多数是3D游戏,而PSP有专门的硬件,可以推动约50倍于iPhone的三角形数量。对于非游戏任务,PSP远不如iPhone强大。祝你在PSP上发布应用好运。 - Brad Larson

2
记忆管理有点棘手。但我认为最大的问题是:你能够承受多长时间去完善一个售价只有99美分、要与成千上万其他应用竞争,并且在一个快速变化的市场中具有未知收入潜力的产品吗?
iPhone是一款非常好的设备,但争夺市场份额的竞争是激烈且昂贵的。

哇,这是一个惊人的揭示的好链接。谢谢! - Crashworks
1
看看Stackoverflow上有多少iPhone相关的问题是关于查找内存泄漏的。C和C++程序员需要一段时间才能掌握Objective-C(主要是要学习很多Cocoa,语言本身并不大)。我敢打赌许多程序员都习惯依赖垃圾回收机制。 - Nosredna
C/C++不是HTML或Java,开发人员必须掌握一些基本的内存处理知识,因为设备拥有有限的资源,无论是CPU、RAM还是电池寿命... - stefanB

2
正如之前提到的,利润/开发时间比率可以解释这一现象。
更加技术性地说,你所看到的滞后是在启动应用程序时创建的,因为应用程序要么通过网络获取数据,要么调用主页检查更新等等。此外,它还可能在初始化应用程序时创建,例如从数据库/文件加载大量数据、加载GUI组件和图像、绘制等等。
与内存管理类似,所有这些问题都可以通过设计后台运行操作、懒惰加载等方式来解决,但这需要更多的时间,而时间就是金钱,你不会花费太多时间在99美分的应用程序上,这种应用程序可能根本无法销售。
有趣的是,在许多专业文章中(没有参考文献),我们被指出不再关心内存和速度,因为桌面正在变得更快,内存也更多了。人们往往忘记的是,同时我们正在试图从运行资源更少的越来越小的设备中挤取更多的能量。
例如,大多数网页现在都设计为加载大量的动画和图像,并且与某些网页不同,它们根本没有为性能进行任何调整,但在桌面上表现还算可以。这些网页根本没有机会在移动设备上加载。应用程序也是如此,为桌面设计一个庞大的框架(或GUI小部件库)将使其难以移植到时尚的移动设备上,无论是iPhone、某些水果浆果还是其他什么。
生活中的其他事情一样,你得到你所付出的。我的99美分。

1

我认为最大的问题是,没有在设备上实际运行应用程序就无法确定其速度。开发人员在iPhone模拟器中执行大部分基本应用程序测试(根据我的经验,模拟器可能快1000倍)。在模拟器中只需一瞬间的操作,在手机上可能需要进度指示器,而当你意识到这一点时,需要花费很多精力才能回去添加(在某些情况下还需要线程)相关操作。正如Noshredna所指出的那样,这通常是一个99美分的应用程序。

iPhone的处理器也有根本性的限制。我看过几个漂亮的应用程序,它们试图在不接受平台限制的情况下做出非常令人印象深刻的事情。

这是一个旁注,我不想引发移动平台之争,但我发现iPhone应用程序通常比Android应用程序更具响应性...


一旦我开始在设备上进行测试,我发现我很少回到模拟器。也许这取决于你有多少依赖于一些模拟器根本无法做到的事情。 - Nosredna
1
我不确定我是否认同“iPhone处理器速度慢”的观点。PlayStation 2的处理器是300MHz MIPS,而iPhone的处理器是620MHz ARM,那些应用程序对所有操作的响应时间都在33.3毫秒或更短。 - Crashworks
这是真的,PlayStation拥有一个内存总线,可以每秒传输近3GB的数据,不过我想知道这是否有所影响?你绝对是对的。与iPhone相比,他们在有限的资源下做了一些惊人的事情。 - Ben Gotow
1
是的,但 iPhone 对硬件的控制比其他平台更多。在游戏机上,你基本上可以完全控制设备的硬件。而在 iPhone 上,你只是操作系统的二等公民。 - Erich Mirabal
2
我曾经参与过一些PS2产品的开发。在PS2游戏中,多个程序员在多个奇特可编程部件上进行低级别的工作,以获得长时间开发周期的产品的帧率。并且随着PS2的使用寿命,还建立了低级别的库。有多位艺术家优化他们的纹理。一个典型的PS2游戏需要多少人力小时,相比之下iPhone游戏呢?iPhone的OpenGL ES速度很快。但是所有的技巧还没有被发现和传播。 - Nosredna
iPhone的3G处理器被降频到400Mhz(可能是为了提高电池续航时间)。 - Marco Mustapic

-2

可能是因为你删除了应用并重新安装,因为某些问题发生了,所以它需要一段时间来恢复。我花了大约2到3天的时间才完全加载,所以要有耐心,它最终会出现的。另外,也许你的iPhone没有足够的空间安装你的应用程序,或者你的应用程序比较大。尝试删除其他应用程序以腾出空间。


从设备中删除应用程序不应对其他应用程序的性能产生影响。据我所知,iPhone 不使用文件系统上的交换空间,因此应用程序在 RAM 中受到设备物理内存的限制。由于没有使用/需要将文件系统空间用作临时存储作为虚拟 RAM,因此删除应用程序以加速其他应用程序是没有意义的。 - rickerbh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接