Показать сообщение отдельно
Старый 09.04.2014, 17:07
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 1  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
По умолчанию Как после компиляции выглядят ссылки на свойства

Всегда думал, что если в цикле обращаться к свойству композитносозданного объекта,
то лучше это значение сохранить в локальную переменную. Думал, что обратится к локальной переменной быстрее, чем к свойству, путь к которому состоит из нескольких ссылок.
А начал проверять и все оказалось наоборот.
Вот результаты при чтении -
Код AS3:
 package 
{
	import flash.display.Sprite;
	import flash.utils.getTimer;
	public class TestSpeed4 extends Sprite
	{
		public function TestSpeed4() 
		{
			var array:Array = [];
			for (var i:int = 0; i < 500; i++) 
			{
				array[i] = 0;
			}
			var value:ValueClass = new ValueClass();
			var boolean:Boolean;
			var valueValue:int = value.value;
			for (var j:int = 0; j < 100000; j++)
			{
				var length:int = array.length;
				while (length--)
				{
					boolean = array[length] > value.value;// 12 000
					boolean = array[length] > valueValue;// 13 000
				}
			}
 
			time = testSpeed();
			trace(time-now, now);
		}
 
		private var time:Number = 0;
		private var now:Number = 0;
		private function testSpeed():Number
		{
			return getTimer();
		}
 
	}
 
}
А вот при записи ( тут я даже локальную переменную не присваивал свойству другого объекта,а то разница и была бы опять в секунду ) -
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.utils.getTimer;
	public class TestSpeed4 extends Sprite
	{
		public function TestSpeed4() 
		{
 
			var value:ValueClass = new ValueClass();
			var valueValue:int = value.value;
			for (var j:int = 0; j < 100000; j++)
			{
				var length:int = 500;
				while (length--)
				{
					value.value += 1;// 11 000
					valueValue += 1;// 11 100;
				}
			}
 
			time = testSpeed();
			trace(time-now, now);
		}
 
		private var time:Number = 0;
		private var now:Number = 0;
		private var _target:Sprite;
		private function testSpeed():Number
		{
			return getTimer();
		}
 
	}
 
}
Не уверен в правильности вопроса, но - как после компиляции, выглядит ссылки на свойства других объектов, если операции с локальными свойствами занимают больше времени?