亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

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

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

关注

评论

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

数字货币视域下的金融安全实现路径

CECBC

区块链 数字货币

原创 | 使用JPA实现DDD持久化-O/R阻抗失配(2/2)

编程道与术

Java hibernate DDD JDBC jpa

看看别人是怎么面试蚂蚁金服的!社招Java面经分享

Java架构师迁哥

Java 阿里巴巴 面试 蚂蚁金服

一次注定失败的裸面

escray

ruby 程序员 面试 面经

打造一个全功能的浏览器

Daniel

致谢!华为全联接2020精彩回顾

华为云开发者联盟

华为 华为云 智能 hdc

信息公交服务在滴滴的应用实践

滴滴技术

滴滴技术 人工只能 信息公交 路径优化

原创 | 使用JPA实现DDD持久化-JPA,Hibernate与Spring Data JPA

编程道与术

Java hibernate Spring C Data jpa

为什么90%的“码农”做不了软件“架构师”?

Java架构师迁哥

Java 学习 架构师

倒计时!Pulsar Summit Asia 2020 演讲征集

Apache Pulsar

开源 云原生 pulsar Apache Pulsar 消息中间件

原创视频 | 架构漫谈—如何创造复杂而有序的软件系统【含课件下载】

编程道与术

Java 编程 架构 软件开发 软件架构

揭开500亿“区块链”骗局

CECBC

法律 传销

2020面试阿里字节跳动90%被问到的JVM面试题附答案

Java架构师迁哥

为什么推广ipv6以及网站ipv6改造基本步骤

MySQL从删库到跑路

Web IP 网络

你在开发过程中使用Git Rebase还是Git Merge?

华为云开发者联盟

git 华为 管理 代码

第二周-命题作业

莫森

极客大学架构师训练营

jdk 源码系列之StringBuilder、StringBuffer

sinsy

Java jdk 源码解析

架构师训练营第三周作业

文智

极客大学架构师训练营

一篇文章搞定 Nginx 反向代理与负载均衡

哈喽沃德先生

nginx 负载均衡 反向代理 服务器 正向代理与反向代理

华为云推出全自研数据库,GaussDB(openGauss)能否撑起一片天?

华为云开发者联盟

数据库 数据 gauss db

线段树(Segment Tree)

zayfen

算法 线段树 segment tree

第二周-学习总结-框架设计原则

莫森

极客大学架构师训练营

原创 | 使用JPA实现DDD持久化-JPA vs MyBatis

编程道与术

Java hibernate 编程 mybatis jpa

10多家公司的Java开发面试常见问题合集

Java架构师迁哥

区块链带来的技术创新和变革

CECBC

区块链技术 经济

架构师第一期作业(第三周)

Cheer

作业

架构师训练营第三周学习总结

邓昀垚

极客大学架构师训练营

原创 | 正确区分属性和字段

编程道与术

Java hibernate 编程 软件开发 jpa

LeetCode题解:641. 设计循环双端队列,使用双向链表,JavaScript,详细注释

Lee Chen

大前端 LeetCode

手把手教你:将 ClickHouse 集群迁至云上

腾讯云大数据

大数据 Clickhouse

StreamNative 宣布开源 MoP:Apache Pulsar 支持原生 MQTT 协议

Apache Pulsar

开源 云原生 mqtt Apache Pulsar 消息中间件

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