爱思助手

iOS 10更快了!看看苹果是如何做的

  我们即将在 iOS 10 上迎来大量的变化,诸如 iMessage 这样苹果重点提到的内容肯定是能赢得最多的关注了,但还有一些并没有摆在台面上的改进却值得注意,尤其是新系统中应用运行更加快速流畅这个变化。那么苹果是如何做到的呢?

iOS 10更快了!看看苹果是如何做的



  如果要用最简单的语言来说明其中的奥妙所在,可以这么理解:新的 API 将能够稍微提前一点点去加载你即将看到的内容,而不再是当你进行滚动操作的时候,内容才开始加载。

  不少应用都有大量所谓的“区块”,或者说数据集合。以前当你快速向下划动应用页面时,可能会注意到应用在试图跟上你的操作时会有卡顿。这种丢帧现象会让应用的性能表现看上去比它应有的水准更坏。

  在 WWDC 大会的其中一个环节中,苹果特意提到了这些丢帧现象的原因,那就是应用得在内容进入屏幕区域之后才开始加载,即使加载速度不过是毫秒之间,都会让你注意到有明显的卡顿出现。

  在 iOS 10 中,苹果将会让那些“区块”在你进行滚动操作时提前加载,确保内容进入屏幕时已经被加载完毕,滚动时的性能影响和加载时间是不会被注意到的。苹果表示 60 帧每秒是最理想的,但是应用达不到这个目标也是常事。

  至于加载时间要提前多少的问题,苹果称它的测试已经表明应用的滚动性能是能够停留在 60 帧的安全区的。

  这种理念被称为“数据预提取”,而且能够进行反向工作。那些滑出你的屏幕的“区块”较之以前会被保留更长的时间,以免你突然想要再回头看看刚才漏掉的内容。这样一来,再往上滚动仍然能有流畅的体验。

iOS 10更快了!看看苹果是如何做的



  另外苹果还改变了应用访问数据的方式。新的 API 仍旧采用异步的方式访问数据,但调用更快了。尽管苹果希望将这个新设计用于 Core Data,它也适用于开发者采用的任何解决方案。

  在这方面上,诸如 Realm 这样的数据库方案对于移动应用来说更好一些,速度上比 Core Data 或 SQLite 更快。苹果自家的载入方案终于赶上来了。

  新 API 在后台队列中载入数据,因此这并不影响主线程。它也能够自适应基于滚动操作的性能表现,因此数据载入能够跟得上你让“区块”加载的操作。

iOS 10更快了!看看苹果是如何做的



  如果你更想知道的是那些有着多排内容的应用,不用担心,苹果在加载这一类的“区块”上也做出了重大的改进。

  目前应用会一次性加载整排的内容。比如采用单排设计的应用,当你快速滚动内容时会出现卡顿。如果是拥有多排内容的应用,它就会像多米诺骨牌一样,从左至右来加载那些“区块”。

  这样一来,那些内容更复杂的应用也能得到和简单应用相当的性能表现,而且不需要开发者进行额外的更新工作。苹果指出这种新方案最适用于那些拥有相似尺寸的“区块”,不过这种设计不是必须的。

iOS 10更快了!看看苹果是如何做的



  如果某个应用是以页面或是平板视图来显示内容的,那就一点问题都没有了。苹果全新的渲染 API 很适合这类应用,在你滚动内容时根本不会注意到有任何拖慢的载入时间。

  最有趣的地方在于,开发者真的不需要为此做任何事情。所有的变化都在后端已有的 API 中完成了。只要应用兼容 iOS 10,应用就会运行得更加快速和顺畅,至少苹果是这么说的。

  如果某个开发者不喜欢这样的设计,尽管不清楚他为什么要抛弃这么好的新方案,但他可以通过一行简单的代码回到过去的状态。

  苹果的后端小魔术让应用一下子变得更快了,这能够让用户感到它们变得更好了。开发者不费劲,用户们很开心,这还真是一次皆大欢喜的局面。