美文网首页
性能优化面试题-中级

性能优化面试题-中级

作者: kadis | 来源:发表于2021-07-03 09:27 被阅读0次

中级

1、重用和延迟加载(lazy load) Views

 更多的 view 意味着更多的渲染,也就是更多的 CPU 和内存消耗,对于那种嵌套了很多 view 在

UIScrollView 里边的 app 更是如此。

 这里我们用到的技巧就是模仿 UITableView 和 UICollectionView 的操作: 不要一次创建所有的 subview,

而是当需要时才创建,当它们完成了使命,把他们放进一个可重用的队列中。这样的话你就只需要在

滚动发生时创建你的 views,避免了不划算的内存分配。

2、Cache, Cache, 还是 Cache!

 一个极好的原则就是,缓存所需要的,也就是那些不大可能改变但是需要经常读取的东西。

 我们能缓存些什么呢?一些选项是,远端服务器的响应,图片,甚至计算结果,比如 UITableView 的

行高。

 NSCache 和 NSDictionary 类似,不同的是系统回收内存的时候它会自动删掉它的内容。

3、权衡渲染方法.性能能还是要 bundle 保持合适的大小。

4、处理内存警告.移除对缓存,图片 object 和其他一些可以重创建的 objects 的 strong references.

5、重用大开销对象

6、一些 objects 的初始化很慢,比如 NSDateFormatter 和 NSCalendar。然而,你又不可避免地需要使用它们,

比如从 JSON 或者 XML 中解析数据。想要避免使用这个对象的瓶颈你就需要重用他们,可以通过添加属性

到你的 class 里或者创建静态变量来实现。

7、避免反复处理数据.在服务器端和客户端使用相同的数据结构很重要。

8、选择正确的数据格式.解析 JSON 会比 XML 更快一些,JSON 也通常更小更便于传输。从 iOS5 起有了官方

内建的 JSON deserialization 就更加方便使用了。但是 XML 也有 XML 的好处,比如使用 SAX 来解析 XML 就

像解析本地文件一样,你不需像解析 json 一样等到整个文档下载完成才开始解析。当你处理很大的数据的

时候就会极大地减低内存消耗和增加性能。

9、正确设定背景图片

 全屏背景图,在 view 中添加一个 UIImageView 作为一个子 View

 只是某个小的 view 的背景图,你就需要用 UIColor 的 colorWithPatternImage 来做了,它会更快地渲染

也不会花费很多内存:10、减少使用 Web 特性。想要更高的性能你就要调整下你的 HTML 了。第一件要做的事就是尽可能移除不

必要的 javascript,避免使用过大的框架。能只用原生 js 就更好了。尽可能异步加载例如用户行为统计 script

这种不影响页面表达的 javascript。注意你使用的图片,保证图片的符合你使用的大小。

11、Shadow Path 。CoreAnimation 不得不先在后台得出你的图形并加好阴影然后才渲染,这开销是很大的。

使用 shadowPath 的话就避免了这个问题。使用 shadow path 的话 iOS 就不必每次都计算如何渲染,它使用

一个预先计算好的路径。但问题是自己计算 path 的话可能在某些 View 中比较困难,且每当 view 的 frame

变化的时候你都需要去 update shadow path.

12、优化 Table View

 正确使用 reuseIdentifier 来重用 cells

 尽量使所有的 view opaque,包括 cell 自身

 避免渐变,图片缩放,后台选人

 缓存行高

 如果 cell 内现实的内容来自 web,使用异步加载,缓存请求结果

 使用 shadowPath 来画阴影

 减少 subviews 的数量

 尽量不适用 cellForRowAtIndexPath:,如果你需要用到它,只用-一次然后缓存结果

 使用正确的数据结构来存储数据

 使用 rowHeight, sectionFooterHeight 和 sectionHeaderHeight 来设定固定的高,不要请求 delegate

13、选择正确的数据存储选项

 NSUserDefaults 的问题是什么?虽然它很 nice 也很便捷,但是它只适用于小数据,比如一些简单的布

尔型的设置选项,再大点你就要考虑其它方式了

 XML 这种结构化档案呢?总体来说,你需要读取整个文件到内存里去解析,这样是很不经济的。使用

SAX 又是一个很麻烦的事情。

 NSCoding?不幸的是,它也需要读写文件,所以也有以上问题。

 在这种应用场景下,使用 SQLite 或者 Core Data 比较好。使用这些技术你用特定的查询语句就能只加

载你需要的对象。

 在性能层面来讲,SQLite 和 Core Data 是很相似的。他们的不同在于具体使用方法。

 Core Data 代表一个对象的 graph model,但 SQLite 就是一个 DBMS。

 Apple 在一般情况下建议使用 Core Data,但是如果你有理由不使用它,那么就去使用更加底层的 SQLite

吧。

 如果你使用 SQLite,你可以用 FMDB 这个库来简化 SQLite 的操作,这样你就不用花很多经历了解 SQLite

相关文章

  • UITableView性能优化-中级篇

    UITableView性能优化-中级篇 UITableView性能优化-中级篇

  • 性能优化面试题-中级

    中级 1、重用和延迟加载(lazy load) Views  更多的 view 意味着更多的渲染,也就是更多的 ...

  • 2022年web前端面试题

    web前端面试题分为:html/css面试题、javascript面试题、vue面试题、性能优化面试题、网络方面面...

  • 第七周-前端性能优化(一)

    如何进行网站性能优化? 收集的前端面试题和答案Yahoo, Google 加载性能优化 图片 不同格式的特点:pn...

  • 2019 iOS面试题大全---全方面剖析面试(上)

    2018 iOS面试题---UI相关:事件传递,图像显示,性能优化,离屏渲染 2018 iOS面试题---Obje...

  • 2019 iOS面试题大全

    1、2018 iOS面试题---UI相关:事件传递,图像显示,性能优化,离屏渲染 2、2018 iOS面试题---...

  • 2019 全方位直击iOS面试

    1、2018 iOS面试题---UI相关:事件传递,图像显示,性能优化,离屏渲染 2、2018 iOS面试题---...

  • iOS性能优化(中级)

    欲知前事如何,且看上回分解: iOS性能优化(初级) 小试牛刀 通过对性能初级优化秘籍一段时间的练习,少侠应该对性...

  • iOS 面试题

    2020年iOS大厂面试题总结(一) 2020年iOS大厂面试题总结(二) iOS面试,简述性能优化 阿里字节搞笑...

  • UITableView性能优化-中级篇

    老实说,UITableView性能优化 这个话题,最经常遇到的还是在面试中,常见的回答例如: Cell复用机制 C...

网友评论

      本文标题:性能优化面试题-中级

      本文链接:https://www.haomeiwen.com/subject/qbjuultx.html