<?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>Nicolas Prof blog &#187; Performance</title>
	<atom:link href="http://blog.nicolasprof.com/tag/performance/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.nicolasprof.com</link>
	<description>Flash блог</description>
	<lastBuildDate>Thu, 29 Dec 2011 17:47:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PathFinder : Benchmark</title>
		<link>http://blog.nicolasprof.com/pathfinder-benchmark</link>
		<comments>http://blog.nicolasprof.com/pathfinder-benchmark#comments</comments>
		<pubDate>Mon, 04 Jan 2010 15:50:29 +0000</pubDate>
		<dc:creator>Nicolas Prof</dc:creator>
				<category><![CDATA[Эксперименты]]></category>
		<category><![CDATA[AS2]]></category>
		<category><![CDATA[PathFinder]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blog.nicolasprof.com/?p=411</guid>
		<description><![CDATA[После внесения серьезных изменений в алгоритм «А» звезда (удалось отказаться полностью от списков, и тем самым операций splice), решил сделать тест производительности алгоритмов. На время влияет расстояние между начальной и конечной точками(длина пути). Смотреть в действии P.S. На практике, нерационально использовать алгоритм Дейкстры, где граф имеет вид сетки.]]></description>
			<content:encoded><![CDATA[<p>После внесения серьезных изменений в алгоритм «А» звезда (удалось отказаться полностью от списков, и тем самым операций splice), решил сделать тест производительности алгоритмов.<br />
На время влияет расстояние между начальной и конечной точками(длина пути).</p>
<p><a href="/f/pathfinder_benchmark.swf" rel="shadowbox;height=450;width=618" title="PathFinder - Benchmark">Смотреть в действии</a></p>
<p>P.S.<br />
На практике, нерационально использовать алгоритм Дейкстры, где граф имеет вид сетки.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nicolasprof.com/pathfinder-benchmark/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Powered by Alternativa3D</title>
		<link>http://blog.nicolasprof.com/powered-by-alternativa3d</link>
		<comments>http://blog.nicolasprof.com/powered-by-alternativa3d#comments</comments>
		<pubDate>Thu, 02 Jul 2009 15:30:15 +0000</pubDate>
		<dc:creator>Nicolas Prof</dc:creator>
				<category><![CDATA[Эксперименты]]></category>
		<category><![CDATA[Alternativa3D]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[Papervision]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://blog.nicolasprof.com/?p=292</guid>
		<description><![CDATA[Реализация моего портфолио прошла долгий и тернистый путь, от маленькой трешовой флешки с кровью и рваной бумагой с звуками из игры «Носферату», до достойного 3D приложения. Первая 3D реализация использовала Papervision Great White Alpha, т.е. самая первая и сырая версия Papervision 2.0. Движек выдавал в среднем 24 fps на «игровом» компьютере. Следующая версия портфолио уже [...]]]></description>
			<content:encoded><![CDATA[<p>Реализация моего портфолио прошла долгий и тернистый путь, от маленькой трешовой флешки с кровью и рваной бумагой с звуками из игры «Носферату», до достойного 3D приложения.<br />
Первая 3D реализация использовала Papervision Great White Alpha, т.е. самая первая и сырая версия Papervision 2.0. Движек выдавал в среднем 24 fps на «игровом» компьютере. Следующая версия портфолио уже использовала Away3D, интерактивность немножко прихрамывала, и API несильно отличалось, и все так же была возможность использовать Sprite материалы. Так же, кубики уже не вращались все время, а только когда пользователь использовал интерактивные возможности, т.е. сцена рендерилась при изменениях. FPS при рендеринге все так же «проседало».</p>
<p>И вот 4.0 версия портфолио, которая использует Alternativa3D. Вся навигация на сайте построена на мыши: левая, правая клавиши и колесико. Пропал МР3 плеер. На сайте два режима навигации, как вам идея? Почему не предоставить пользователю несколько режимов навигации, и пусть он выбирает более удобный для него. Так и появилась альтернативная навигация.<br />
Производительность у нового движка отличная. Разработчики создали свою отображаемую модель, начав все с нуля (Object3D extends Object). Все бы хорошо, но вот очень нехватает параметра alpha и visible. Так же есть некоторые косяки, после масштабирования объектов, иногда начинают появляться артефакты в виде дополнительных треугольников на поверхности. Так же есть баг с рендерингом текстуры: если объект масштабируется, при этом происходит анимация вершин, и все это происходит за видом камеры, то текстуры не обновляются, и имеем обычный белый объект. Из всех 3-ёх 3D движков, Alternativa3D имеет самый «приятный» API и самую высокую производительность. Если разработчики еще добавят возможность использования DisplayObjectContainer как текстуры, то это будет самый лучший движек для создания Pure 3D Flash сайтов.</p>
<p>P.S.<br />
Посвящается RSS Reader&#8217;ам.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nicolasprof.com/powered-by-alternativa3d/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tips &amp; Tricks 2</title>
		<link>http://blog.nicolasprof.com/tips-tricks-2</link>
		<comments>http://blog.nicolasprof.com/tips-tricks-2#comments</comments>
		<pubDate>Thu, 02 Jul 2009 15:00:42 +0000</pubDate>
		<dc:creator>Nicolas Prof</dc:creator>
				<category><![CDATA[Опыт]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[trick]]></category>

		<guid isPermaLink="false">http://blog.nicolasprof.com/?p=250</guid>
		<description><![CDATA[1. Быстрое получение значения после запятой. [as] public function getDecimal($value : Number) : Number { return $value &#8211; ($value >> 0); } [/as] 2. Что бы не было проблем с получением DisplayObject&#8217;а после использования myMovieClipHolder.gotoAndStop(). Используйте Event.ENTER_FRAME, до того как событие отработает один раз. Использование MovieClip распространено в многоязычных версиях сайтов, сделав лэйблы: ru, en, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1.</strong> Быстрое получение значения после запятой.<br />
[as]<br />
public function getDecimal($value : Number) : Number {<br />
	return $value &#8211; ($value >> 0);<br />
}<br />
[/as]</p>
<p><strong>2.</strong> Что бы не было проблем с получением DisplayObject&#8217;а после использования myMovieClipHolder.gotoAndStop(). Используйте Event.ENTER_FRAME, до того как событие отработает один раз. Использование MovieClip распространено в многоязычных версиях сайтов, сделав лэйблы: ru, en, ua.<br />
[as]<br />
private function onChangelanguage(e : Event) : void {<br />
	if(_k > 0){<br />
		this.removeEventListener(Event.ENTER_FRAME, onChangelanguage);<br />
		registerMC();<br />
	}<br />
	_k++;<br />
}<br />
[/as]</p>
<p><strong>3.</strong> Являюсь ярым поклонником TweenLite разрабатываемого Jack Doyle. Не так давно, проект стал платформой для программной анимации, и легко расширяется плагинами. Я с вами поделюсь двумя плагинами, один из которых я использую в 40% всех программных анимаций &#8211; <a href="/downloads/AutoDeletePlugin.rar">AutoDeletePlugin</a>. <a href="/downloads/ShortRadianRotationPlugin.rar">ShortRadianRotationPlugin</a> &#8211; позволяет работать с радианами, как это сделано в Alternativa 3D. AutoDeletePlugin &#8211; применяется только для DisplayObject. По завершению анимации, больше не нужно использовать onComplete, что бы удалить DisplayObject.</p>
<p><strong>4.</strong> Быстрый и удобный, но не самый надежный способ убрать интерактивность с элементов интерфейса. Допустим есть некая форма, элементы которой содержатся в одном контейнере, пусть он будет называться formHolder.<br />
[as]<br />
private function toggleForm($state : Boolean) : void {<br />
	formHolder.mouseChildren = $state;<br />
}<br />
[/as]<br />
Главный минус такой реализации, что необходимо следить за теми элементами интерфейса, которые требуют игнорирования событий от мыши. К примеру лейблы на кнопках, если таких элементов нет, то можете использовать этот метод смело. Так же можно дать понять пользователю, что форма действительно неактивная, добавив одну строчку кода:<br />
[as]<br />
private function toggleForm($state : Boolean) : void {<br />
	formHolder.mouseChildren = $state;<br />
	formHolder.alpha= ($state) ? 1 : 0.6;<br />
}<br />
[/as]</p>
<p><strong>5.</strong> Разрабатывая Pure AS3 проект, вы не сможете использовать «плюшку» Flash Player 10 для работы с текстом. Так как новый фреймворк для работы с текстом использует совсем другой тип встроенного текста, обычный встроенный текст в проекте имеет тип EMBEDDED, когда необходим EMBEDDED_CFF. Решить эту проблему сможет лишь новый Flex SDK 4 версии с расширенным метатэгом Embbed. Но учтите, шрифт будет встроен дважды. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nicolasprof.com/tips-tricks-2/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Необъятный Blur</title>
		<link>http://blog.nicolasprof.com/neobyatnyj-blur</link>
		<comments>http://blog.nicolasprof.com/neobyatnyj-blur#comments</comments>
		<pubDate>Fri, 12 Jun 2009 12:06:43 +0000</pubDate>
		<dc:creator>Nicolas Prof</dc:creator>
				<category><![CDATA[Эксперименты]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Bitmap]]></category>
		<category><![CDATA[Blur]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[trick]]></category>

		<guid isPermaLink="false">http://blog.nicolasprof.com/?p=252</guid>
		<description><![CDATA[Были ли у вас случаи, когда ограничения Flash не позволяли использовать фильтр? Есть очень простой обходной путь. Если нам не разрешают применить фильтр к самому объекту, значит применим к его детям. Метод работает быстро, так как применение фильтра довольно таки быстрая операция. В этом можете убедиться в примере. Так же есть зависимость, что количество детей [...]]]></description>
			<content:encoded><![CDATA[<p>Были ли у вас случаи, когда ограничения Flash не позволяли использовать фильтр?<br />
Есть очень простой обходной путь. Если нам не разрешают применить фильтр к самому объекту, значит применим к его детям. Метод работает быстро, так как применение фильтра довольно таки быстрая операция. В этом можете убедиться в примере. Так же есть зависимость, что количество детей фильтруемого объекта прямо пропорционально кратности замедления процесса, т.е. если 100 детей, то время применения фильтра будет в 100 раз медленней. Вместо 10мс, будет 1сек при 10 000 итераций, согласитесь, что столько итераций в секунду в  работающем проекте невозможно, так что у нас в запасе хорошие резервы, и мы вполне вольны использовать такую технику с каким либо Tween движком.</p>
<p><a href="/f/demoBlur.swf" rel="shadowbox;height=300;width=500" title="Blur">Смотреть в действии</a></p>
<p>P.S.<br />
Кнопка Broke Holder, изменяет габариты спрайта на 5000 рх.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nicolasprof.com/neobyatnyj-blur/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips &amp; Tricks 1</title>
		<link>http://blog.nicolasprof.com/tips-tricks-1</link>
		<comments>http://blog.nicolasprof.com/tips-tricks-1#comments</comments>
		<pubDate>Wed, 03 Jun 2009 17:17:45 +0000</pubDate>
		<dc:creator>Nicolas Prof</dc:creator>
				<category><![CDATA[Опыт]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[trick]]></category>

		<guid isPermaLink="false">http://blog.nicolasprof.com/?p=246</guid>
		<description><![CDATA[Как и ранее обещал, начинаю рубрику полезных советов, наблюдений и уклонов от граблей. Поехали. Есть форма построенная на собственной разработки UI компонентах, очень любимых нами, или может даже с помощью стандартных компонентов, которые кстати очень даже качественно написаны. И при отправке формы, или при каких либо других действиях требующих от нас временного блокирования формы кто [...]]]></description>
			<content:encoded><![CDATA[<p>Как и ранее обещал, начинаю рубрику полезных советов, наблюдений и уклонов от граблей. Поехали.</p>
<ol>
<li>Есть форма построенная на собственной разработки UI компонентах, очень любимых нами, или может даже с помощью стандартных компонентов, которые кстати очень даже качественно написаны. И при отправке формы, или при каких либо других действиях требующих от нас временного блокирования формы кто то возможно попробует перебрать список UI компонентов, и если это наши компоненты вызвать некий метод ui.active = false, или если стандартные, то ui.enabled = false. Но такая операция трудоемкая, совсем никому не нужный лишний цикл, плюс ко всему ошибки, если форма сложная, то еще и проверки. Так вот, делать это все не надо, потому как есть намного изящный и на порядок более быстрый подход, а так же из-за простоты реализации еще и снижающий вероятность ошибки. Для блокировки форм, и любых других интерактивных объектов, лучше всего использоваться Sprite. Если необходимо показать какое то модальное окно, то просто добавляем на Stage, наш блокирующий слой, у меня как правило он называется незамысловато _blockLayer. Блокирующий слой заливается посредством Graphics любым цветом с полной прозрачностью и не одно MouseEvent событие не пройдет сквозь блокирующий слой. А еще более быстрый способ, это не использовать Alpha, а использовать BlendMode. Так же закрашиваем блокирующий слой черным (кто не знает, это 0 или умнее 0х000000), и ставим _blockLayer.blendMode = BlendMode.ERASE.</li>
<li>Отдавайте предпочтение маскам реализованным за счет Rectangle, т.е. anyDisObject.scrollRect = new Rectangle(0,0,100,50). Но не забывайте, для премущества от ScrollRect необходимо маскируемый объект кэшировать как изображение cacheAsBitmap = true. Есть несколько неудобств при использовании ScrollRect &#8211; при перемещении, необходимо постоянно обновлять прямоугольник anyDisObject.scrollRect = _dynamicRectangleRef, ну и естественно, что бы не создавать каждый раз новый объект, правильно изначально создать Rectangle, и менять нужные нам параметры: x, y, width, height.</li>
<li>Перед удаление объекта с Display List, сделайте объект невидимым, objToDelete.visible = false. Освободите немного памяти, которой всегда нехватает.</li>
<li>Если ссылке на объект типа Sound назначить null, то тяжелый объект будет сразу высвобожден с памяти.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.nicolasprof.com/tips-tricks-1/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Performance with Visible param and Display List</title>
		<link>http://blog.nicolasprof.com/performance-with-visible-param-and-display-list</link>
		<comments>http://blog.nicolasprof.com/performance-with-visible-param-and-display-list#comments</comments>
		<pubDate>Tue, 07 Apr 2009 19:20:39 +0000</pubDate>
		<dc:creator>Nicolas Prof</dc:creator>
				<category><![CDATA[Эксперименты]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blog.nicolas.org.ua/?p=198</guid>
		<description><![CDATA[Очень давно хотел провести тест на предмет того, как влияет на производительность параметр visible, а так же добавление и удаление объекта из Display List&#8217;а. В тесте используется объект который имеет сложный вектор, тысячи точек. Объект можно удалять/добавлять в Display List, а так же запустить анимацию, и провести те же операции. После этого теста, очевидна польза [...]]]></description>
			<content:encoded><![CDATA[<p>Очень давно хотел провести тест на предмет того, как влияет на производительность параметр visible, а так же добавление и удаление объекта из Display List&#8217;а.<br />
В тесте используется объект который имеет сложный вектор, тысячи точек. Объект можно удалять/добавлять в Display List, а так же запустить анимацию, и провести те же операции.<br />
После этого теста, очевидна польза visible (освобождение памяти) параметра, удаление из Display List&#8217;а спасает лишь в случаи с анимацией (хотя и это было так же интересно, будет ли какая то нагрузка, если объекта нет в дисплей листе).</p>
<p><a href="/f/memoryTest.swf" rel="shadowbox;height=400;width=550" title="Performance Test">Смотреть в действии</a></p>
<p>P.S.<br />
Тот кто угадает что изображено в исходном элементе используемом для построения вектора, получит плюшку.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nicolasprof.com/performance-with-visible-param-and-display-list/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

