Помогите мне оптимизировать этот 2-строчный Javascript, если это возможно! - PullRequest
1 голос
/ 23 декабря 2010

У меня есть 2-х полосный лайнер, который ... делает свое дело, но на самом деле он выглядит немного неубедительно:

var n = 'configOb_'+Math.floor(Math.random()*100);
while( document[n] !== undefined ){ n = 'configOb_'+Math.floor(Math.random()*100); }

Это в основном генерирует уникальный идентификатор. Важно отметить, что я не могу использовать какие-либо файлы зависимостей JS, так как этот сценарий выполняется до того, как мой экземпляр YUILoader завершает работу (указанный выше сценарий находится в <body />, YUILoader ожидает готовности DOM).

Итак, что мне нужно, так это любые умные оптимизации вышеупомянутого 2-го слоя.

Спасибо!

Редактировать: Э-э, извините, я выбрал это как код - но он не удерживается ... надеюсь, на этот раз ...

Ответы [ 3 ]

2 голосов
/ 23 декабря 2010

Вы не указали, для чего вы хотите оптимизировать, скорость или размер, но я оптимизирую это для корректности, если вы хотите: -)

По мере приближения к пределу в 100 объектов время выполнения этого цикла будет становиться все длиннее и длиннее вплоть до момента, когда вы использовали все объекты, когда оно станет бесконечным.

Я бы просто начал с 0 и пошел вверх, пока не найдешь свободный слот, что-то вроде:

var n = 0;
while (document['configOb_' + n] !== undefined ) {
    n = n + 1;
}
n = 'configOb_' + n;

Конечно, вы все еще ограничены, но это намного превышает 100, что дает вам ваша случайная функция. Кроме того, время выполнения будет увеличиваться по мере увеличения количества объектов, но, по крайней мере, более детерминированным образом.

1 голос
/ 23 декабря 2010

Исходя из того, что «но это немного неубедительно», что вы предпочитаете аккуратность кода, а не реальную «оптимизацию», тогда, начиная с document[undefined] === undefined, вы можете просто сделать:альтернативно, цикл do.. while имеет больше смысла:

var n;
do { n = 'configOb_'+Math.floor(Math.random()*100); } while (document[n] !== undefined);

Если вы действительно после оптимизации скорости, то, во-первых, если случайное число не нужно (просто уникально), то увеличьте n с 0. Если вы должны использовать случайные числа, увеличьте множитель с 100, чтобы у вас был меньший шанс получить дубликаты.

0 голосов
/ 23 декабря 2010

не уверен, что вы хотите достичь, но вот вам

var n;    
while( document[ n='configOb_'+Math.floor(Math.random()*100) ] !== undefined );
...