"1) Что лучше: отрицательные циклы (т. Е. Подсчет в циклах назад и проверка, достигли ли вы нуля) или циклов foreach? Обе опции кажутся лучше, чем обычно, для циклов for, но быстрее два? "
По foreach, я собираюсь предположить, что вы имеете в виду для ... каждого или для ... в циклах. Как отметил Демьян, forEach работает довольно медленно. Для других выполнение простого цикла for всегда происходит быстрее (вы можете заблаговременно из всех, за исключением каждого, я думаю), просто возвращаясь, когда вы нажимаете нужную проверку). Делаете ли вы i ++ или i-- не имеет значения. for..each и for..in циклы имеют свои преимущества, хотя. for..in - единственный способ, которым вы можете перебирать объекты Dictionary
и Object
, в то время как for..each выполняет приведение для вас, то есть вы пишете меньше кода. Как в:
for each( var s:Sprite in this.m_mySpriteVector )
...
против
var len:int = this.m_mySpriteVector.length;
for( var i:int = 0; i < len; i++ )
var s:Sprite = this.m_mySpriteVector[i];
(если заметить, если вы делаете нормальный цикл for, то сокращение длины - лучшее, что вы можете сделать, чтобы ускорить его). Также обратите внимание, что разница в скорости для циклов действительно имеет значение, только если они большие. Если вы делаете цикл из 10, то на самом деле не имеет значения, какой вы выберете.
"2) Что лучше, если использовать числа или целые числа?"
Если вы имеете в виду циклы, то всегда переходите к int. Другими словами, используйте класс, представляющий то, что вам нужно. Если вам нужны только целые числа, используйте int
или uint
. Если вам нужны десятичные дроби, тогда перейдите на Number
. Используйте неправильный тип, и вы получите небольшой штраф, но не огромный. Кроме того, в зависимости от того, что вы держите в переменной, это может быть не тот тип, который вы думаете: http://jacksondunstan.com/articles/1357
"3) Действительно ли постоянная снижает вашу производительность?"
Я на самом деле не проверял это, но, вероятно, недостаточно, чтобы действительно иметь значение. Сделайте простой цикл, используя 1 000 000 итераций или что-то в этом роде, и посмотрите, имеет ли это значение. Использование статического const повлечет за собой небольшое наказание, так как оно должно выполнять поиск класса, но это не резко
Последнее, что нужно сделать, это быть осторожным с оптимизацией. Также имейте это в своей голове, чтобы вы не писали отстойный код, но будьте осторожны, где вы его применяете. Оптимизированный код обычно занимает больше времени для написания и менее читабелен, чем другой код (хороший пример - цикл for..each).
Примите во внимание, где используется каждый фрагмент кода. Если это то, что называется критичным по производительности кодом - код, который вызывается постоянно (ENTER_FRAME или обычные функции), то именно на этом вы должны сосредоточить свои усилия. Если это функция, которая вызывается один раз или не очень часто, то время, потраченное на ее оптимизацию, будет напрасной тратой, поскольку вы получаете от нее очень мало пользы.