您的位置:首页 > 其它

Flex 移动应用性能 之 快速优化

2014-11-19 09:17 357 查看
引用 sina blog http://blog.sina.com.cn/s/blog_6f56a2bf0101hmko.html
关于 Flex 移动应用的性能优化, 我把它总结为 快速优化 和深度优化, 此篇博文我只介绍 快速优化 这一块, 至于 深度优化 我以后有时间再考虑写吧.

以下是我个人开发经验的总结, 教你10招快速优化 Flex 移动应用:

1. 将 Flex SDK 和 AIR SDK 更新到最新, 建议通过 Flex SDK Installer 来下载它们:

http://flex.apache.org/installer.html

具体的安装教程, 请参见我以前
这篇博文 的第3部分 (搜关键词: 新手如何使用Flex), 注意那篇博文里用的都是旧版本的 Flex SDK 和 AIR SDK, 实际安装时务必全部选择当前最新版.

2. 安装好最新的 SDK 后, 记得更新所有你以前 AIR 项目 -app.xml 文件中的命名空间版本:

application xmlns="http://ns.adobe.com/air/application/13.0"

注意, 这里的 13.0 只是一个示例, 实际设置时应改为最新的 AIR 版本号, 与 步骤1 的版本对应.

3. 将所有 AIR 项目中 -app.xml 的 renderMode 标签设置为 direct

direct 渲染模式比默认的 auto 渲染模式快很多.

注意不要将渲染模式设置为 gpu, 因为 Flex 应用不大兼容此模式.

4. 将所有 AIR 项目中 -app.xml 的 requestedDisplayResolution 标签设置为 high

注意 requestedDisplayResolution
标签可能不只1个, 记得全部找到并启用(即反注释).

设置为 high 是为了适应配备了视网膜屏幕的设备(包括移动和桌面设备), 以便后期实现应用程序的 dpi 自动缩放.

5. 在 Flex 项目中, 将主应用程序 MXML 根标签的 frameRate (帧率)属性设置为 24 - 30, 推荐 30.

最低不要低于 24, 否则应用里的所有动画效果会没有连续感;

最高不要超过 30, 否则应用里的动画效果在播放时, 移动设备的 CPU 可能会受不了.

6. (注意, 此步骤仅适用于 Flex 移动应用, 不要在 桌面 或浏览器
应用上进行如下设置)

在 Flex 移动项目中, 将主应用程序 MXML 根标签的 applicationDPI 属性设置为 160 这个固定值, 程序的所有开发和大部分测试全部在标清电脑屏幕上进行(也就是现在常见物理像素密度为 96 dpi 的显示器了), 然后 runtimeDPIProvider 属性一定要设置为自己的实现类, 比如 runtimeDPIProvider="providers.SimpleRuntimeDPIProvider".

以下是我实现的 SimpleRuntimeDPIProvider 类的源代码, 只提供截图, 有心的程序员自己敲一遍, 浮躁的程序员请直接离开 : D



设置好 applicationDPI 和
runtimeDPIProvider 属性以后,
你的 Flex 移动应用就可以动态运行时自动缩放整体 UI 来适应所有主流的(但不是全部的) 手机 和 平板设备的屏幕, 如果你用的都是矢量素材, 那么缩放将不会失真.

在这个例子中

缩放的比率 =SimpleRuntimeDPIProvider的实例.runtimeDPI / 主应用程序的实例.applicationDPI

7. (注意, 此步骤仅适用于 iOS 平台的 Flex 移动应用, 不要在其它平台的应用里进行如下设置)

对于要运行在 iOS 平台的 Flex 移动项目, 其主应用程序 MXML 根标签上最好不要设置 splashScreenImage, splashScreenScaleMode 和 splashScreenMinimumDisplayTime 这些属性, 这会拖慢应用的启动速度, 推荐的方法是用 iOS 平台自己的启动画面机制, 即直接在 Flex 项目的 src 目录下放置下图中列出的1个或多个启动画面的图片文件:



有关 iOS 启动画面的详细使用说明, 请参见 Adobe 官方教程:
iOS 启动图像

8. 编写 Flex 移动应用时要注意, 减少不必要的渲染是首要目标, 内存回收只是其次, 这一点跟桌面平台恰好相反.

举个例子, 如果想做一个移动平台上用的列表组件, 那么正确的做法是:

列表的所有项目呈现器尽量在同一个渲染时机一起渲染, 而不要等一个项目呈现器渲染完了再接着渲染下一个, 同时限制列表里项目呈现器的总个数, 要学会分页显示, 比如规定列表1次最大只承载24个项目呈现器, 当用户滚动到列表尾部的时候, 先将列表头部的6-12个项目数据源删除, 再往列表尾部加入后面的6-12个项目数据源, 或者直接将24个项目数据源的内容进行平移更新(这种方法叫数据平移), 这样可以大大减少反复渲染项目呈现器的次数.

在移动平台上, 列表组件典型的错误做法是:

允许列表一次性承载几十个上百个甚至更多的项目呈现器, 不分页显示, 只将屏幕上当前能看到的项目呈现器进行渲染, 而将屏幕上当前看不到的项目呈现器进行内存回收, 这样一来当用户滚动列表的时候, 会出现频繁地创建和渲染新的项目呈现器, 并且频繁地移除和回收旧的项目呈现器, 这样做虽然节省了内存, 但是严重消耗了 CPU 的性能, 以至于列表滚动稍微快一点程序就会爆卡, 因此这种做法只适合桌面平台,
而不适合移动平台.

这也就是为什么我说移动平台在性能优化方面的考虑跟桌面平台刚好相反了, 在移动平台上减少不必要的渲染是最重要的, 而内存回收必须在不增加渲染负担的情况下进行!

9. 学会正确使用
cacheAsBitmap 和
opaqueBackground 等这些动态缓存位图的特性, 它们虽然会提高应用的内存消耗, 但可以有效减少对矢量图的反复渲染.

其关键点是, 这2个属性只适合在 需要频繁移动位置, 但不频繁改变自身宽高和子内容的显示, 自身宽高不是太大(宽高各不超过 500 px) 的矢量显示对象上, 比如在 项目呈现器 上常有必要用, 而不要在大型显示对象上用, 那样内存会耗尽, 应用反而会变慢甚至崩溃.

10. 导出发行版的最终应用, 即在 Flash Builder 里对项目进行 Export Release Build.

如果你要导出 Apple iOS 平台需要的 IPA 文件, 可用 AIR SDK 新的 iOS 打包引擎 ADT 来做, 这样可大大提高 IPA 文件的打包速度, 大大减少打包时间, 具体做法是:

在 Flash Builder 的 Export Release Build 窗口下点了 Next 按钮之后, 在下一个页面里点 Customize Launch... 按钮, 在弹出的窗口中点 Add Parameter... 按钮, 在 Name 一栏填入 -useLegacyAOT, 在 Value 一栏填入 no, 在 Place before 右边的下拉框中选中 -provisioning-profile,
如下图所示:



然后按下 OK 按钮保存, 接下来把证书和要打包的文件之类的都配置好, 按下 Finish 按钮后即可用新的 ADT 打包引擎开始打包 IPA 文件.

以上就是我教给大家的10招快速优化 Flex 移动应用性能的方法, 按上面的步骤做了以后, 你 Flex 移动应用的性能会有明显提升, 但也许还不足以达到产品级别, 要达到产品级别需要进行深入优化, 这个等哪天我心情好再写吧 : )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: