【问题标题】:Reducing iPhone App Start Up Time减少 iPhone 应用程序启动时间
【发布时间】:2011-05-12 21:59:21
【问题描述】:

我正在尝试调查我的应用的启动时间很长,并且可能需要一些帮助。启动大约需要 6-7 秒,这太长了。我没有加载任何数据集或任何东西,但该应用程序是一个计算器,所以我的 xib 确实有很多按钮和按钮图像。

我想使用 Instruments(或其他东西)来分析所有时间都花在了哪里,以便我可以优化,但 Instruments 的文档并没有真正告诉我如何使用它的细节针对这个特定问题和/或如何解释结果。

您对如何测试有什么建议吗?指向有关如何为此使用 Instruments 的教程的指针? iTunes U 视频或其他内容?

欢迎提出任何建议!

肯尼

【问题讨论】:

  • 只是提醒那些有兴趣回答的人,我不是专门寻找为什么它很慢,我正在寻找一个建议,我可以在哪里学习使用像 Instruments 这样的分析工具来帮我找出原因。我正在寻找钓鱼手册,而不是鱼。 :)
  • 您已经有一段时间没有问过了……您可能已经解决了那个特定的问题。也许你能提供你自己的答案?
  • 我从来没有找到关于在哪里学习关于使用分析工具来识别减速的好答案。我将在下面添加一个答案,描述我最终如何缩短应用的启动时间。

标签: iphone objective-c profiling startup instruments


【解决方案1】:

这里有几个建议:

  • 您需要一次加载所有这些按钮吗?
  • 您是否(过度)在图像中使用透明胶片?
  • 图像的大小是否与要求的准确一致?拉伸(调整大小)需要时间来计算
  • 您是否执行了阻塞主线程的任何操作?

【讨论】:

  • 我已经尝试移除所有按钮,但它只比开始时间缩短了大约 1 秒。我相信我已经尝试了所有明显的潜在减速,但我没有找到罪魁祸首。这就是为什么我不是在寻找错误的建议,而是在寻找可以学习如何进行分析的指针,以便我可以正确调查并找出减速发生的地方。
  • 回答你所有的问题。不,我不需要前面的所有按钮,但即使我加载 0 个按钮,启动仍然需要 5-6 秒。按钮图像上确实有透明胶片,但我已将它们从加载中删除。没有其他透明图像。所有涉及的图像均以其原始大小使用,无需调整大小。没有操作阻塞主线程。我确实在后台生成了一个任务,但我已经验证它没有阻塞主线程,我也只是简单地将它注释掉以删除问题。无按钮剃须 1 秒。其他的,没什么明显的。
【解决方案2】:

在执行上述任何建议之前:

这是从 XCode 运行时的 6-7 秒吗?还是直接在 iPhone 上点击开始?

调试器和仪器在这里帮不上什么忙,因为它们只会增加开销,而且在分析方面也无济于事,因为它会毒害您将看到的数据。

编辑:

在分析工具方面,您可能想考虑使用 Shark: http://www.switchonthecode.com/tutorials/using-shark-to-performance-tune-your-iphone-app

一般来说使用起来非常简单。这有点不言自明。

【讨论】:

  • 不,这是手机启动的 6-7 秒。没有调试器,没有 xcode 等。我知道分析器会增加开销,但它们对于查找瓶颈等仍然非常有用。
【解决方案3】:

我会在您的实际设备(调试器已断开连接)上测量一个空的虚拟应用程序(可能是基于 XCode Window 的应用程序模板)的启动时间。然后开始将您的应用程序中的初始化代码、视图和对象添加到这个虚拟应用程序中,直到您找到最会减慢启动时间的原因。

【讨论】:

    【解决方案4】:

    Palimondo 询问我最终是如何解决我的问题的……这是一堆小改动,我不确定节省的钱花在哪里,我将在下面解释原因。

    我的应用是一个计算器,所以它有很多按钮。起初我以为一定是按钮加载导致了问题,但正如我在上面的 cmets 中向 Paul 解释的那样,即使我加载了 0 个按钮,启动时间也只缩短了 1 秒。在更改了许多小东西之后,我能够节省 3 秒的启动时间,这已经足够了。

    我有一个背景图像,它是一个很好的纹理渐变图像。我减小了它的文件大小(改变了纹理,用不同的选项导出它)。

    我从预先加载 100 个按钮(它是一个计算器)到加载大约 15 个按钮,但试图以一种秘密的方式进行,这样用户就不会注意到。无论如何,大约有 50 个按钮在启动时是不可见的,因为您必须点击 Shift 按钮才能看到它们,因此它们很容易延迟加载。其他是可见的,但我认为用户不会在启动时点击其中的大多数,因为他们需要先点击一些数字。所以我把所有的数字键盘按钮和清除按钮留在了 xib 中,所以它们在启动时加载,但从 xib 中删除了其他所有内容。

    这让我在屏幕上留下了一个很大的空白区域,当我懒加载它们时,您实际上可以看到填充空白区域的按钮(填充非常快,但是您可以看到空白区域,然后所有按钮都出现了) .所以我更新了背景渐变图形以包含按钮的图像。按钮似乎在那里,但实际上并不存在,因此除非用户在 2 秒内点击一个假按钮,否则他们永远不会注意到问题......通常他们只是尝试再次点击该按钮,到那时它通常已经延迟加载,因此可以工作。

    【讨论】:

      猜你喜欢
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 2017-12-02
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      相关资源
      最近更新 更多