[转]Flex的一些基本概念和原理 博客分类: Flex flex概念原理
- Java是一个大概念,它可以表示一种编程语言,和一个程序运行的平台(包括基本类库和虚拟机);Flash也是这样的一个大概念,它可以表示一种编程语言(ActionScript),和一个程序运行的平台(必须运行在浏览器中的Flash Player和可以独立运行的Flash Air);
- Swing是用Java语言开发的一个开发包,可以帮助我们开发在浏览器中运行的程序(Applet),也可以开发桌面程序,Flex是ActionScript语言的一个开发包,可以帮助我们开发在浏览器中和在桌面运行的Flash程序;
- Java源程序.java,编译为字节码文件.class;Flex源程序.as,编译为字节码文件.swf。
- Flash Player的基本结构
Flash Player包含4个主要部分:
1. 媒体播放器
媒体播放器负责渲染和绘画矢量图形、生成文本并处理文本布局、播放和处理音频和视频。
2. 虚拟机
ActionScript生成的二进制SWF代码,通过虚拟机执行,并置入Flash的显示列表(Display List)中,进行渲染和显示。
3. 网络通讯层
Flash Player通过网络通讯组件实现基于HTTP和HTTPS的网络数据通讯和SOCKET通讯。
4. 平台基础层
大多数情况下,Flash Player作为插件被内嵌于浏览器中(如下图),平台基础层保证Flash Player能够集成于宿主环境,处理类似授权、网络代理等与宿主平台相关的事情。
- Flash 虚拟机
JRE(Java Runtime Environment)是编译和运行Java程序所必须的环境的集合,包含Java虚拟机、Java平台核心类和支持文件。CLR(Common Language Runtime)是微软.NET框架的虚拟机,用于编译并执行C#等语言代码。
Flex世界,ActionScript虚拟机(简称AVM)扮演着JRE和CLR的角色。
Flash Player 9包含了两个AVM:向下兼容的AVM1和新的、高度优化的AVM2。
AVM1负责执行旧版 ActionScript(ActionScript 1和ActionScript 2),以便保持与现有内容的向后兼容。
AVM2针对下一代 ActionScript 3.0的应用从头开始设计,可提供满足丰富互联网应用程序开发人员需要的性能和功能。
AVM2是从Flash Player 9开始内置其中的全新ActionScript 3.0语言引擎,是最新的ActionScript虚拟机。针对新一代的ActionScript 3.0语言,Adobe重写了ActionScript虚拟机。新的虚拟机为RIA应用的开发者提供了更好的性能和更丰富的特性。AVM2 支持运行时错误报告、内置的调试和二进制套接字支持,使开发人员能够扩展Flash Player,与任何二进制协议一起使用。
同AVM1完全不同的是,AVM2提供了即时编译器JIT(Just-in-time compiler)。通过将ActionScript字节码编译成机器码,最大化提升了应用执行速度。与此对比,AVM1是解释程序,通过将ActionScript源代码(不是字节码)翻译成机器码执行,是对ActionScript代码的解释执行。
解释器是能够执行用其他计算机语言编写的程序的系统软件,它是一种翻译程序。它的执行方式是一边翻译一边执行,因此其执行效率一般偏低,但是解释器的实现较为简单,而且编写源程序的高级语言可以使用更加灵活和富于表现力的语法。AVM1是解释器。
JIT(just-in-time compilation),即时编译,也被成为动态翻译,是一种通过在运行时将字节码编译为机器码,从而改善字节码编译语言性能的技术。AVM2内置JIT。
- Flash 如何在浏览器中工作
用户通过HTML页面访问Flash(即SWF文件)。Web服务器将发送的多媒体数据的类型通知给浏览器,而通知手段就是通过声明该多媒体数据的MIME类型,这样就可以让浏览器知道所接收信息的类型,并依此调用该类型信息所需的对应插件。
SWF文件在HTML页面中以"application/x-shockwave-flash"的MIME类型存在。
当浏览器读取到"application/x-shockwave-flash"这种信息类型时,会自动调用插件Flash Player来运行SWF文件。Flash Player对SWF进行渲染并显示,内嵌的AVM会执行ActionScript二进制编码。
浏览器可以执行HTML中的JavaScript脚本程序,同时能够通过JavaScript脚本与Flash Player进行交互。反之,Flash Player中的AVM也能够通过外部接口同JavaScript进行通讯。
通过Flash Player的网络通讯层,Flash Player也能够基于HTTP(s)或Socket实现与服务器端的通讯,例如与后端的Flash流媒体服务器FMS、服务器端Java程序甚至数据库之间进行网络数据通讯。