我怎样才能提高性能

Posted

技术标签:

【中文标题】我怎样才能提高性能【英文标题】:How can I increase performance 【发布时间】:2018-01-06 12:49:32 【问题描述】:

我的应用有一个基本上由复杂网格组成的视图。大约有 1400 个子视图。在“现代”设备上,到此视图的过渡相当顺利 - 如果您正在寻找它,您会注意到略有延迟。 在 iPhone 6 等“旧设备”上,延迟更为明显。加载屏幕大约需要一两秒钟。

我之前用UIStackViews组织UIViews,但是太慢了。现代设备需要大约 1 秒,而较旧的设备则需要 5 秒左右。我将整个布局更改为仅使用常规的旧布局约束以达到上述速度。

视图和约束都在代码中实现 - 这里没有故事板。我没有收到任何警告或错误。视图基本上只包含具有不同背景的视图本身和偶尔的标签 - 没有像图像或其他渲染密集对象那样花哨的东西。

我还尝试将视觉格式NSLayoutConstraints 的数量减少到最低限度。

有没有办法让我测试哪些对象/视图/约束在渲染上花费的时间最多?我尝试使用时间分析器,但无法检测到任何缓慢的进程。或者这基本上只是这么多物品的包袱?

感谢您提供有关我可以查看的位置的任何提示 - 约瑟夫

【问题讨论】:

1400 个子视图很多。您能否提供有关您要实现的目标的更多信息。为什么你需要接近 1400 个子视图的东西? 是的,很遗憾。它就像一张彩色盒子的桌子(盒子里的盒子)。大约一半是实际的信息框(不能省略那些)。然后是我必须创建的人造边框(UIViews,1px 或 2px 宽度限制在特定边上),因为我需要在某些框上具有不同宽度的部分边框。其余的都是标签。 这 1400 个子视图是否都同时可见(它们有多小)?如果没有,您是否考虑过 UICollectionView。 所有时间都可见,并且一次可见 - 没有滚动或任何东西。在 iPhone 6 上,较小的框大约为 10x10 像素。它们显然不是用来点击的 - 更多的是信息的视觉显示 您能否使用一个带有自定义绘图代码的 UIView 子类或类似的方法。 【参考方案1】:

自动布局很昂贵。您无法将它用于如此复杂的视图。 所以不要使用自动布局。不要使用约束。

以编程方式执行所有布局代码 - (void)viewDidLayoutSubviews (记得叫super) 设置视图的框架。

如果您不需要滚动、交互或旋转支持,您可以考虑将所有 UI 绘制到位图中,并仅显示位图。这是最快的方法。

【讨论】:

以上是关于我怎样才能提高性能的主要内容,如果未能解决你的问题,请参考以下文章

Recursion Recursion Recursion --- 我怎样才能提高性能? (Python存档递归提取)

电脑日志是干啥的,怎样设置才能提高机子的性能和运行速度?谢谢。。

如何提高 CGContextFillRect 和 CGContextDrawImage 性能

cxf怎样提高webservice性能,及访问速度调优

提高使用 CreateDocumentQuery 和 ExecuteNextAsync 时的性能

一文读懂ADAMoracle如何提高数据的安全性能