- 浏览: 582144 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
liugang_ok:
zhao_rock 写道看到这篇文章时已经是2015年11月2 ...
毕业三年之际写给可能迷茫的你我 -
ning2-eye:
...
2015年总结和2016年计划 -
sxdtzhaoxinguo:
我竟然看完了,很受启发!
2015年总结和2016年计划 -
hottymg:
...
2015年总结和2016年计划 -
hangzhoujava:
伪命题很多,比如有许多的上市公司还不如未上市公司,大家心里还是 ...
2015年总结和2016年计划
1. 不要使用new操作符创建数组,应使用
var a = [];
而不是:
var a = new Array();
2. 创建数组的性能开销很大,请谨慎进行如下操作:
var vanityCollection01 : Array = new Array();
var vanityCollection02 : Array = new Array();
var vanityCollection03 : Array = new Array();
var vanityCollection04 : Array = new Array();
3. 最快的数组复制方法:
var copy : Array = sourceArray.concat();
4. 为数组中的元素赋值都是比较慢的操作,如:
employees.push( employee );
employees[2] = employee;
5. 从数组中读取元素的速度是为元素赋值速度的2倍:
var employee : Employee = employees[2];
6. 适当使用静态方法不需要实例化对象,可以提高性能:
StringUtils.trim( "text with space at end " );
Class definition:
package
{
public final class StringUtils
{
public static function trim( s : String ) : String
{
var trimmed : String;
// implementation...
return trimmed;
}
}
}
7.将应用生命周期都不会改变的属性声明为常量:
public const APPLICATION_PUBLISHER : String = "Company, Inc.";
8. 当确定一个类不会派生子类时,应使用final修饰符:
public final class StringUtils
9. 在ActionScript3中,方法和变量的长度不会对性能造成影响:
someCrazyLongMethodNameDoesntReallyImpactPerformanceTooMuch();
10. 在一行代码中进行多个变量赋值不会提高性能:
var i=0; j=10; k=200;
11. 使用if语句和switch语句无内存开销的差异:
if ( condition )
{
// handle condition
}
使用switch语句:
switch ( condition )
{
case "A":
// logic to handle case A
break;
case "B":
// logic to handle case B
break;
}
12.使用if语句时,尽可能地按照最有可能发生的情况的顺序进行判断和处理:
if ( conditionThatHappensAlot )
{
// logic to handle frequently met condition
}
else if ( conditionThatHappensSomtimes )
{
// handle the case that happens occaisonally
}
else
{
// handle the case that doesn’t happen that often
}
13. AVM 在循环体内部进行计算时,将整型(int)数据提升为浮点型Number进行处理(从版本9到版本10,Actionscript虚拟机已经有所改变,int,uint,number之间的转换速度不再像之前慢了)
14. 要解决类型转换,就要先解决未知和不正确的对象类型
15. 谨慎使用unit,他可能会较慢(从版本9到版本10,Actionscript虚拟机已经有所改变,int,uint,number之间的转换速度不再像之前慢了)
var footerHex : uint = 0x00ccff;
16. 应在for循环中使用int:
(var i: int = 0; i < n; i++) NOT for (var i: Number = 0; i < n; i++)
17. 不要用int类型来表示小数,应使用:
var decimal : Number = 14.654;
而不是:
var decimal : int = 14.654;
18. 乘法效率高于除法: 不要用 5000/1000 而是: 5000*0.001
19. 如果一个值是通过for或者while语句循环多次计算出来的(或者其他耗费较高性能才能得到的值),而且这个值需要在局部多次使用,那么应当在本地将值存储,而不是每次访问该值时重新计算):
for (..){ a * 180 / Math.PI; }
declare: toRadians = a*180/Math.PI; outside of the loop
20. 尽量避免在循环体判断条件中进行计算或者方法调用,应当使用:
var len : int = myArray.lengh;
for (var i=0;i<len;i++){}
而不是:
for (var i=0;i< myArray.lengh;i++){ }
21. 使用正则表达式RegEx进行校验,使用字符串的方法进行查找:
// postal code validation example using regular expressions
private var regEx:RegExp = /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/i;
private function validatePostal( event : Event ) : void
{
if( regEx.test( zipTextInput.text ) )
{
// handle invalid input case
}
}
// search a string using String methods
var string : String = "Search me";
var searchIndex : int = string.indexOf( "me" );
var search : String = string.substring( searchIndex, searchIndex + 2 );
22.尽量重用对象来保持”内存平衡”,这些对象包括DisplayObjects,URLLoader等.
23. 遵循flex组件模式(失效机制):
createChildren();
commitProperties();
updateDisplayList();
24. 把使用DataGrid组件作为最后的显示手段(如果确信真的没有办法使用常规的手段来实现想要的功能,才使用DataGrid)
25. 避免将Repeaters用于能够滚动的数据
26. 避免使用setStyle()方法(在flex框架中最消耗性能的方法之一)
27. 使用过多的容器将会严重降低系统性能
<mx:Panel>
<mx:VBox>
<mx:HBox>
<mx:Label text="Label 1" />
<mx:VBox>
<mx:Label text="Label 2" />
</mx:VBox>
<mx:HBox>
<mx:Label text="Label 3" />
<mx:VBox>
<mx:Label text="Label 4" />
</mx:VBox>
</mx:HBox>
</mx:HBox>
</mx:VBox>
</mx:Panel>
28. 定义组件时不一定总要使用一个容器来作为该组件的顶级标签,也不一定需要顶级容器标签
<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml"
source="avatar.jpg" width="200" height="200" />
29. 清除不必要的容器包装以减少容器的嵌套
30. 避免在标签内嵌套Vbox容器(消除冗余)
<mx:Panel>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:Panel>
<mx:Panel>
<mx:VBox>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:VBox>
</mx:Panel>
31. 在mx:Application标签内部尽量避免使用Vbox标签(消除冗余).应当使用:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:Application>
而不是:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml>
<mx:VBox>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:VBox>
</mx:Application>
32.设置Repeater的recycleChildren的属性为true可以提高Repeater对象的性能(重新利用已创建的子组件而不是再创建一个新的子组件)
<mx:Script>
<![CDATA[
[Bindable]
public var repeaterData : Array = ["data 1", "data 2"];
]]>
</mx:Script>
<mx:Repeater id="repeater" dataProvider="{repeaterData}">
<mx:Label text="data item: {repeater.currentItem}"/>
</mx:Repeater>
33. 应用的frameRate应设为60fps以内
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml
frameRate="45">
</mx:Application>
34. 避免在一帧中进行过多的显示操作
35. 对于重复的操作,应使用ENTER_FRAME事件替代Timer事件:
public function onEnterFrame( event : Event ) : void
{
}
private function init() : void
{
addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
而不是:
public function onTimerTick( event : Event ) : void
{
}
private function init() : void
{
var timer : Timer = new Timer();
timer.start();
timer.addEventListener( TimerEvent.TIMER, onTimerTick );
}
36. 在多帧中延迟对象的创建,使用:
<mx:Container creationPolicy="queued"/>
37. 使组件不可见时使用Alpha=0与visiable=false不是一回事(对象被标记为不可见将不会被(渲染与布局)处理),应当使用:
loginButton.visible = false;
而不是:
loginButton.alpha = 0;
var a = [];
而不是:
var a = new Array();
2. 创建数组的性能开销很大,请谨慎进行如下操作:
var vanityCollection01 : Array = new Array();
var vanityCollection02 : Array = new Array();
var vanityCollection03 : Array = new Array();
var vanityCollection04 : Array = new Array();
3. 最快的数组复制方法:
var copy : Array = sourceArray.concat();
4. 为数组中的元素赋值都是比较慢的操作,如:
employees.push( employee );
employees[2] = employee;
5. 从数组中读取元素的速度是为元素赋值速度的2倍:
var employee : Employee = employees[2];
6. 适当使用静态方法不需要实例化对象,可以提高性能:
StringUtils.trim( "text with space at end " );
Class definition:
package
{
public final class StringUtils
{
public static function trim( s : String ) : String
{
var trimmed : String;
// implementation...
return trimmed;
}
}
}
7.将应用生命周期都不会改变的属性声明为常量:
public const APPLICATION_PUBLISHER : String = "Company, Inc.";
8. 当确定一个类不会派生子类时,应使用final修饰符:
public final class StringUtils
9. 在ActionScript3中,方法和变量的长度不会对性能造成影响:
someCrazyLongMethodNameDoesntReallyImpactPerformanceTooMuch();
10. 在一行代码中进行多个变量赋值不会提高性能:
var i=0; j=10; k=200;
11. 使用if语句和switch语句无内存开销的差异:
if ( condition )
{
// handle condition
}
使用switch语句:
switch ( condition )
{
case "A":
// logic to handle case A
break;
case "B":
// logic to handle case B
break;
}
12.使用if语句时,尽可能地按照最有可能发生的情况的顺序进行判断和处理:
if ( conditionThatHappensAlot )
{
// logic to handle frequently met condition
}
else if ( conditionThatHappensSomtimes )
{
// handle the case that happens occaisonally
}
else
{
// handle the case that doesn’t happen that often
}
13. AVM 在循环体内部进行计算时,将整型(int)数据提升为浮点型Number进行处理(从版本9到版本10,Actionscript虚拟机已经有所改变,int,uint,number之间的转换速度不再像之前慢了)
14. 要解决类型转换,就要先解决未知和不正确的对象类型
15. 谨慎使用unit,他可能会较慢(从版本9到版本10,Actionscript虚拟机已经有所改变,int,uint,number之间的转换速度不再像之前慢了)
var footerHex : uint = 0x00ccff;
16. 应在for循环中使用int:
(var i: int = 0; i < n; i++) NOT for (var i: Number = 0; i < n; i++)
17. 不要用int类型来表示小数,应使用:
var decimal : Number = 14.654;
而不是:
var decimal : int = 14.654;
18. 乘法效率高于除法: 不要用 5000/1000 而是: 5000*0.001
19. 如果一个值是通过for或者while语句循环多次计算出来的(或者其他耗费较高性能才能得到的值),而且这个值需要在局部多次使用,那么应当在本地将值存储,而不是每次访问该值时重新计算):
for (..){ a * 180 / Math.PI; }
declare: toRadians = a*180/Math.PI; outside of the loop
20. 尽量避免在循环体判断条件中进行计算或者方法调用,应当使用:
var len : int = myArray.lengh;
for (var i=0;i<len;i++){}
而不是:
for (var i=0;i< myArray.lengh;i++){ }
21. 使用正则表达式RegEx进行校验,使用字符串的方法进行查找:
// postal code validation example using regular expressions
private var regEx:RegExp = /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/i;
private function validatePostal( event : Event ) : void
{
if( regEx.test( zipTextInput.text ) )
{
// handle invalid input case
}
}
// search a string using String methods
var string : String = "Search me";
var searchIndex : int = string.indexOf( "me" );
var search : String = string.substring( searchIndex, searchIndex + 2 );
22.尽量重用对象来保持”内存平衡”,这些对象包括DisplayObjects,URLLoader等.
23. 遵循flex组件模式(失效机制):
createChildren();
commitProperties();
updateDisplayList();
24. 把使用DataGrid组件作为最后的显示手段(如果确信真的没有办法使用常规的手段来实现想要的功能,才使用DataGrid)
25. 避免将Repeaters用于能够滚动的数据
26. 避免使用setStyle()方法(在flex框架中最消耗性能的方法之一)
27. 使用过多的容器将会严重降低系统性能
<mx:Panel>
<mx:VBox>
<mx:HBox>
<mx:Label text="Label 1" />
<mx:VBox>
<mx:Label text="Label 2" />
</mx:VBox>
<mx:HBox>
<mx:Label text="Label 3" />
<mx:VBox>
<mx:Label text="Label 4" />
</mx:VBox>
</mx:HBox>
</mx:HBox>
</mx:VBox>
</mx:Panel>
28. 定义组件时不一定总要使用一个容器来作为该组件的顶级标签,也不一定需要顶级容器标签
<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml"
source="avatar.jpg" width="200" height="200" />
29. 清除不必要的容器包装以减少容器的嵌套
30. 避免在标签内嵌套Vbox容器(消除冗余)
<mx:Panel>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:Panel>
<mx:Panel>
<mx:VBox>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:VBox>
</mx:Panel>
31. 在mx:Application标签内部尽量避免使用Vbox标签(消除冗余).应当使用:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:Application>
而不是:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml>
<mx:VBox>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:VBox>
</mx:Application>
32.设置Repeater的recycleChildren的属性为true可以提高Repeater对象的性能(重新利用已创建的子组件而不是再创建一个新的子组件)
<mx:Script>
<![CDATA[
[Bindable]
public var repeaterData : Array = ["data 1", "data 2"];
]]>
</mx:Script>
<mx:Repeater id="repeater" dataProvider="{repeaterData}">
<mx:Label text="data item: {repeater.currentItem}"/>
</mx:Repeater>
33. 应用的frameRate应设为60fps以内
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml
frameRate="45">
</mx:Application>
34. 避免在一帧中进行过多的显示操作
35. 对于重复的操作,应使用ENTER_FRAME事件替代Timer事件:
public function onEnterFrame( event : Event ) : void
{
}
private function init() : void
{
addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
而不是:
public function onTimerTick( event : Event ) : void
{
}
private function init() : void
{
var timer : Timer = new Timer();
timer.start();
timer.addEventListener( TimerEvent.TIMER, onTimerTick );
}
36. 在多帧中延迟对象的创建,使用:
<mx:Container creationPolicy="queued"/>
37. 使组件不可见时使用Alpha=0与visiable=false不是一回事(对象被标记为不可见将不会被(渲染与布局)处理),应当使用:
loginButton.visible = false;
而不是:
loginButton.alpha = 0;
发表评论
-
Flex中调用js完成退出和全屏等功能
2013-11-06 11:39 12401、退出 在Flex中调用js的代码为 ExternalIn ... -
Flex浏览器标题中文乱码&AS调JS传参中文乱码
2013-09-18 18:27 32341、Flex中设置标题栏有两种方式,一种是在Applicati ... -
Flex Builder4.5 自动import包
2013-05-03 11:11 1622打开“首选参数” >> Flash Builder ... -
只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源
2013-01-11 11:48 4635在没有网络环境下的本地文件 目前在用Flex Build ... -
Flash AS3[转载]Error #2037: 函数调用序列不正确,或前面的调用不成功。
2012-11-05 16:58 1863Error #2037: 函数调用序列不正确,或前面的调用不成 ... -
DataGrid的一些关键属性
2012-10-16 15:36 1509DataGrid控件提供以下功能: 列可以具有不同宽度或同一 ... -
RIA/FLASH/FLEX
2012-06-01 14:29 1090RIA是macromedia在2004年提 ... -
The entity name must immediately follow the '&' in the entity reference.
2012-05-23 17:20 8275在flex中出现上述错误,是因为不识别&标识符,需要将 ... -
Flash Builder Default Browser(默认浏览器)
2012-04-18 11:09 1285菜单栏:Window->Preferences-> ... -
自定义事件实例
2012-03-27 16:28 1049重新回顾下自定义事件: 1 在派生组件中声明metadata元 ... -
Flex+Java+BlazeDS多文件上传
2012-03-12 23:13 2633Flex文件上传功能,后台服务器管理用Java,通信工具Bla ... -
利用java 后台导出Flex DataGrid为Excel
2011-12-05 17:35 3374利用java服务器端导出datagrid数据。附件两个项目分别 ... -
提高flex应用性能方法(一)
2011-11-21 11:46 2759在RIA应用开发过程中,性能一直是我们关注的一个重点;生成sw ... -
Flex遍历ValueObject对象
2011-10-20 18:46 1909//_menu 为遍历对象 ... -
在as中给itemRenderer属性赋值
2011-09-23 11:48 1342首先申明一个ClassFactory类型的对象,将自定义组件置 ... -
flex记住密码等操作
2011-09-16 16:14 25161 在密码正确的情况下,如果“记住密码”是选中的,那么将用户名 ... -
日期的int变量小于10时补0
2011-09-15 17:41 1909很简单,就是用DateFormatter类实现 <Dat ... -
Flex Tree展开所有或某个节点
2011-09-14 14:23 6931flex Tree展开方法 1 tree.expandChil ... -
flex PopUpManager弹出窗口
2011-09-12 20:35 16039flex PopUpManager类 PopUpMana ... -
点击DataGrid标题栏触发事件
2011-09-06 14:48 1380在<mx:DataGrid headerRelease= ...
相关推荐
Flex应用程序性能改善技巧,帮你最大限度提高运行速率
9.6 有关提高Flex应用性能的技巧 294 9.7 小结 299 第10章 Flex企业应用开发的其他技术 300 10.1 与网页进行交互 300 10.1.1 通过参数接受外部信息 300 10.1.2 使用navigateToURL方法调用JavaScript 302 ...
Flex4中引入了新的ui组件,提供了更好的性能监控,并且大大提高了编译速度。《Flex 4实战》是一本全面的指南,为web设计人员和开发人员提供了Flex的详细介绍。《Flex 4实战》从基础讲起,介绍了有关表单和数据的知识...
相信读者在学习完本书后,在使用Flex进行组件开发和数据处理、使用Flex高效制作皮肤、将Flex与 Flash紧密结合、使用Flex与服务器端语言通信、对Flex应用进行优化等方面都会有深刻的理解和掌握。 本书的所有实例...
相信读者在学习完《Flex与ActionScript 3程序开发》后,在使用Flex进行组件开发和数据处理、使用Flex高效制作皮肤、将Flex与Flash紧密结合、使用Flex与服务器端语言通信、对Flex应用进行优化等方面都会有深刻的理解...
Flex4中引入了新的ui组件,提供了更好的性能监控,并且大大提高了编译速度。 《Flex4实战》是一本全面的指南,为web设计人员和开发人员提供了Flex的详细介绍。本书从基础讲起,介绍了有关表单和数据的知识,然后...
的性能监控,并且大大提高了编译速度。 《Flex 4实战》是一本全面的指南,为Web设计人员和 开发人员提供了Flex的详细介绍。本书从基础讲起,介绍了 有关表单和数据的知识,然后逐渐过渡到核心概念,如导 航、...
Flex4中引入了新的ui组件,提供了更好的性能监控,并且大大提高了编译速度。 《Flex4实战》是一本全面的指南,为web设计人员和开发人员提供了Flex的详细介绍。本书从基础讲起,介绍了有关表单和数据的知识,然后...
的性能监控,并且大大提高了编译速度。 《Flex 4实战》是一本全面的指南,为Web设计人员和 开发人员提供了Flex的详细介绍。本书从基础讲起,介绍了 有关表单和数据的知识,然后逐渐过渡到核心概念,如导 航、拖放...
Flex已经从原来构建flash应用程序的一种方式发展成为一个丰富的体系。Flex4中引入了新的ui组件,提供了更好的性能监控,并且大大提高了编译速度。
编译和部署使用RSL的Flex应用程序 25.6节. 在Flex Builder调试中创建和监视表达式 25.7节. 在Flex Builder中安装Ant窗口 25.8节. 为自动通用任务创建一个Ant构建文件 25.9节. 使用mxmlc和Ant编译Flex应用程序 25.10...
• 提高 ActionScript 3.0 性能 • 加快呈现速度 • 优化网络交互 • 使用音频和视频 • 优化 SQL 数据库性能 • 基准测试和部署应用程序 此文档重点介绍针对移动浏览器中运行的应用程序的最佳做法。不过,大多数...
促进扁平化,从而提高性能的视图层次结构 取决于内容的间距和分布的布局 需要适应各种不同屏幕尺寸的布局 FlexLayout和CSS需要Xamarin.Forms 3.0.0+ 我还用略有不同的方法为每个页面设置样式,包括: 直接造型 ...
新型转换器在对价格敏感的设计中结合了极高的功率密度和出色的散热性能,因此成为了数据中心等严苛要求应用的理想选择。 在开发转换器的过程中,Flex电源模块已注册10多项,这部分引领了转换器内散热管理领域...
ajax,flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实现的功能。比如Google机会已经把最基本的office应用都搬到了互联网上。当然便利的同时毫无疑问的也使页面的速度越来越慢。自己是做...
ajax,flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实现的功能。比如Google几乎已经把最基本的office应用都搬到了互联网上。当然便利的同时毫无疑问的也使页面的速度越来越慢。自己是做...
GlassLab SDK as3(Flash、Flex) 此 Flash 和 Flex 兼容 GlassLab SDK 允许游戏和其他应用程序连接到 GlassLab 游戏服务平台。 将此库集成到您的项目中的主要目的是跟踪游戏会话并存储这些会话的遥测数据。 该...
vue-router:为单页面应用提供的路由系统,使用了 Lazy Loading Routes 技术来实现异步加载优化性能 vuex:Vue 集中状态管理,在多个组件共享某些状态时非常便捷 vue-lazyload:实现图片懒加载,节省用户流量,优化...
2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 ...