Flex应用程序的最佳HTML/JavaScript框架是什么?

Flex应用程序的最佳HTML/JavaScript框架是什么?,javascript,apache-flex,flash,Javascript,Apache Flex,Flash,我们目前正在使用PureMVC框架和shell.swf构建一个Flex应用程序,该框架可以动态加载/卸载模块。我们遇到了内存问题,希望用基于JavaScript的加载程序替换shell.swf 两个问题: 动态加载Flex组件并允许模块相互通信的好框架是什么 通过JavaScript动态加载/卸载模块会解决与Flex/Flash应用程序相关的典型内存问题吗 如果页面上需要单独的Flash元素来相互通信,那么最终可能会使用LocalConnection。也就是说,您需要研究如何在Flex框架中使用

我们目前正在使用PureMVC框架和shell.swf构建一个Flex应用程序,该框架可以动态加载/卸载模块。我们遇到了内存问题,希望用基于JavaScript的加载程序替换shell.swf

两个问题:

  • 动态加载Flex组件并允许模块相互通信的好框架是什么

  • 通过JavaScript动态加载/卸载模块会解决与Flex/Flash应用程序相关的典型内存问题吗


  • 如果页面上需要单独的Flash元素来相互通信,那么最终可能会使用LocalConnection。也就是说,您需要研究如何在Flex框架中使用运行时共享库(RSL)——否则,您的每个SWF都必须包含自己的Flex框架副本

    话虽如此,与内存相关的问题并不是真正源于框架,而是源于与对象引用相关的问题,可能还有占用CPU的问题

    Flash的垃圾收集器只有在有时间的时候才会运行,所以如果你的应用程序一直在增加CPU,GC可能永远不会运行。如果您使用Flex在调试模式下运行应用程序,您可以强制GC运行,以查看情况是否如此

    Flash的GC基于标记和扫描概念。存在但没有任何引用的对象首先被标记,然后被GC清除。这意味着,如果在周围留下对“死”对象的引用,它们将永远不会被释放。在这方面,常见的罪魁祸首是事件和事件侦听器。通常,最佳做法是始终使用addEventListener的弱键(避免生成由GC计数的引用)

    // don't do this
    foo.addEventListener(Event.CHANGE, onChange);
    
    // do this
    foo.addEventListener(Event.CHANGE, onChange, false, 0, true);
    

    格兰特·斯金纳(Grant Skinner)有一个建议,你也应该签出。

    如果你需要在一个页面上使用单独的Flash元素来相互通信,你可能最终会使用LocalConnection。也就是说,您需要研究如何在Flex框架中使用运行时共享库(RSL)——否则,您的每个SWF都必须包含自己的Flex框架副本

    话虽如此,与内存相关的问题并不是真正源于框架,而是源于与对象引用相关的问题,可能还有占用CPU的问题

    Flash的垃圾收集器只有在有时间的时候才会运行,所以如果你的应用程序一直在增加CPU,GC可能永远不会运行。如果您使用Flex在调试模式下运行应用程序,您可以强制GC运行,以查看情况是否如此

    Flash的GC基于标记和扫描概念。存在但没有任何引用的对象首先被标记,然后被GC清除。这意味着,如果在周围留下对“死”对象的引用,它们将永远不会被释放。在这方面,常见的罪魁祸首是事件和事件侦听器。通常,最佳做法是始终使用addEventListener的弱键(避免生成由GC计数的引用)

    // don't do this
    foo.addEventListener(Event.CHANGE, onChange);
    
    // do this
    foo.addEventListener(Event.CHANGE, onChange, false, 0, true);
    
    格兰特·斯金纳有一本书,你也应该去看看