About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jan

    21

    测试结果:如果需要对位图进行添加、缩放等操作,beginBitmapFill() 速度远大于draw() +addChild() 方法。使用 beginBitmapFill() 不会产生事件,所以不会有事件对象产生以及事件冒泡过程;并且对 beginBitmapFill() 和 draw() 方法使用相同的 Matrix 矩阵变形时,小图测试 beginBitmapFill() 速度将近是 draw() 方法的10倍左右(0.03 毫秒左右相对 0.3 毫秒左右)。并且随着图片尺寸的增大和颜色数量的增加,发现 draw()  的速度下降非常快(时间延迟明显不断变长),但 beginBitmapFill() 速度下降较慢。

    但在使用 beginBitmapFill() 时需要注意以下几点: 

    1、如果可能,尽量在使用 beginBitmapFill() 之前调用 clear() 方法,否则它也将会保留前面的绘图过程(既便是像素完全重叠,它也会保留前面所有绘图的数据),最终也会导致严重的性能问题。

    2、对外加载的图像或嵌入的图像而言,使用 beginBitmapFill() 方法后,位图对象被移除(Bitmap 对象引用如果被设置为null),BitmapData 对象的数据本身并不会被移除。如果强制调用 dispose() 方法来释放位图数据所占用的内存,那么也将丢失 beginBitmapFill() 方法已经填充的像素信息;如果需要为内存考虑,如果在可以放弃一定效率的情况下,使用 draw() 方法生成一个较小的 BitmapData 来保存图像信息,否则只能牺牲一点内存来保存图像数据。

    3、嵌入的位图最佳方式是原始库元件的形式;慎用二进制嵌入方式,因为二进制库元件加载是异步的,并且二进制解码也将会损耗一定的时间和性能。

    以上内容只针对 Adobe AIR 移动开发中添加对象、缩放对象时对性能、速度、内存等有较高要求的情况做了测试。