- 浏览: 1056200 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
http://bbs.9ria.com/thread-74620-1-1.html
资讯类型: 原创
来源页面: http://riaoo.com/?p=2071
资讯原标题: 探讨一下是什么原因导致for each语句效率减低
资讯原作者: Y.Boy
我的评论:关于 for 、for in、for each 的效率,这是一个有趣的话题,一家一起来讨论。
对这篇文你有啥看法,跟贴说说吧!欢迎口水和板砖,哈哈。欢迎大家和我们一同分享更多资讯。
众所周知,在使用 for(var i:int=0; i<array.length; i++) 语句时,为提高效率,都把 array.length 拿在循环体外部,形如:
把 array.length 拿到外面去会提高效率,是因为减少了 array.length 语句的执行。而 Array 的 length 属性是一个 getter ,其实它相当于是一个函数,像:
减少了这个函数的执行次数,所以提高了效率。在用flash builder编写代码时,在代码提示上看到有“=”号的属性,你就要小心了,因为它是一个可能包含复杂逻辑的 getter 属性:
其实,类似的,在 for in 或 for each 语句,也应该理所当然地存在这种情况。刚看到腾讯flash开发博客上这篇文章:《另一个很容易让人忽视并影响效率的for循环写法》。我的兴致就来了,心情再次滂湃起来。文章中说道,在使用 for each 语句时,也应该把属性放在外面,就像:
假如我们把 obj.prop 写进 for each 里:for each (var o:* in obj.prop) ,给人的感觉就是:每执行一次循环,obj.prop 都被访问一次(这就是降低效率的原因了)。但,实际上,它是不是这样子的呢?现在,你开始怀疑了,其实我也在怀疑,我也很好奇。我以前看到旧同事在写代码时,就喜欢把 obj.prop 放在 for each 里,我劝告他不要这么写,obj.prop 会被多次访问的。他说无所谓的,不影响效率。最终,我认为他是正确(其实他也不知道为什么不会影响效率,-_-!!)。经过我的试验,结论是:放在 for each 里的 obj.prop 不会被多次访问,它有且只有一次被访问。在随后的多次循环时,obj.prop 都不再被访问。这种情况跟第一种情况不同。
大家不妨写个 getter 属性来测试一下:
这是类 A :
最终输出的结果是:
get obj
get obj
for each
for each
for each
for each
for each
for each
复制代码
“get obj” 只输出了两次,说明了 for each 语句里,a.obj 属性只被访问了一次。之后的循环里,都没有被访问了。我在猜想:是不是 flash player 对 a.obj 这个属性进行了缓存,效果就像把 array.length 放在循环语句外面一样!?
总结一下关于我的看法:我不知道这样分析是否正确,是否有充分的理由来说明把 a.obj 属性放在 for each 语句里不会影响效率。为了安全起见,还是统一把所有 getter 形式的属性放在最外面。
RIAMeeting如是说:
对于循环优化是子表达式消除问题(CSE),将循环引用表达式放在循环内部,据说在Java中并不会引起性能问题(即时编译优化),但AVM2的CSE实现还不是太好,所以我们需要手工优化代码。具体请参阅AVM2的核心机制说明。
标签:flash效率, for, for each, for in, getter
资讯类型: 原创
来源页面: http://riaoo.com/?p=2071
资讯原标题: 探讨一下是什么原因导致for each语句效率减低
资讯原作者: Y.Boy
我的评论:关于 for 、for in、for each 的效率,这是一个有趣的话题,一家一起来讨论。
对这篇文你有啥看法,跟贴说说吧!欢迎口水和板砖,哈哈。欢迎大家和我们一同分享更多资讯。
众所周知,在使用 for(var i:int=0; i<array.length; i++) 语句时,为提高效率,都把 array.length 拿在循环体外部,形如:
var length:uint = array.length; for(var i:int = 0; i < length; i++) { }
把 array.length 拿到外面去会提高效率,是因为减少了 array.length 语句的执行。而 Array 的 length 属性是一个 getter ,其实它相当于是一个函数,像:
public function get length():uint { // 可能包含复杂的逻辑 }
减少了这个函数的执行次数,所以提高了效率。在用flash builder编写代码时,在代码提示上看到有“=”号的属性,你就要小心了,因为它是一个可能包含复杂逻辑的 getter 属性:
其实,类似的,在 for in 或 for each 语句,也应该理所当然地存在这种情况。刚看到腾讯flash开发博客上这篇文章:《另一个很容易让人忽视并影响效率的for循环写法》。我的兴致就来了,心情再次滂湃起来。文章中说道,在使用 for each 语句时,也应该把属性放在外面,就像:
var prop:Object = obj.prop; for each (var o:* in prop) { }
假如我们把 obj.prop 写进 for each 里:for each (var o:* in obj.prop) ,给人的感觉就是:每执行一次循环,obj.prop 都被访问一次(这就是降低效率的原因了)。但,实际上,它是不是这样子的呢?现在,你开始怀疑了,其实我也在怀疑,我也很好奇。我以前看到旧同事在写代码时,就喜欢把 obj.prop 放在 for each 里,我劝告他不要这么写,obj.prop 会被多次访问的。他说无所谓的,不影响效率。最终,我认为他是正确(其实他也不知道为什么不会影响效率,-_-!!)。经过我的试验,结论是:放在 for each 里的 obj.prop 不会被多次访问,它有且只有一次被访问。在随后的多次循环时,obj.prop 都不再被访问。这种情况跟第一种情况不同。
大家不妨写个 getter 属性来测试一下:
var a:A = new A(); var obj:Object = a.obj; // 在这里 a.obj 属性被访问一次 obj.a = “a”; obj.b = “b”; obj.c = “c”; obj.d = “d”; obj.e = “e”; obj.f = “f”;for each (var o:* in a.obj) // a.obj 属性只在第一次被访问,前后总共被访问两次 { trace(“for each”);
这是类 A :
package { public class A { private var _obj:Object;public function A() { _obj = {}; }public function get obj():Object { trace(“get obj”); // 每当被访问此属性时,都会输出”get obj” return _obj; }} }
最终输出的结果是:
get obj
get obj
for each
for each
for each
for each
for each
for each
复制代码
“get obj” 只输出了两次,说明了 for each 语句里,a.obj 属性只被访问了一次。之后的循环里,都没有被访问了。我在猜想:是不是 flash player 对 a.obj 这个属性进行了缓存,效果就像把 array.length 放在循环语句外面一样!?
总结一下关于我的看法:我不知道这样分析是否正确,是否有充分的理由来说明把 a.obj 属性放在 for each 语句里不会影响效率。为了安全起见,还是统一把所有 getter 形式的属性放在最外面。
RIAMeeting如是说:
对于循环优化是子表达式消除问题(CSE),将循环引用表达式放在循环内部,据说在Java中并不会引起性能问题(即时编译优化),但AVM2的CSE实现还不是太好,所以我们需要手工优化代码。具体请参阅AVM2的核心机制说明。
标签:flash效率, for, for each, for in, getter
发表评论
-
[心得] for和for...in...遍历数组的效率,与tonyemotion版完全不同
2011-08-22 21:46 0首先tonyemotion版地址:http://bbs.9ri ... -
[转]TLF 文字布局框架的内存问题
2011-08-09 00:34 0http://bbs.airia.cn/home.php? ... -
[转]flash/actionscript3 性能优化汇总
2011-07-27 01:38 0http://www.iamcoding.com/?p=173 ... -
[转]swf / actionscript3 执行顺序
2011-07-27 01:36 0http://www.iamcoding.com/?p=198 ... -
[转]flash重绘机制总结
2011-07-27 01:35 0重绘,是flash性能的一 ... -
文字如何缩放?
2011-07-26 23:20 1189做个文件打印的东东,需要预览,就是把保存的Sprite类缩小再 ... -
AS3的一些优化计算方法
2011-07-06 12:56 0http://www.cnitblog.com/flashli ... -
[转] 关取绝对值的效率问题
2011-05-26 23:47 1478由一个项目用到很多的绝对值,我简单测试了一下,我想知道Math ... -
[转]Flash终极瘦身术--flash减k
2011-05-25 16:40 1219... -
[新手常见问题] Flash代码优化(整理)
2011-05-18 00:12 0看到代码优化就给复制发上来了,发了才发现文章太旧了,部分过时了 ... -
[转] 蛋疼的adobe,他让我蛋疼了一个下午。buttonMode的问题。。。
2011-05-16 21:05 0在为公司整理架构的时候写button组建。。。发现了一个蛋疼问 ... -
Flash的运行机制:异步单线程
2011-05-11 00:34 1905http://bbs.9ria.com/thread-4862 ... -
[心得] AS3游戏中可视对象上限及位图相关的内存消耗实测
2011-04-29 22:44 0http://bbs.9ria.com/viewthread. ... -
使用弱引用
2011-04-28 19:07 0//true表示使用弱引用 var di ... -
[转] 弱引用。
2011-04-27 01:18 0http://bbs.9ria.com/viewthread. ... -
重新关注AS垃圾回收问题
2011-04-12 00:47 0http://www.shch8.com/blog/post/ ... -
[转]Flash 平台应用性能优化官方文档
2011-04-08 19:54 01. 关于存储 使用适当 ... -
[转]位图数据内存优化
2011-03-31 15:55 2738最近协助同事对Flash相册项目做了程序优化,觉得每个优化步骤 ... -
[转]AS3中Timer,setTimeout,setInterval对gc的对比
2011-03-28 17:08 0http://hongweimail.blog.163.com ... -
[转]自制中文字库嵌入——单色图形面积压缩/加密法
2011-03-23 19:59 1932自制中文字库嵌入—— ...
相关推荐
VB For each循环实例 VB For each循环实例
For 和 Foreach 的效率问题,先猜一下,再运行一下,看猜的对不对。
for_each 返回值实例详解;
for_each遍历vector vector中可以是基本类型(int,double,char,string) 也可以是类类型
jdk1.5以上版本中新增加的特性描述,带有代码例子让你很清晰的明白jdk的 常量 、枚举、 for each、反射等各种新的特性,相信需要的你,一定满足。
ASP是目前学习网页动态程序最基本的程序语言之一。通过对本教程的学习实践,你能更快的掌握ASP在动态网页设计中的一些问题,同时为制作网站等提供最大的方便!
houdini fft 使用三层for each结构 以及for 问题
之前听说火狐的JS引擎支持for each in的语法,例如下述的代码: 代码如下:var arr = [10,20,30,40,50];for each(var k in arr)console.log(k); 即可直接遍历出arr数组的内容。 由于只有FireFox才支持,所以几乎...
Iterate a function on each entry of a directory for Linux.
两个的作用都用来遍历对象,但为什么有了for in语句了还要for each in语句呢,后来看了下for each in开发的文档,for each in是作为E4X标准的一部分在javascript 1.6中发布的,而且它不是ECMAScript标准的一部分
今天学习了JavaScript里面的for循环以及if的判断语句 for(初始值;循环条件;操作){ 满足条件要执行的代码语句 } 初始值:循环前的初始化变量,通常为赋值表达式:建议用var赋值,可以加快运行速度。 循环条件:...
java 3d api for a cube with 3d dimension as we know it s most difficult to learn, so i have this code for help each other.
资源包括:19道SQL语句查询题目及答案、建表SQL语句、题目相关的表截图。答案中除了包含intersect、except关键词的答案,其余都在MySQL上跑过,确保运行无误(MySQL不支持intersect、except关键词),因为脑细胞死得...
主要介绍了jQuery使用each方法与for语句遍历数组,结合实例形式简单对比分析了两种方法在遍历数组时的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
MATLAB工具箱大全-将多重循环转为单重循环-For-Each
jdk1.5新特性,泛型,for:each
Excel VBA运用,删除行,循环For each next,rows.count计算,添加指定数据等, 打开Excel启用宏,然后按快捷键Ctrl+E