为啥 iPhone 应用程序这么慢?

Posted

技术标签:

【中文标题】为啥 iPhone 应用程序这么慢?【英文标题】:Why are iPhone apps so slow?为什么 iPhone 应用程序这么慢? 【发布时间】:2009-06-30 00:06:59 【问题描述】:

对于我尝试过的每个 iPhone 应用程序,我注意到的一点是,它们都有看起来非常缓慢且无响应的地方。游戏、免费应用程序、价格昂贵、流行的“专业”应用程序,甚至苹果的一些内置应用程序都是如此。他们似乎都有需要几秒钟甚至一分钟才能响应屏幕触摸的地方。陷入困境并一次显示旋转的沙滩球几秒钟; “排队”输入,因此按下按钮似乎会被忽略,只是在十秒钟后实际执行某些操作,例如制作不佳的 DVR;并锁定很长时间,以至于操作系统看门狗只会杀死它们。

因为这些性能问题如此普遍,所以在我看来,一定存在一些常见的性能缺陷,一些系统陷阱会一次又一次地出现在许多不同的人身上。我自己不是 iPhone 开发者,所以我正在征求社区的意见:

iPhone 上最常见的性能错误是什么?

或者,iPhone 开发中的哪些人为因素导致很容易发布性能不佳的产品?

【问题讨论】:

【参考方案1】:

我认为性能问题是一个认知问题。 Apple 在 iPhone 界面的各个方面都使用了动画,给人一种流畅、反应灵敏的印象。您提到的减速似乎比它们可能的要糟糕得多,因为它们从原本流畅的界面中脱颖而出。如果您将这些任务的总执行时间与其他移动设备上的类似应用程序进行比较,我猜 iPhone 的实现仍将名列前茅。

不过,总有改进的余地,而且我希望人们在去年学到的许多技巧将带来更快、响应更快的应用程序。甚至开发工具本身也在进步,这应该更容易诊断和处理性能瓶颈。我知道我每周都在学习新的技巧,以便从 CPU、GPU 或板载内存中榨取更多。

我仍然惊讶于人们如此迅速地改变了他们对手持设备功能的期望。我是一个名为Molecules 的开源应用程序的作者,该应用程序在iPhone 上进行3-D 分子建模。十多年前,这些类型的渲染是在专用的 SGI Irix 工作站上完成的。 App Store 推出几周后,我开始收到人们的电子邮件,他们抱怨说,当他们试图操纵结构中包含超过 20,000 个原子的分子时,应用程序有点生涩。在很短的时间内,人们就从将这些设备视为手机和音乐播放器,转变为将它们视为便携式计算机。

【讨论】:

问题在于,iPhone 确实将自己呈现为一台移动计算机,具有各种应用程序,这些应用程序的功能显然超出了电话的范围。此外,即使在移动设备中,我也看到了更好的响应能力和吞吐量,例如,具有一半 CPU 功率的 PSP。 当然,现在把它看成是一台电脑很容易,但在 App Store 推出之前,有多少人是这样想的?就 PSP 而言,您不是在将苹果与苹果进行比较。您是否尝试过使用 PSP 网络浏览器?它比 iPhone 慢得多,能力也差得多。你看到的大部分是 3D 游戏,而 PSP 有专用的硬件,可以推动 iPhone 所做的三角形数量的约 50 倍。对于非游戏任务,PSP 远不如 iPhone。也祝它出版好运。【参考方案2】:

内存管理是a bit of a beast。

但我认为最大的问题是:在瞬息万变的市场中,一款售价为 99 美分、可与数以万计的其他应用竞争且收入潜力未知的产品,你能坚持多久?

iPhone 是一款非常棒的小设备,但对mindshare 的竞争是激烈且昂贵的。

【讨论】:

哇,与令人震惊的发现有多么好的联系。谢谢! 看看 *** 上有多少 iPhone 问题是关于查找内存泄漏的。 C 和 C++ 程序员需要一段时间才能掌握 Objective-C 的窍门(很多 Cocoa 需要学习,主要是——该语言并没有那么大)。而且我敢打赌,很多程序员都有依赖垃圾收集的习惯。 好吧,C/C++ 不是 html ... 或 java ... 开发人员在不了解如何处理内存的一些基础知识的情况下无法生存,设备资源有限,无论是 CPU、RAM或电池寿命...【参考方案3】:

