论坛首页 编程语言技术论坛

Flash Player 10.1的性能有了显著的提高

浏览 11559 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-17  
vii779 写道
znjq 写道
mice_003 写道
基本可以无视,你会用10000+个文本么/1000个Sprite?so...
醒醒吧...

你不用不代表别人不会用到.
况且楼主在做测试.看不懂么?


试了一下,在小数量级别上(1000以下),10.0和10.1没有太大差距,相差也就10ms左右,500级别以下,几乎没什么差距了。如果在这个级别(大部分应用也是在这个级别上)上做优化,是没有太大的余地了。
znjq你用到的TextField大概在500级别以下吧,所以感觉不出来有多大性能提升。
不过TextLine在小数量级别下,还是比TextFied快些。可以试试用TextLine取代TextField


是的.没有那么多的.大概300以下.滚动的时候动态设置text,并不是全部设置,只设置变化的,没变化的只做位移.
可能我对性能要求比较苛刻吧.暂时没有达到心目中的理想效果.
3Q,回头试试TextLine
0 请登录后投票
   发表时间:2010-05-17   最后修改:2010-05-17
flash10 迅雷软件升级提示是这样写的:
该版本在winodw7+ie8下可能存在flash显示不正常,不建议该环境的用户升级
0 请登录后投票
   发表时间:2010-05-17   最后修改:2010-05-17
znjq 写道
vii779 写道
znjq 写道
mice_003 写道
基本可以无视,你会用10000+个文本么/1000个Sprite?so...
醒醒吧...

你不用不代表别人不会用到.
况且楼主在做测试.看不懂么?


试了一下,在小数量级别上(1000以下),10.0和10.1没有太大差距,相差也就10ms左右,500级别以下,几乎没什么差距了。如果在这个级别(大部分应用也是在这个级别上)上做优化,是没有太大的余地了。
znjq你用到的TextField大概在500级别以下吧,所以感觉不出来有多大性能提升。
不过TextLine在小数量级别下,还是比TextFied快些。可以试试用TextLine取代TextField


是的.没有那么多的.大概300以下.滚动的时候动态设置text,并不是全部设置,只设置变化的,没变化的只做位移.
可能我对性能要求比较苛刻吧.暂时没有达到心目中的理想效果.
3Q,回头试试TextLine


滚动的时候,累计起来要设置的数据量远远要大于300,如果数据很多,滚动又很快的话,瞬间要设置的值可能会过万的,TextFied性能跟不上,就会出现卡的情况。你现在的算法就是避免瞬间设置大量的值吧,不过滚动的越快,变化的也就越多,累计起来到了一定的量,还是会出现卡的情况。不知道你是不是在收到滚动事件以后就立即设置数据了,可以考虑在滚动事件里面只记录下当前的位置,另外的一个定时器,隔一段时间,检查滚动位置是否变化,并根据当前的滚动位置来设置数据,调整好一个合适的间隔值,以达到平滑滚动的效果。

0 请登录后投票
   发表时间:2010-05-17   最后修改:2010-05-17
vii779 写道
znjq 写道
vii779 写道
znjq 写道
mice_003 写道
基本可以无视,你会用10000+个文本么/1000个Sprite?so...
醒醒吧...

你不用不代表别人不会用到.
况且楼主在做测试.看不懂么?


试了一下,在小数量级别上(1000以下),10.0和10.1没有太大差距,相差也就10ms左右,500级别以下,几乎没什么差距了。如果在这个级别(大部分应用也是在这个级别上)上做优化,是没有太大的余地了。
znjq你用到的TextField大概在500级别以下吧,所以感觉不出来有多大性能提升。
不过TextLine在小数量级别下,还是比TextFied快些。可以试试用TextLine取代TextField


是的.没有那么多的.大概300以下.滚动的时候动态设置text,并不是全部设置,只设置变化的,没变化的只做位移.
可能我对性能要求比较苛刻吧.暂时没有达到心目中的理想效果.
3Q,回头试试TextLine


滚动的时候,累计起来要设置的数据量远远要大于300,如果数据很多,滚动又很快的话,瞬间要设置的值可能会过万的,TextFied性能跟不上,就会出现卡的情况。你现在的算法就是避免瞬间设置大量的值吧,不过滚动的越快,变化的也就越多,累计起来到了一定的量,还是会出现卡的情况。不知道你是不是在收到滚动事件以后就立即设置数据了,可以考虑在滚动事件里面只记录下当前的位置,另外的一个定时器,隔一段时间,检查滚动位置是否变化,并根据当前的滚动位置来设置数据,调整好一个合适的间隔值,以达到平滑滚动的效果。


间隔值的做法我有考虑过,可是合适的间隔值应该和本机的性能有关系,很难确定一个合适的值.
滚动条的算法我已经优化很多了.因为做一个类似excel的表格,所以滚动条并不是每移动1px都触发渲染事件的.而是移动一定距离,比如一列的宽度后才触发的.所以除非移动特别快(或者滚动条的宽度很小)才可能出现堵塞的情况.
每次触发事件,也并不是直接调用渲染事件(这样会很卡)
而是增加ENTER_FRAME的一个函数
		private function invalidLayout():void {
			if(!invalid){
				invalid=true;
				addEventListener(Event.ENTER_FRAME,onInvalidateLayout);
			}
		}
		
		private function onInvalidateLayout(event:Event):void{
			removeEventListener(Event.ENTER_FRAME,onInvalidateLayout);
			layout();
			invalid=false;
		}

