<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>9STG.COM 游手好学 &#187; AS3优化</title>
	<atom:link href="http://www.9STG.com/tag/as3%e4%bc%98%e5%8c%96/feed" rel="self" type="application/rss+xml" />
	<link>http://www.9STG.com</link>
	<description>学游戏，玩游戏</description>
	<lastBuildDate>Tue, 07 Jun 2011 07:59:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>AS3 优化 之 FOR内循环</title>
		<link>http://www.9STG.com/archives/682.html</link>
		<comments>http://www.9STG.com/archives/682.html#comments</comments>
		<pubDate>Sun, 31 Jan 2010 16:54:29 +0000</pubDate>
		<dc:creator>yong</dc:creator>
				<category><![CDATA[游戏心得]]></category>
		<category><![CDATA[AS3优化]]></category>

		<guid isPermaLink="false">http://www.8ria.com/?p=682</guid>
		<description><![CDATA[写游戏只要有思路，就能实现，但这也只是从功能角度出发，能不能有好的效率，才是关键，于是想积累一些关于优化方面的知识。
关于AS3 FOR内循环的优化

当我们遍历一个数组的时候 ，你可能会这样写
private function testFor() : void
{
 var tmpVar:int;
 for(var i:Number=0; i&#60;testArray.length; i++)
 {
  tmpVar = testArray[i];
 }
}
执行这个函数50次，所用的时间是53.34毫秒。
如果我们将number类型改成int类型，如下
for(var i:int=0; i&#60;testArray.length; i++)
这样所执行的时间是35.58毫秒。
如果先把数组的长度计算出来，速度会更快
var l:int = testArray.length;
for(var i:int=0; i&#60;l; i++)
这个仅仅用了21.6毫秒
所以在for循环上int比number快，将length在循环外事先定义出来比直接写在for条件语句里面要快。
再看两段代码
var tmpVar:int;
for(var i:Number=0; i&#60;100000; i++)
{
 tmpVar = SomeClass.SOME_CONSTANT;
}
和
var tmpVar:int;
var myConstant:int = SomeClass.SOME_CONSTANT;
for(var i:Number=0; i&#60;100000; i++)
{
 tmpVar = myConstant;
}
前者的运行速度是34.08毫秒，后者的速度是 15.8毫秒
所以说 在FOR循环外先取到类属性，比拿到FOR循环内再去取类的属性的速度要快
变量在FOR内的定义
for(var i:int=0; i&#60;100000; i++)
{
 var v1:Number=10;
 var v2:Number=10;
 var v3:Number=10;
 var v4:Number=10;
 var v5:Number=10;
}
这个FOR需要用46.52毫秒，如果你用一个 var 去定义所有，将这些变量写成一行，像这样
for(var i:int=0; i&#60;100000; i++)
{
 var v1:Number=10, v2:Number=10, v3:Number=10, [...]]]></description>
			<content:encoded><![CDATA[<p>写游戏只要有思路，就能实现，但这也只是从功能角度出发，能不能有好的效率，才是关键，于是想积累一些关于优化方面的知识。</p>
<p>关于AS3 FOR内循环的优化</p>
<p><span id="more-682"></span></p>
<p>当我们遍历一个数组的时候 ，你可能会这样写</p>
<p>private function testFor() : void<br />
{<br />
 var tmpVar:int;</p>
<p> for(var i:Number=0; i&lt;testArray.length; i++)<br />
 {<br />
  tmpVar = testArray[i];<br />
 }<br />
}</p>
<p>执行这个函数50次，所用的时间是53.34毫秒。</p>
<p>如果我们将number类型改成int类型，如下</p>
<p>for(var i:int=0; i&lt;testArray.length; i++)</p>
<p>这样所执行的时间是35.58毫秒。</p>
<p>如果先把数组的长度计算出来，速度会更快</p>
<p>var l:int = testArray.length;</p>
<p>for(var i:int=0; i&lt;l; i++)</p>
<p>这个仅仅用了21.6毫秒</p>
<p><strong>所以在for循环上int比number快，将length在循环外事先定义出来比直接写在for条件语句里面要快。</strong></p>
<p>再看两段代码</p>
<p>var tmpVar:int;</p>
<p>for(var i:Number=0; i&lt;100000; i++)<br />
{<br />
 tmpVar = SomeClass.SOME_CONSTANT;<br />
}</p>
<p>和</p>
<p>var tmpVar:int;<br />
var myConstant:int = SomeClass.SOME_CONSTANT;</p>
<p>for(var i:Number=0; i&lt;100000; i++)<br />
{<br />
 tmpVar = myConstant;<br />
}</p>
<p>前者的运行速度是34.08毫秒，后者的速度是 15.8毫秒</p>
<p><strong>所以说 在FOR循环外先取到类属性，比拿到FOR循环内再去取类的属性的速度要快</strong></p>
<p>变量在FOR内的定义<br />
for(var i:int=0; i&lt;100000; i++)<br />
{<br />
 var v1:Number=10;<br />
 var v2:Number=10;<br />
 var v3:Number=10;<br />
 var v4:Number=10;<br />
 var v5:Number=10;<br />
}<br />
这个FOR需要用46.52毫秒，如果你用一个 var 去定义所有，将这些变量写成一行，像这样</p>
<p>for(var i:int=0; i&lt;100000; i++)<br />
{<br />
 var v1:Number=10, v2:Number=10, v3:Number=10, v4:Number=10, v5:Number=10;<br />
}</p>
<p>执行之间缩短到 19.74</p>
<p><strong>所以 在FOR循环内 尽量减少var这个关键字出现的次数，会提高效率</strong></p>
<p>逻辑运算符的适当运用也会提高效率的</p>
<p>for(var i:int=0; i&lt;100000; i++)<br />
{<br />
 var val1:int = 4 * 2;<br />
 var val2:int = 4 * 4;<br />
 var val3:int = 4 / 2;<br />
 var val4:int = 4 / 4;<br />
}</p>
<p>这段执行时间为 49.12 毫秒， 如果换成下面的代码，将会降到 35.56 毫秒</p>
<p>for(var i:int=0; i&lt;100000; i++)<br />
{<br />
 var val1:int = 4 &lt;&lt; 1;<br />
 var val2:int = 4 &lt;&lt; 2;<br />
 var val3:int = 4 &gt;&gt; 1;<br />
 var val4:int = 4 &gt;&gt; 2;<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9STG.com/archives/682.html/feed</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
	</channel>
</rss>

