Как стать автором
Обновить
73
0
Долбырев Марк @COOL_ALMANAH

Flash-разработчик

Отправить сообщение
Если вы хотите следить за оригинальным английским постом — следите, вам же никто не запрещает этого делать.

> Вот еще совет, чтобы сделать
Честное слово, я не могу понять, почему люди пытаются давать советы другим людям, которых совсем не знаю, и о советах которых никто не просит. Если у вас есть хорошая идея/желание — реализуйте эту идею, а я постараюсь сам решить, как мне лучше организовать перевод статей.
Это перевод оригинальной статьи + некоторые мои мысли на счёт каких-то библиотек/фреймворков/движков с которыми мне приходилось работать. Краткий ответ на ваш вопрос будет: «потому что мне так захотелось».
В начале поста есть ссылка и на оригинал и на injun.
Все претензии к исходному посту ) Вообще вы правы, Molehill — просто одна из частей будущего FlashPlayer.
На счёт PaperWorld — не знаю. Но оставил ссылку, в надежде, что временные проблемы с сервером.
Спасибо за поправку. Проверил ссылку в исходном посте, там ссылка на ARtisan битая, наверно проект уже умер =(
Она есть, в самом начале поста )
Рад, что вам понравилось ) Думаю, продолжение будет.
Не поленился и, надо сказать, что что способ случайной сортировки через Math.rand() при небольших количествах элементов в массиве (до 2000) отстаёт от сортировки через splice примерно на 1-2 мс. Но начиная с 20000 элементов в массивах показывает значительный прирост в производительности: для 20000 88 мс против 215, для 200000 время 1093 мс против 15258 мс!!!

В общем, оказалось то, что sort не такая уж и тормозящая функция, а при большом количестве элементов в массивах даёт значительный прирост производительности.

Я понимаю, что такое количество элементов вряд ли когда-нибудь будет в реальных проектах, но если брать количество меньше 2000, то разницы во времени вообще нет (или практически нет).

А вот, собственно, и сам код для тестирования:
var elementsCount:int = 200000;
var elementIndex:int;

var _arr1:Array = [];
var _arr2:Array = [];

for(elementIndex = 0; elementIndex < elementsCount; elementIndex++)
{
  _arr1.push(elementIndex);
}
_arr2 = _arr1.concat();

//trace("_arr1 = " + _arr1);
//trace("_arr2 = " + _arr2);
trace("getTimer() = " + getTimer());

this.spliceRandSort(_arr1);
this.mathRandSort(_arr2);

function spliceRandSort(array:Array):void
{
  var beginTime:Number = getTimer();
  trace("START __ spliceRandSort __ beginTime = " + beginTime);
  
  var arrayLength:int = array.length;
  for (var i:uint = 0; i < arrayLength; i++)
  {
   var rand:uint = int(Math.random() * arrayLength);
   array.push( array.splice( rand, 1 )[0] );
  }
  
  var endTime:Number = getTimer();
  trace("END __ spliceRandSort __ endTime = " + endTime + " | totalTime = " + (endTime - beginTime));
}

function mathRandSort(array:Array):void
{
  var beginTime:Number = getTimer();
  trace("START __ mathRandSort __ beginTime = " + beginTime);
  
  array.sort(this.randomizeSortFunction);
  
  var endTime:Number = getTimer();
  trace("END __ mathRandSort __ endTime = " + endTime + " | totalTime = " + (endTime - beginTime));
}

function randomizeSortFunction(obj1:Boolean, obj2:Object):int
{
 var randNum:int = -1 + Math.floor((Math.random() * 3));
 
 return randNum;
}


* This source code was highlighted with Source Code Highlighter.
Не могу точно сказать, но по-моему, больше, чем 1000 раз. Но вероятность возникновения больших проблем (допустим флешка повиснет и цикл так никогда и не отсортируется), на мой взгляд, минимальна.

Кстати, я не проверял, но было бы даже интересно проверить, какой способ работает быстрее: использование sort() или удаление/добавление элементов массива. Ведь есть вероятность, что даже не смотря на «излишние» шаги sort() она будет работать быстрее, так как это встроенный функционал FlashPlayer.
Смотря что вы подразумеваете под «ожидаемым временем» («жи», «ши» пиши через «и»). На самом деле я никогда не сталкивался с проблемами при использовании данного алгоритма.
Я согласен, что тут достаточно простые и понятные всем функции, просто у меня достаточно много времени прошло, пока до меня дошло, как правильно формировать свои библиотеки вспомогательных классов, где я сейчас держу все подобные сниппеты. Кто-то может и не догатываться, что чем каждый раз писать код повторно, лучше 1 раз немного подумать, сделать его немного более универсальным и вынести его в отдельную вспомогательную функцию.

Да и, на самом деле, мне года 2 назад были бы просто так полезны эти все сниппеты, для общего развития. Так что, кому-то, они тоже может быть будут полезны.
Просто в примере это — статическая функция класса, чтобы не объявлять её в каждом классе, в котором нужно это реализовать, можно сделать такую «вспомогательную» функцию, которую дёргаешь каждый раз, когда тебе это нужно. У меня с подобными функциями куча классов, которые очень выручают, чтобы по 100 раз не писать один и тот же код.
Рад, если статья вам оказалась полезной )
первый урок был интересней, но это, наверно, из-за того, что тут разбирают прям совсем простые вещи.
Всегда хотел узнать что-нибудь про игровые фреймворки, спасибо за статью.
А почему не надо? Разве это плохо?
Пожалуй, это самый лучший логотип для спортивных мероприятий, который я видел.
Чего конкретно вы боитесь? Приведите хотя бы 1 пример «по-настоящему обширной проблемы», которая может быть вызвана такими «по-настоящему обширными правами».

Информация

В рейтинге
Не участвует
Откуда
Краснодарский край, Россия
Дата рождения
Зарегистрирован
Активность