而且并不是每个TextField滚动的时候都设置的,我做了判断只对新出现的cell进行设置,其他的只是做位移.
所有的textfield也是缓存重复使用,滚动的时候不再创建新的TextField.
我的帧数设置大概30帧,全部英文的情况下滚动大概能跑到27-28帧,中文情况下大概只有14-15帧
卡倒是不卡,就是滚动的时候还是稍微有点延迟感.以后慢慢加上其他功能的话,这种滞后感可能就会更明显.
0 请登录后投票
   发表时间:2010-05-17  
znjq 写道
vii779 写道
znjq 写道
vii779 写道
znjq 写道
mice_003 写道
基本可以无视,你会用10000+个文本么/1000个Sprite?so...
醒醒吧...

你不用不代表别人不会用到.
况且楼主在做测试.看不懂么?


试了一下,在小数量级别上(1000以下),10.0和10.1没有太大差距,相差也就10ms左右,500级别以下,几乎没什么差距了。如果在这个级别(大部分应用也是在这个级别上)上做优化,是没有太大的余地了。
znjq你用到的TextField大概在500级别以下吧,所以感觉不出来有多大性能提升。
不过TextLine在小数量级别下,还是比TextFied快些。可以试试用TextLine取代TextField


是的.没有那么多的.大概300以下.滚动的时候动态设置text,并不是全部设置,只设置变化的,没变化的只做位移.
可能我对性能要求比较苛刻吧.暂时没有达到心目中的理想效果.
3Q,回头试试TextLine


滚动的时候,累计起来要设置的数据量远远要大于300,如果数据很多,滚动又很快的话,瞬间要设置的值可能会过万的,TextFied性能跟不上,就会出现卡的情况。你现在的算法就是避免瞬间设置大量的值吧,不过滚动的越快,变化的也就越多,累计起来到了一定的量,还是会出现卡的情况。不知道你是不是在收到滚动事件以后就立即设置数据了,可以考虑在滚动事件里面只记录下当前的位置,另外的一个定时器,隔一段时间,检查滚动位置是否变化,并根据当前的滚动位置来设置数据,调整好一个合适的间隔值,以达到平滑滚动的效果。


间隔值的做法我有考虑过,可是合适的间隔值应该和本机的性能有关系,很难确定一个合适的值.
滚动条的算法我已经优化很多了.因为做一个类似excel的表格,所以滚动条并不是每移动1px都触发渲染事件的.而是移动一定距离,比如一列的宽度后才触发的.所以除非移动特别快(或者滚动条的宽度很小)才可能出现堵塞的情况.
每次触发事件,也并不是直接调用渲染事件(这样会很卡)
而是增加ENTER_FRAME的一个函数
		private function invalidLayout():void {
			if(!invalid){
				invalid=true;
				addEventListener(Event.ENTER_FRAME,onInvalidateLayout);
			}
		}
		
		private function onInvalidateLayout(event:Event):void{
			removeEventListener(Event.ENTER_FRAME,onInvalidateLayout);
			layout();
			invalid=false;
		}

而且并不是每个TextField滚动的时候都设置的,我做了判断只对新出现的cell进行设置,其他的只是做位移.
所有的textfield也是缓存重复使用,滚动的时候不再创建新的TextField.
我的帧数设置大概30帧,全部英文的情况下滚动大概能跑到27-28帧,中文情况下大概只有14-15帧
卡倒是不卡,就是滚动的时候还是稍微有点延迟感.以后慢慢加上其他功能的话,这种滞后感可能就会更明显.

先完成功能再说,等Flash的性能再上一个台阶吧,现在凑合一下还是可以接受的,个人感觉性能还远远不如原来传统的桌面程序。

0 请登录后投票
   发表时间:2010-05-17  
看大家说的 我都不想用flash了
0 请登录后投票
   发表时间:2010-05-18  
Flash10.1采用了直接调用显卡驱动接口进行图形渲染的机制。而以前的版本则是调用操作系统GUI的接口,故此,渲染性能有了很大提升。
0 请登录后投票
   发表时间:2010-05-18  
这是Flex框架的福音,UI体验上会有巨大的改善。

Flash Player9以后,速度已经很不错,但包装n层的Flex UI在响应速度上的交互体验确实不好,这回应该有大的改善,至少普通用户不会感觉比传统HTML拼出的UI慢太多。
0 请登录后投票
   发表时间:2010-05-18  
菜鸟路过,顺便拜膜一下个大神,,,哈哈
0 请登录后投票
   发表时间:2010-05-18  
比较了一下Html5 canvas 的fillText方法,和Flash 10.1 的TextFied的text属性

用chrome4.1做的测试,两者相差不大500段文本只相差几毫秒,上万级别的也就相差几十毫秒,看看大家都在同一起跑线上。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics