cimmicola能否讲讲flex开发经验(轉貼)应该清楚Flex是完全编译成swf文件后交由客户端浏览器中的Flash player来执行的。而不像传统web语言,经由服务端进行解释后转化为纯html元素和脚本。
这样来说,一个纯Flex应用(主要是指企业级开发,有很多功能和业务流程的那种)编译之后的体积,基本上是不能在互联网上访问的,不采取任何优化手段,应用程序就会达到900K~几兆,对于现在普遍的1M带宽来说,下载速度已经是不能接受的了,而且浏览器的下载也不会是断点续传,一旦下载受到干扰,那么下载就中断了。因此Flex的企业应用最适合的是在局域网内使用,如果有外网访问的需求则会比较棘手,对于RIA来说,缺少了互联网,不是致命缺陷吗?而且我认为这绝对不是提高带宽可以做到的,因为现在早有5M~10M的带宽了,可是装的人还是很少,而且我公司是100M独立光纤,都没能解决这个问题,你不能让所有的用户都是100M独立光纤吧?
这点JavaFx也存在同样的致命问题,也是JavaFx没有被RIA甚至是Java自己阵营的人接受的原因。这点silverlight很好的在其运行环境中解决了,它能直接执行axml文件和其中的脚本,而无需事先编译成二进制的文件。这是我觉得他最大的优势。我们现在能做的只是尽量减少体积带来的影响,而不可能完全解决,问题的本还是Flash player,Adobe还要加油啊。
而Flex很年轻,很多人都没有项目开发经验,因此都是从官方或者从国外一些人的教程那里学习和借鉴的,包括我在内。但事实是,Flex官方的教程甚至是样例程序都是很糟糕的。因为大家访问时都是在自己本机上,而那些应用都是很小很小的,感觉不出这样带来的不良影响。因为很多学习Flex的人可能不是搞程序出身,而是搞Flash的,这样他们对程序的理解,对设计,都缺少认识,绝对会依葫芦画瓢的
举个例子在一个MXML文件中的方法,经常是没有参数,而是在函数内部调用该页面内其他元素的,这有个非常大的不好就是,这些代码不能被抽象出来,使得每个页面都有些相同的冗余代码。越到后期会使得程序体积越大,代码越来越难管理,经常会在方法中发现一些既不是方法内声明的变量,也不是传进来的参数,就满文件的找,这个变量是哪里来的局面,使得改造和维护代码变得很艰难。
除了以上说的一点还有一些经验和大家分享一下。
1. 尽量抽象出方法,写进as类或者as文件中,以降低耦合度(避免方法的依赖性)。而关于业务的一些操作方法那是没办法避免的。
2. 尽量将会公共使用的组件抽离出来,比如说一些通用性的组件,单独的作为component会比直接写进程序好的多。除了降低程序体积外(模块中会讲原因),还会提高重用,便于维护。
3. 采用模块化设计会分散主程序的体积(总体上会增加体积,但是拆散了),Flex在编译文件时,会将共用部分编译进主应用,而模块中将不包含这些资源,因此,这些模块只能被你的主程序调用,而其他程序调用时,会因为缺少某些组件或者类而报错。但是请不要过高的期望与模块带来的惊喜,根据项目不同,他可能并不能太大的减少你的应用的体积。
4. 搜一下关于模块体积优化的策略,你会找到RSL,和report.xml的一些做法。他的做法类似与将Flex的核心文件拆散成若干小的swf程序,分批的下载,因为有些库你可能在项目中完全没用到,那你完全可以不用把那个库引用进项目。
5. 主应用的下载我们是避开不了的,但是那些模块就不同了,我们有很多下载策略,比如加载主应用时把所有模块都加载进来,这样避免排队式的等待。企业级应用多数和权限挂钩,结合模块式设计,我们能很轻松的将权限控制起来,如果你没这个模块的权限,那就不要加载了。
6. 尽量不要将资源Embed进程序,比如图片,音乐之类的,Embed的嵌入进你的项目,使得体积增大。
7. 暂时不要使用Flex3提供的runtime localization的做法,他会把语言资源嵌入进程序,这样不仅加大体积,还会使得本地化时依赖源代码。需要的话,最好读取出来,从xml或者数据库都行。
8. 样式最好都写进css,然后编译时选择将css编译成swf,不然它又把css编译进应用里去了。
9. 一定要有个框架,因为我们现在对Flex的架构、功能都不熟悉,自己包装一次,在以后加深了对Flex的理解后会更容易扩展,如果全部是用的Flex默认的东西,就很难扩展了,搞不好就要大改。举个简单的例子,popupmanager是用来弹出窗口的,有人会觉得弹出来没特效,如果你直接在代码中用到Flex的popupmanager,那么你想加入特效就得一个一个的去加,如果你事先设计时封装了一次这个popupmanager,那么简单多了,直接改你的popupmanager,再弹出的时候加入特效多好。这点建议看看design pattern(遗憾的是,我后来才知道有这么个好东西,否则就能更快的进行设计了)。
10. 不推荐使用其他的什么框架,但是一定要把Flex的一些核心了解透彻,比如事件机制,异步,组件设计,组件生命周期,绑定等,这些是非常重要的设计依据,好在Flex部分核心是开源的,可以学习一下他们的写法。而那些框架,第一,那本来就不是你写的,对那个框架的了解,不如你去自己包装一下。第二,现在的框架谈不上成熟,本身也过于复杂,而我没看出那些框架有多大的好处。既然目的是为了方便扩展和修改,那么自己的框架会更适应这样的需求。
11. 不要import xxx.*,这样你不用的也导进来了。
同理在设计时,如果不是一定需要那个组件,比如你只需要一个容器,你new Container会比 new Canvas更好,基类在编译时体积小于继承类,因为他的import和方法都少一些,除非你依赖Canvas某些属性或功能。但是后者要求有些苛刻,因为在一个模块中有一处引用了canvas,那么你这个做法也是徒劳的了,总体原则是,如果不是必须,不要引用你不需要的东西。
12. 还有个变态的东西,如果纯as project会比flex project体积小10倍以上,对于相同效果,我用flex做就是200K+,用as 项目做就是19K……,但是要想实现Flex强大的组件,那有点麻烦,我们可以考虑,对于程序框架采用Flex做,而一些不是基于Flex组件的,比如:你需要绘图面板,那么这个功能纯粹是as的功能,那么你就在as 项目中开发,然后编译成swf后再在flex中应用,这样体积会比你用flex的组件构建要小。
……还有什么想不起来了,有就补充吧,各位也可以。呵呵,个人认为以上内容绝对是书本里找不到的~
但是我们看到,为了缓解本该不是我们解决的问题,采用了一些极端的抠门的方法,使得设计和开发时也颇为伤脑筋,本来客户端我们需要考虑的时如何提高用户体验,关注的是业务流程,但是,现在为了优化程序不得不考虑减少程序体积,而在程序功能、开发和设计的心情(太抠门会让自己很不爽)与程序的体积之间徘徊了。这样是我为什么说Flex作为企业级应用开发尚不成熟的根本原因。
当然服务端针对这种纯RIA应用也有些设计上的注意点,不过这不在Flex讨论范围内,就不赘述了。
分享到:
相关推荐
这种效果通过动态渲染页面,模拟真实的纸张翻页动作,带给用户更接近传统纸质阅读体验的交互感受。在本文中,我们将深入探讨Flex技术及其在实现杂志效果中的应用。 Flex是Adobe公司推出的一种用于构建富互联网应用...
Flex是一种用于创建富互联网应用程序(RIA)的框架,由Adobe公司开发。它主要基于ActionScript编程...通过运行和分析这些示例,初学者可以直观地感受到Flex如何实现动态、响应式的用户界面,以及它在实际项目中的潜力。
Flex是一种用于构建富互联网应用程序(RIA)的框架,它基于ActionScript 3.0编程语言和Flash Player运行时环境。FXVideo旨在提供一个功能丰富的、可自定义的视频播放解决方案,能够满足用户在网页上实现视频播放、...
通过具体的实例,读者可以更加直观地感受到如何运用Flex 3 来解决实际问题。 通过上述概述,我们可以看到《Flex 3 基本指南》这本书覆盖了Flex 3 的各个方面,从基础知识到高级主题都做了详尽的讲解。无论是初学者...
在Flex中,我们可以利用ActionScript编程语言和MXML标记语言进行用户界面设计。 Flex的应用程序运行在Flash Player或Adobe AIR上,为用户提供动态、响应式的图形和交互。在本项目中,Flex的主要作用是构建用户界面...
Flex翻书组件是一种基于Adobe Flex技术开发的交互式电子书应用,它提供了逼真的翻书效果,让读者在数字环境中体验类似纸质书籍的阅读感受。Adobe Flex是一个用于构建富互联网应用程序(RIA)的框架,使用MXML和...
这篇中文文档有4章,按照其中的例子一路做下来,对于Flex开发过程、开发工具、开发环境可以有一个较为全面的感受。 接下来开始打基础,千里之行,始于足下,下盘不稳,以后你吃苦头的时候会很多。 Flex开发的基础...
总的来说,"flex360°全视角立体旋转图片demo"是一个结合了Flex编程、3D图形处理和用户交互设计的创新应用。它展示了如何利用现代Web技术为用户提供更加生动、丰富的在线体验,对于Web开发者来说,这是一种值得学习...
对于教育者而言,它也可以作为教学工具,让学生在实际操作中感受编程的魅力。 总的来说,"可用C语言编程的计算器"是一个富有挑战性和创新性的项目,它结合了基础计算功能与高级编程特性,为学习和实验提供了一个...
在这个电子作业管理系统中,Flex被用来构建前端用户界面,提供仿Windows风格的交互体验,使得操作直观易用,增强用户的使用感受。 J2EE,全称Java 2 Platform, Enterprise Edition,是Java平台的企业版,用于开发和...
该效果能够使应用程序中的元素呈现出柔和的视觉感受。 ##### 3. Dissolve `<mx:Dissolve>`是一种淡入淡出效果,通常用于两个图像之间的转换,给人一种逐渐融合的感觉。 ##### 4. Fade `<mx:Fade>`实现对象透明度的...
FleX-Chai3d项目是将流体模拟与触觉反馈相结合的典范,它利用C++编程语言实现,为用户提供了一种直观且真实的流体体验。本文将深入探讨FleX-Chai3d的核心技术和应用场景。 1. FleX简介 FleX是一个开源的物理模拟库...
1. **ActionScript编程**:作为Flash MX和Flex的基础,ActionScript是这个项目的主要编程语言,用于控制动画、处理用户输入和实现业务逻辑。 2. **组件开发**:"AsFlipPage"可能是一个自定义组件,可以被其他Flash...
在Flex编程中,ViewStack组件的默认行为是瞬间切换,这可能会显得较为生硬。而Eflex_v1.01的出现,就是为了弥补这一不足,它允许开发者自定义过渡效果,如淡入淡出、滑动、缩放等,从而增加应用的动态感和专业性。...
- **三维可视化**: 实现对现场设备的三维可视化远程监测与控制,增强了用户的沉浸感和直观感受。 #### 5. 综合网络服务器的设计与实现 - **服务器架构**: 构建集Web服务、C/S应答服务于一体的多层服务器程序。 - **...
这里使用了Flex界面开发技术和Hibernate、Oracle数据库,这让我有机会实践前后端的集成,增强了实际开发能力。 然而,我也意识到自身存在的问题。一是缺乏项目经验,导致在处理复杂的系统开发时,进度较慢。二是对...
这是一款专门用于构建Flex应用的集成开发环境(IDE),它支持ActionScript和MXML编程语言。在博饼小游戏的开发过程中,Flash Builder 5.5主要用于编写和管理游戏的后端逻辑,包括数据处理、用户交互和网络通信等。...
ActionScript3是Adobe Flash Professional和Flex Builder等工具用于创建交互式内容的主要脚本语言。相比之前的版本,AS3具有更强大的性能和类型系统,为游戏开发者提供了更为高效和可靠的编程环境。在这个植物大战...
ActionScript 3.0是Adobe Flex SDK中的主要编程语言,它相较于早期版本AS2有着显著的性能提升和更严谨的面向对象设计。 在音乐波形软件中,ActionScript 3.0的主要作用是处理音频数据,将音频文件转化为可视化图形...
该源码基于ActionScript 3.0(简称AS3)编写,AS3是Adobe Flash Professional和Flex Builder等开发工具中的主要编程语言。相比之前的版本,AS3引入了更多面向对象的特性,包括类、包和命名空间,以及更强的类型系统...