特性调优

备考:有多百般好之稿子说拿shouldRasterize(光栅化)个人认为该按照电子版,PS里头专业术语来讲,个人知道。

非通晓有没有发小伙伴不精晓者字“栅”怎么读了,我特意百度了一下,有四种读法。

栅栏有六只读法:zhà,cè,shān,shi。

其二翔表明吗:

栅 [zhà]:用竹木铁条等做成的阻拦物:~栏。~子。


[shān]:1.〔~极〕多极电子管因阴极的一个电极。2.〔光~〕发生仅的衍射图像的光学仪器

栅 [shi]:〔上~〕〔下~〕地名,均在华湖南省。

栅格化(PS专业术语)

栅(shān)格化,是PS丁的一个专业术语,栅格即像素,栅格化即将矢量图形转化为各图(栅格图像)。最基础的栅格化算法将大半边形表示的老三维现象渲染及二维表面。

位图

瞧此位图术语比较茫然,然后我咨询了转我们店的UI,才明白这术语。

自身的知:图像尚未为栅格化此前任意放大,都无谋面失帧。而栅格化化之后要随着放大的翻番在添,失帧会随着倍数的增多而长。故:栅格化本身即是非凡成一个定位像从的图像。

1. 关于CALayer的shouldRasterize(栅格化)

@property BOOL shouldRasterize;

     When true, the layer is rendered as a bitmap in its local
coordinate  space (“rasterized”), then the bitmap is composited into the
destination (with the minificationFilter and magnificationFilter
 properties of the layer applied if the bitmap needs scaling).
Rasterization occurs after the layer’s filters and shadow effects are
applied, but before the opacity modulation. As an implementation  detail
the rendering engine may attempt to cache and reuse the bitmap from one
frame to the next. (Whether it does or not will have no affect on the
rendered output.) When false the layer is composited directly into the
destination whenever possible (however, certain features of the
compositing model may force rasterization, e.g. adding filters).
Defaults to NO. 

以阴影时又设置 shadowPath
就会防止离屏渲染大大进步性能,不过使用不当也会促成性能的淘。

CALayer 有一个 shouldRasterize 属性,将之特性设置成 true
后虽翻开了光栅化。开启shouldRasterize后,CALayer会被栅格化为bitmap,layer的影等效率啊会叫封存至bitmap中,光栅化后会师拿图层绘制到一个屏幕外之图像,然后是图像将碰面吃缓存起来连绘制到骨子里图层的
contents
和子图层,对于有成百上千之子图层或者发千丝万缕的功效使,这样做就是会比重绘有业务之拥有帧来更加便捷。但是光栅化原始图像需要时日,而且会消耗额外之内存。

因而:当大家被栅格化后,需要专注4点题材。

  1. 要是我们革新都栅格化的layer,会导致大量的offscreen渲染。

    因而CALayer的栅格化选项之拉开也需我们密切衡量拔取境况。只好用当图像内容未更换的前提下的:

            用于避免静态内容之错综复杂特效的重绘,例如前面说到的UIBlurEffect

            用于避免三个View嵌套的繁杂View的重绘。

    而对时常改变的情,这几个上不要被,否则会招性能的浪费。

譬如说我们日程时应酬的TableViewCell,因为TableViewCell的重绘是非凡频繁之(因为Cell的复用),要是Cell的情不断变动,则Cell需要不停重绘,假使这服装了cell.layer可栅格化。则会招致大量底offscreen渲染,降低图形性能。

理所当然,合理利用来说,是会得到广大属性的增强的,因为以shouldRasterize后layer会缓存为Bitmap位图,对有的填补加了shawdow等职能的耗费资源相比较多的静态内容举办缓存,可以拿走性的升官。

  1. 不要过分施用,系统限制了缓存的深浅也2.5X Screen Size.

    要是过于施用,超出缓存之后,同样会造成大量底offscreen渲染。

  1. 吃栅格化的图形尽管跨越100ms没有叫以,则会叫移除

    因而我们应只有针对连续不停下的图形展开缓存。对于不常使用的图样缓存是无意思,且耗费资源的。

  1. 当 UIView.layer.shouldRasterize = YES
    时,生成的位图会缓冲起来,假如TabelView 滑动的时段(UITableViewCell
    复用)使用缓存直接命中,就显示肉色,反之,假如不命中,这时便显得青色。黑色越多,性能更加差.

测试demo

贪图中起多少个好玩之地方

 1. 左右微小幅度滑动时,一贯是肉色

  1. 内外比充足幅面滑动,新面世的label一先导是红,随后成为红色

  2. 假如静止一分钟,刚开端滑动时谋面变红。

登时是以layer举办栅格化晚渲染成各样图在缓存中。当屏幕出现滑动时,大家一直由缓存中读取而不必渲染,所以会晤看到肉色。当新的label出现不时,缓存中一贯不单是label的位图,所以会化粉红色。第三碰相比较首要,缓存中之目的有效期只生100ms,即要以0.1s内无给采取就会晤自动从缓存中清理出来。这虽是为什么停留一会儿复滑动就汇合视黑色。

栅格化的缓存机制是如出一辙管双刃剑,先勾勒副缓存还念博有或吃相比较多的辰。因而栅格化光适用于比复杂的、静态的法力。通过Instrument的调试发现,这里以光栅化日常现身未命中缓存的情状,

小结:要是View的Frame和Content不常变化,开启shouldRasterize = YES
,反的则毫不开浪费性能,假诺TableView滑动
Cell使用位图则是青色,反的革命,肉色越多属性更好,黑色反之。

参考:

UI基特(Kit)性能调优实战讲解

怎么着正确地形容好一个界面

Mastering UIKit
Performance

What triggers “Color Copied Images” and “Color Hits Green and Misses
Red” in
Instruments?

WWDC
2014

相关文章