云自无心水自闲

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 134, comments - 239, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2007年2月1日

在编译应用时要使用RSL, 需要使用下列编译选项:

    * runtime-shared-libraries 提供运行运行时共享库的位置.
    * external-library-path|externs|load-externs 提供编译时库的位置. 编译器需要这个信息动态链接.


使用runtime-shared-libraries选项来指定SWF文件的位置, 这样应用能够在运行时加载RSL. 需要指定SWF与部署位置的相对路径. 比如: 如果把library.swf文件放在web_root/libraries目录下, 而应用在web_root目录下, 那么文件的指定方法是: libraries/library.swf
可以用这个选项指定多个库. 如果指定了多个库, 需要用逗号分隔.


使用external-library-path选项来指定library在编译时的SWC文件或者目录的位置. 编译器会在编译时根据这个选项进行链接的检查. 你还可以使用externs或者load-externs选项来指定其他单独的classes或者xml文件来定义库的内容.


下面是一个编译MyApp应用的命令行示例, 其中使用了2个库:

mxmlc -runtime-shared-libraries=
../libraries/CustomCellRenderer/library.swf,
../libraries/CustomDataGrid/library.swf
-external-library-path=../libraries/CustomCellRenderer,
../libraries/CustomDataGrid MyApp.mxml

库的顺序非常重要, 因为基础类必须先加载.


你先可以使用配置文件, 示例如下:

<compiler>
    <external-library-path>
        <path-element>../libraries/CustomCellRenderer</path-element>
        <path-element>../libraries/CustomDataGrid</path-element>
        <path-element>../libs/playerglobal.swc</path-element>
    </external-library-path>
</compiler>
<runtime-shared-libraries>
    <url>../libraries/CustomCellRenderer/library.swf</url>
    <url>../libraries/CustomDataGrid/library.swf</url>
</runtime-shared-libraries>


runtime-shared-libraries选项值是library.swf文件是相对部署目录的路径. external-library-path选项是编译时SWC文件的路径. 因此, 必须先知道库的部署路径.

 

示例中, 编译时文件结构如下:

c:/appfiles/MyApp.mxml
c:/libraries/CustomCellRenderer/CustomCellRenderer.swc
c:/libraries/CustomDataGrid/CustomDataGrid.swc

library.swf在编译进不是必需的. Flex编译器不验证SWF文件的存在与否, 但会把路径信息编译进行最后的应用代码中.


文件的部署结构如下:

web_root/MyApp.swf
web_root/libraries/CustomCellRenderer/library.swf
web_root/libraries/CustomDataGrid/library.swf

 

posted @ 2007-02-01 19:17 云自无心水自闲 阅读(325) | 评论 (0)编辑 收藏

创建库

可以使用Flex Builder或者Compc命令行来创建库. 库可以是一个SWC文件, 或者是包含了library.swf和catalog.xml文件的目录. 一个库通常包含自定义组件和类. 然后就可以在RSL中使用这些库了.

在Flex Bulder中, 通过使用Flex Library Build Path对话框来添加资源到库中.

在命令行中, 使用include-classes和include-namespaces选项来添加文件到库中.

下面的命令行示例说明了如何创建一个名字叫CustomCellRenderer的库:

compc -source-path ../mycomponents/components/local
-include-classes CustomCellRendererComponent -directory=true -debug=false
-output ../libraries/CustomCellRenderer

所有包含的组件必须是静态链接的文件. 使用compc编译器创建库时, 不能使用include-file选项, 因为这个选项不是将library.swf文件静态链接到库中的.

可以使用directory选项指定输出到一个目录而不是到一个SWC文件中:

<?xml version="1.0">
<flex-config>
    <compiler>
        <source-path>
            <path-element>mycomponents/components/local</path-element>
        </source-path>
    </compiler>
    <output>libraries/CustomCellRenderer</output>
    <directory>true</directory>
    <debug>false</false>
    <include-classes>
        <class>CustomCellRendererComponent</class>
    </include-classes>
</flex-config>

输出会是一个目录,目录里包含两个文件
    * catalog.xml
    * library.swf

创建library.swf文件后, 你可以编译应用并且指定文件的位置.

posted @ 2007-02-01 15:25 云自无心水自闲 阅读(326) | 评论 (0)编辑 收藏

UI的问题如何解决呢: AWT, Swing, SWT, 或者是一些其他的比如: Tkinter, WxPython之类的东西?
Bruce认为这些对于创建一个真正跨平台的应用是不够的.
他认为最好的解决方案就是Flex!

Flex and Flash provide a complete, unlimited, flexible tool to build user experiences. From the standpoint of a programmer’s time investment, you can learn a single language for building UIs without worrying about running into problems or limitations later—issues like:

  • Installation problems
  • Constraints on what you can create
  • Sudden steep climbs in the learning curve



原文链接:

http://www.artima.com/weblogs/viewpost.jsp?thread=193593

Computing Thoughts
Hybridizing Java
by Bruce Eckel
January 30, 2007

posted @ 2007-02-01 00:52 云自无心水自闲 阅读(383) | 评论 (0)编辑 收藏

RSL也需要谨慎使用

RSL也不是对于所有的应用都是有益的. 需要对应用RSL前后的下载时间和启动时间都测试过, 才能得到正确的结论.

RSL不能跨域共享. 如果客户在一个域中使用了RSL, 然后运行了另一个域的应用, 虽然这两个RSL是相同的, 但是需要下载两次.

RSL通常会增加应用的启动时间. 这是应用不管整个库实际如何使用, 只是简单地全部加载整个库. 就这一点来说, RSL越小越好. 这与静态链接库的使用是不同的. 当你编译一个Felx应用时, 编译器只解开需要的组件. 一般来说, 库的大小可以是任意的, 它只影响编译时间而不会影响下载的时间.

如果在好几个应用中使用相同的组件库, 那么可以考虑合并这些库, 形成一个RSL. 但是如果库合并后, 每个应用只会用到其中的一小部分, 那么还不如多加载几个小RSL更高效.

如果一些类重复打包在多个RSL中, 那么一定要注意同步更新的问题.

RSL不能应用在基类是Sprite或者MovieClip的纯ActionScript项目中. 因为RSL需要基类知道如何加载RSL, 比如: Application或者SimpleApplication.

关于 framework.swc文件

framework.swc是一个标准的SWC文件. 缺省地它不能用作RSL. 整个framwork.swc文件不被链接到任何一个应用中. Flex编译器只将那些应用用到的部分链接到生成最后的SWF文件. 比如: 如果一个应用只使用了Button, Panel和TextArea控件, 那么只有这几个控件和它们的依赖项被编译器链接.

几乎所有的应用都需要framework.swc文件的一部分, 但是它并不适合作为RSL. 原因如上据说, RSL是整个链接, 不管实际使用多少的. 如果RSL包含了很多类, 而应用只使用了其中的一小部分, 那么这样的加载方式并不是最合理的. 这样使用会造成应用的启动时间大大增加.


RSL的优点

下面的一个例子说明了将几个的共享组件做成RSL的优点. 在这个例子中, 组件库的大小是150K, 编译后的应用的大小是100K.
Application size with and without RSLs 

使用了RSL, RSL只被下载一次. 那么合计下载量是350K, 节约了30%. 如果再添加第3个, 第4个应用的话, 每次都能150K的下载量.

一般来说, 在一个域中使用同一个RSL的应用越多, 那么好处就越大.

posted @ 2007-02-01 00:43 云自无心水自闲 阅读(485) | 评论 (0)编辑 收藏