本文既为浅谈代码优化,那么就不深入到oop设计层面。仅涉及flash8帮助里面提到的一些代码编写优化原则,并加以解释。
准则来源于flash8 帮助,我做了一些解释:
1.避免从一个循环中多次调用一个函数。
在循环中包含小函数的内容,可使效果更佳。小函数生命期短,利于资源释放。尤其是在大的循环中时。
2.尽可能使用本机函数。
本机函数要比用户定义的函数运行速度更快。本机函数即flash中内有的一些函数(intrinsic),比如hittest(),你没必要自己写一个类似的。
3.不要过多使用 object 类型。
数据类型注释应力求精确,这样可以提高性能。只有在没有适当的备选数据类型时,才使用 object 类型。同时也便于代码管理,时刻知道对象的类型和作用。
同时也有利于编译器编译时优化。
4.避免使用 eval() 函数或数据访问运算符。
通常,较为可取且更有效的做法是只设置一次局部引用。不得已时才用eval,比如转换_droptarget为movieclip时。
5.在开始循环前将 array.length 赋予变量,尤其是大的循环。
在开始循环前将 array.length 赋予变量(比如var ilength:number),将其作为条件使用,而不是使用 myarr.length 本身。
原因,在循环中,ilength是number变量,会被放入寄存器使用,效率远比访问array再得到length高。例如,应使用
var fontarr:array = textfield.getfontlist();
var arraylen:number = fontarr.length;
for (var i:number = 0; i < arraylen; i++) {
trace(fontarr[i]);
}
来代替:
var fontarr:array = textfield.getfontlist();
for (var i:number = 0; i < fontarr.length; i++) {
trace(fontarr[i]);
}
6.注重优化循环及所有重复动作。
flash player 花费许多时间来处理循环(如使用 setinterval() 函数的循环)。
7.在局部变量够用时,不要使用全局变量。 类静态变量也要少用。
全局变量是开发者的恶梦。实在需要全局变量的话,我建议使用singleton设计模式来进行管理。
8.声明变量时,添加 var 关键字。
这是为了编译时让编译器知道你的变量类型,优化编译。
黑羽补充两点:
1、对关键字的使用要谨慎。
不赞成使用关键字作为自己的method和属性名,除非你确认后续开发不会用到相同的事件名和属性名。
但你怎么知道flash使用了多少隐藏关键字?太多了!比如说 classname, invalidate, refresh, mouseover等等不常用的关键词。好的方法是使用sepy编辑器来写代码,那里面加亮了所有公布的和没有公布的关键词。
而且因为很有可能和start,load,等这些常用的事件名重复,带来代码不必要的修改和麻烦。
2、对涉及到调用绘图资源的函数时,尽量先多判断再调用。
所有渐变,位置变化,创建删除mc,组件等函数都涉及到绘图资源的调用。在很多情况下,尽量先用逻辑判断变量或者对象的属性,必要时再调用这些函数。这样可以节省较多的计算资源
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器