如前所述,开发所花费的利润/时间比率可以解释这一点。

从技术上讲,我会说您看到的延迟是在应用程序通过网络获取数据或打电话回家检查更新等时创建的。此外,它可以通过初始化应用程序来创建,例如从数据库/文件加载大量数据、加载 gui 组件和图像、绘图等。

与内存管理类似,这一切都可以通过将操作设计为在后台运行、延迟加载等来解决,但这需要更多时间,时间就是金钱,对于 99C 应用程序可能会或可能不会卖掉,你不会得到太多完全没有。

有趣的是,许多专业文章(没有参考...)中指出,我们不应该再关心内存和速度,因为台式机随着内存的增加而变得越来越快。人们往往会忘记的是,与此同时,我们正试图从运行资源越来越少的越来越小的设备中榨取更多的能量。

例如,现在大多数网页都设计为加载大量动画和图像,并且与某些网页不同,根本没有针对性能进行调整,但在台式机上就可以了。这些网页没有机会在移动设备上加载。应用程序也是如此,为桌面设计一个庞大的框架(或 gui 小部件库)将使将功能移植到时尚的移动设备上变得非常困难,无论是 iphone、一些水果浆果等等。

就像生活中的其他事情一样,你得到你付出的代价。

我的 99C。

【讨论】:

【参考方案4】:

我认为最大的问题是,如果不实际在设备上运行应用程序,就无法确定应用程序的速度。开发人员在 iPhone 模拟器中执行大部分基本应用程序测试(根据我的经验,它的运行速度可以提高 1000 倍)。一些在模拟器中需要一瞬间的操作可能需要手机上的进度指示器,当您意识到时,需要付出很多努力才能返回并添加(在某些情况下是线程)有问题的操作。正如 Noshredna 指出的那样,它通常是一个 99c 的应用程序。

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

这是一个旁注,我不想引发移动平台大战,但我发现 iPhone 应用程序通常比 android 应用程序响应更快...

【讨论】:

一旦我开始在设备上进行测试,我发现我很少回到模拟器。也许这取决于你对模拟器根本不做的一些事情的依赖程度。 我不确定我购买“iPhone 处理器速度慢”的论点有多远。与 iPhone 的 620MHz ARM 相比,PlayStation 2 的处理器是 300MHz MIPS,并且这些应用程序在 33.3 毫秒或更短的时间内响应所有内容。 这是真的,游戏机的内存总线每秒可以拉近 3GB - 我想知道这是否有所作为?你绝对是对的。与 iPhone 相比,他们用有限的资源做了一些了不起的事情。 是的,但与其他平台相比,iPhone 保留了更多对硬件的控制。在游戏机中,您基本上可以完全控制设备的硬件。使用 iPhone,你是操作系统的二流公民。 我在使用一些 PS2 产品。在 PS2 游戏中,多个程序员在多个时髦的可编程部件上进行低水平工作,以在具有较长开发周期的产品上获得帧速率。在 PS2 的整个生命周期中都建立了一些低级库。有多个艺术家优化他们的纹理。与典型的 iPhone 游戏相比,典型的 PS2 游戏需要多少工时? iPhone 的 OpenGL ES 速度很快。但是所有的花样还没有被发现和传播。【参考方案5】:

好吧,因为也许您删除了该应用程序并再次安装,因为它发生了问题,所以它必须花费一些时间,我花了大约 2 或 3 天才能完全加载,所以请耐心等待,它最终会到来。也可能您的 iPhone 没有更多空间供您的应用使用,或者您的应用很重,请尝试删除其他应用,以便它有空间。

【讨论】:

从设备中删除应用程序应该不会影响其他应用程序的性能。据我了解,iPhone 不使用文件系统上的交换空间,因此应用程序在 RAM 中仅限于设备中的物理内存。因为文件系统空间没有用作虚拟 RAM 的临时存储空间的用途/要求,所以删除应用程序以加速其他应用程序是没有意义的。

以上是关于为啥 iPhone 应用程序这么慢?的主要内容,如果未能解决你的问题,请参考以下文章

为啥从相机缩小 UIImage 这么慢?

为啥videoview这么慢?

为啥我的haskell程序这么慢? Haskell 编程,人生游戏

为啥我的分拣程序这么慢? (java中的基数/桶排序)

与 LINQ 相比,为啥 Array.Sort() 这么慢?

为啥 Swift 编译时间这么慢?