写点什么

加快 Flex 应用启动速度的 5 种方式

  • 2008-05-31
  • 本文字数:1286 字

    阅读完需:约 4 分钟

Jun Heider 在 O’Reilly 的 InsideRIA 站点上发表了一篇精彩的文章,该文章就如何加快 Flex 应用的启动速度提出了很多建议,以帮助用户减少看见讨厌的“Loading”对话框的出现时间。他深入探讨了问题的不同方面,并对每种技术的优势和劣势进行了评判。

  1. 从外部加载媒体(Media)
    Heider 提到了一个常用的 Flex 最佳实践——限制嵌入到应用 /SWF 文件中的媒体的数量,如图像、影片及 mp3 等资源都可以从外部的 SWF 文件加载。

Flex 框架可以直接将图片、mp3 及字体等资源编译到 SWF 中。当你想让最终用户获得全部资源时,这种方式确实能派上用场,但是这会导致你的应用长时间停留在“Loading”阶段。

  1. 在嵌入式字体中限制字符集
    Heider 建议在嵌入式字体中限制字符集以降低 SWF 文件的总下载时间:

当你在 Flex 中嵌入一种字体时,你就会获得该字体的全部字符的支持。尽管这可能是你想要的,但你确信你需要全部字符么?例如,在一个只面向英文的应用中,你确信你真的想花时间下载中文字符数据么?

  1. 缓存框架
    Heider 回顾了 Flex 3 support for runtime-shared-libraries (RSL)这篇文章:

从 Flex 3 开始,你可以将 Adobe 签名的框架——RSLs 缓存到 Flash Player 的 cache 中。这有两个好处。首先,缓存在 Flash Player cache 中的签名的框架 RSLs 可由所有配置好的 Flex 应用共享。换句话说,如果某人的应用已经下载了 500k 的签名的框架 RSL,并且该 RSL 仍旧 在 Flash Player cache 中,那么你的应用就可以使用缓存下来的 RSL。其次,即使某人清空了其浏览器缓存,对 Flash Player cache 也没有任何影响。

  1. 考虑模块化
    Heider 谈到了将 Flex 应用划分成模块的好处: > 减少字体加载时间的另一种方式就是将你的 Flex 应用划分成模块。使用模块的一个好处在于当加载和卸载模块时你能完全操控它。…

之所以要划分成模块的最后一个原因是他们更快,而且我能即时加载它们。换句话说,在启动时唯一需要加载的模块就是 Step1.swf 模块。因此,在使用模块的情况下,最终用户节省了启动时间,但是当他从一个模块切换到另一个模块时却需要花更多时间,因为每个模块都需 要以 JIT 形式加载。在我的应用中,只有当用户首次在 steps 1-5 之间切换时需要花更多时间。

  1. 推迟实例化
    Heider 围绕着 Flex 组件的“creationPolicy”属性及何时实例化应用的不同部分给出了很多建议。

如果你想减少从数据下载到用户真正可以使用的总时间,当务之急就是推迟实例化。这项技术背后的理念就是直到应用真正使用的时候才在内存中创建对象。尽管推迟实例化技术会在应用的整个使用过程中导致少许——通常不那么明显——的延迟,但与长时间的启动延迟相比,它还是可接受的。推迟实例化的另一个好处在于内存使用的优化。

Heider 还谈到了一个“实验性”的条款——“使用流”,这是他在讨论 Dirk Eismann 的帖子(Building monolithic Flex SWFs that still startup quickly.”)时谈及的。Eismann 提出一项技术以利用 Flash Player 中的多个 frames 以在部分应用中达到流的目的。查看所有的帖子以更多地了解该技术及关于加快Flex 启动速度的建议。

查看英文原文: Top 5 Ways to Reduce Flex Application Startup Time

2008-05-31 21:051338
用户头像

发布了 88 篇内容, 共 262.6 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

车联网移动场景MQTT通信优化实践

EMQ映云科技

车联网 物联网 IoT mqtt 10月月更

Kyligence 当选 Gartner 2022 中国数据管理 Cool Vendor

Kyligence

Gartner 数据管理

深入nodejs的event-loop

coder2028

node.js

一文梳理2048小游戏从开发到上云全流程

华为云开发者联盟

云计算 游戏开发 华为云 企业号十月 PK 榜 2048小游戏

【文本检测与识别白皮书】第三章-第三节:算法模型

合合技术团队

人工智能 深度学习 文字识别 文本

Nodejs:ESModule和commonjs,傻傻分不清

coder2028

node.js

钛媒体 | 发布PaaS平台2.0,元年科技通过自主技术撬起更大市场

元年技术洞察

媒体 PaaS

为了讲明白继承和super、this关键字,群主发了20块钱群红包

华为云开发者联盟

开发 华为云 企业号十月 PK 榜 发红包

千万级高并发秒杀系统设计套路!超详细解读~~

博文视点Broadview

新来个技术总监,仅花2小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!

小小怪下士

Java 程序员 多线程

TiCDC 实践:TiDB 到 TiDB 增量数据迁移

TiDB 社区干货传送门

迁移

Docker | 镜像浅析,以及制作自己的镜像

甜点cc

Docker tomcat 10月月更

从零到一搭建一个属于自己的博客系统(弌)

木偶

django 前端 10月月更

面试官:你说说JavaScript中类型的转换机制

CoderBin

JavaScript 面试 前端 类型转换 10月月更

从P5~P8!最适合在职Java程序员学习提升路线大公开!

Java永远的神

程序人生 后端 架构师 java程序员 Java学习路线

零信任时代安全沙箱成为企业应用必需品

FinClip

数据中台的前世今生(一):数据仓库——数据应用需求的涌现

雨果

数据中台 数据仓库

“程”风破浪的开发者|什么是web3.0,一文带你搞懂它

共饮一杯无

前沿技术 Web3.0 10月月更 “程”风破浪的开发者

多版本并行,测试如何做好质量保障?

老张

质量保障 版本迭代

深入浅出--Linux基础命令知识(总结,配图文解释)

木偶

Linux ubuntu 10月月更

银斯微推出跨平台APP生成、发布Non-Stop云服务“W-Hive”

科技热闻

【LeetCode】无法吃午餐的学生数量Java题解

Albert

算法 LeetCode 10月月更

企业架构-了解分布式

Marvin Ma

企业架构 分布式系统 凤凰架构 书籍拆解

建木v2.5.7发布

Jianmu

DevOps 持续集成 CI/CD 自动化运维

TiDB v6.1.0 及 TiUniManager 在 openEuler 22.03 中的部署踩坑实践

TiDB 社区干货传送门

实践案例 管理与运维 安装 & 部署 应用适配 6.x 实践

Rocksdb dynamic-level-bytes测试简单记录

TiDB 社区干货传送门

实践案例 管理与运维

如何定义LED显示屏与OLED显示屏

Dylan

LED LED显示屏 OLED

Java中的抽象类详解

共饮一杯无

Java 抽象类 10月月更

细说nodejs的path模块

coder2028

node.js

koa实战

coder2028

node.js

OpenHarmony轻量系统中内核资源主要管理方式

OpenHarmony开发者

OpenHarmony

加快Flex应用启动速度的5种方式_Java_Jon Rose_InfoQ精选文章