写点什么

加快 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:051474
用户头像

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

关注

评论

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

论Http、Socket、WebSocket、WebService(SOAP)之间的区别

Damon

5月日更

JavaScript+TensorFlow.js让你在视频中瞬间消失

不脱发的程序猿

JavaScript 人工智能 开源 TensorFlow.js

iOS开发底层原理技术~RAC深度解析

ios cocoa 程序员 移动开发

冈萨雷斯《数字图像处理》学习总结及感悟:第一章 绪论 百闻不如一见

老猿Python

图形图像处理 数字图像处理 冈萨雷斯

🚄【Redis 干货领域】从底层彻底吃透 AOF 重写 (源码篇)

码界西柚

redis aof Redis 协议 Redis 核心技术与实战 5月日更

详解JQuery框架的五大选择器

华为云开发者联盟

jquery 选择器 层级选择器 属性选择器 过滤选择器

支付中心设计

try catch

支付 支付中心

进程内缓存助你提高并发能力!

万俊峰Kevin

缓存 微服务 本地缓存 Go 语言

从酷睿双核到Tiger Lake-H,英特尔如何帮游戏笔记本完成蜕变

E科讯

看MindSpore加持下,如何「炼出」首个千亿参数中文预训练语言模型?

华为云开发者联盟

框架 mindspore 盘古 NLP 大模型 中文预训练模型

2、kafka 2.8.0 源码环境搭建

杨四正

大数据 kafka 消息队列 kafka2.8

架构实战营模块3课后作业-基于“自研集群+MySQL存储”的消息队列架构设计方案

吴建中

架构实战营

人人都在谈的图数据库到底是个啥?

华为云开发者联盟

大数据 数据结构 数据 图数据库 华为云图引擎图数据库GES

丰田汽车选用Mobileye和采埃孚的安全技术

E科讯

【LeetCode】找出第 K 大的异或坐标值Java题解

Albert

算法 LeetCode 5月日更

让人工智能成为保险行业科技基因的一部分!

百度大脑

人工智能 保险

NumPy之:ndarray多维数组操作

程序那些事

Python Numpy 程序那些事

如何成为云原生技术高阶玩家?华为云最近做了这件事

华为云开发者联盟

容器 DevOps 微服务 云原生 华为云

私有云解决方案

anyRTC开发者

音视频 WebRTC RTC sdk

前端实操案例丨如何实现JS向Vue传值

华为云开发者联盟

Vue 大前端 js Promise Vuex state

集成学习案例一 (幸福感预测)

容光

数据处理

HTTP/3 初体验

运维研习社

nginx 运维 HTTP3.0 5月日更

智能视频云3.0全景图来了!深度融合视频应用共创行业新生态

百度大脑

云智一体 智能视频 云智技术

飞桨前沿升级、顶级开源项目、产教融合育人,WAVE SUMMIT论坛内容先睹为快!

百度大脑

深度学习 飞桨

多线程 VS 多进程(一)

若尘

多线程 多进程 Python编程 5月日更

java性能分析与问题定位 实战

try catch

Java 性能分析

Rust从0到1-错误处理-panic!

rust 错误处理 Error 不可恢复错误

kafka基本概念

杨四正

大数据 kafka 架构设计 消息队列 消息队列架构

深入浅出分布式存储性能优化方案

焱融科技

云计算 分布式 高性能 云存储 超融合

DEMO WORLD分论坛聊些啥?高端制造、未来出行、皮肤科技、未来产业……

创业邦

创新

千万级学生管理系统考试试卷存储方案设计

Hesher

架构 Architecture 架构实战营 存储系统

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