分类: 系统运维
2011-03-11 16:49:49
提起 Flex 我们不得不追述其发展历史以及两个很重要的名词或者说技术,那就是 Flash 和 Flash Player。Flash 是 Adobe 推出的基于时间轴的交互式矢量图和 Web 动画的标准。一般被大量应用于互联网网页的矢量动画设计。而 Flash Player,则是运行 Flash 程序的播放器,特别是 flash player 9 之后,他通过 Action Script 3.0 和新一代的虚拟机 AVM2 带来了更加强大的运行时功能。下面我们就来简单类比和对比下这三者之间的关系,从而得出 Flex 的本质到底是什么。
Flex 和 Flash 程序有很多相同点:他们都基于 Action Script 语言;并且都会被编译成一个 .swf 文件。Flash Player 是运行 Flash 和 Flex 应用的播放器或者说运行时环境。他通过读取 swf 文件里的二进制内容同 Flex 或者 Flash 应用进行交互,从而来指示他们执行某些操作,比如说加载图片,绘制图形,发送 HTTP 请求等等。Flash Player 提供了所有可以执行的操作的 API,而 Flash 和 Flex 应用只能够做 Flash Player 允许他们做的事情。所以 Flash player 环境是 Flex 和 Flash 应用开发的基础,Flex 的很多类都是 Flash player API 的子类。
Flex 和 Flash 应用都运行在相同的 Flash Player 里,具有着同样的用户体验。因为无论哪种应用程序,他们都只包含指令,需要由 Flash Player 来执行这些指令。所以,Flash 和 Flex 程序的区别并不是内容不同,而是他们创建内容的方式不同。
基于以上阐述,我们知道了 Flex 程序的本质就是 Flash,他是面相程序员的 Flash 变种。Flex 程序的根 mx.managers.SystemManager 就是 Flash 类 flash.display.MovieClip 的扩展。所以,Flex 也可以说成是基于时间轴的,只不过他在时间轴上的帧只有两帧:第一帧是预加载,由 Flex 框架控制,也就是我们在 Application 运行之初看到的进度条,被称之为 Preloader( 如图 1 所示 );第二帧,就是我们真正的应用程序。了解这点对于我们理解 flex 组件的生命周期至关重要,因为帧的执行模式有一个重要的特点,那就是在一帧中会先执行脚本后渲染屏幕,即通常称为的 Elastic Racetrack 模型(如图 2 所示)。 这个模型预示着过长的代码执行会影响屏幕渲染的用户体验。Flex 组件构建在帧模型基础上的,需要同样遵行帧的这种执行模式。