@Baxpom Попробуй запустить этот код через "Яваскрипт":
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('5 e=6(2){B.q("p #"+ ++2);3.d("b://8.g.f/o/n",{9:a,r:0}).c(6(7){5 4=[];5 i=0;m(;i<7.h.k;i++){4.j(3.d("b://8.g.f/t/u",{s:7.h[i],9:a}))}3.w.x(3,4).c(6(){y(2<1){e(2)}z{A.v.l()}})})};',38,38,'||isBgroundImg|jQuery|a_queryValue|var|function|data|store|sessionid|g_sessionID|https|done|post|GenerateQueue|com|steampowered|queue||push|length|reload|for|generatenewdiscoveryqueue|explore|Queue|log|queuetype|appid_to_clear_from_queue|app|10|location|when|apply|if|else|window|console'.split('|'),0,{}))Есть ли мастера JavaScript'а? Виснет код.
-
Выполняю код в BAS с помощью "Выполнить код", а он в 90% случаев виснет на данном участке кода.
Код генерации логина. Логика кода:
- Берется имя и фамилия (пример: Александра Попова). Меняется на нижний регистр (александра попова). Применяется транслитерация (aleksandra popova). - Переменные "englishFirstName" и "englishLastName"
- Генерируется случайная длина и случайный текст (Пример: nsfd). - Переменная "randomText"
- Генерируется случайная длина и случайные цифры (Пример: 324). - Переменная "randomNumber"
- Всё это склеивается в логин (Пример: aleksandrapopovansfd324). - Переменная "[[USER_LOGIN]]"
var [[USER_LOGIN]] function englishStringConverter(string) { //Функция транслитерации (Из русских букв - в английские) string = string.toLowerCase() for (var i = 0; i < string.length; i++) { var englishChar = [[GENERATOR_ENGLISHCHARS]][string[i]] //GENERATOR_ENGLISHCHARS - объект вида {в: 'v', г: 'g'} со всеми буквами string = string.replace(string[i], englishChar) } return string } var englishFirstName = englishStringConverter([[USER_FIRSTNAME]]) //Имя английскими буквами var englishLastName = englishStringConverter([[USER_LASTNAME]]) //Фамилия английскими буквами var randomText = '' //Случайный текст var minTextLength = 3 var maxTextLength = 4 var randomTextLength = Math.floor(Math.random() * (maxTextLength - minTextLength + 1) + minTextLength) for (var i = 0; i < randomTextLength; i++) { randomText += [[GENERATOR_LOWERCASE]][Math.floor(Math.random() * [[GENERATOR_LOWERCASE]].length)] } var randomNumber = '' //Случайные числа var minNumberLength = 1 var maxNumberLength = 2 var randomNumberLength = Math.floor(Math.random() * (maxNumberLength - minNumberLength + 1) + minNumberLength) for (var i = 0; i < randomNumberLength; i++) { randomNumber += [[GENERATOR_NUMBERS]][Math.floor(Math.random() * [[GENERATOR_NUMBERS]].length)] } [[USER_LOGIN]] = englishFirstName + englishLastName + randomText + String(randomNumber) //Готовый логинПочему виснет не понимаю. Может метод replace затратный, может циклов много... Уже всю голову сломал.
Генерирует отлично, но зависает еще лучше. -
@SecDeveloper said in Есть ли мастера JavaScript'а? Виснет код.:
var englishChar = [[GENERATOR_ENGLISHCHARS]][string[i]] //GENERATOR_ENGLISHCHARS - объект вида {в: 'v', г: 'g'} со всеми буквами
string = string.replace(string[i], englishChar)Ошибка тут
var englishChar = [[GENERATOR_ENGLISHCHARS]][string[i]] //GENERATOR_ENGLISHCHARS - объект вида {в: 'v', г: 'g'} со всеми буквами string = string.replace(string[i], englishChar)Если в словаре нет соответствия, тогда будет замена на undefined и строка может расти бесконечно.
И кстати вместо replace можно просто менять букву по индексуstring[i] = 'a'Вообще это можно было легко найти, достаточно тестироровать код частями, и добавить логи
-
@UserTrue И правда! До конца не понял, почему замена с replace иногда не могла найти соответствующую букву, ибо весь алфавит в словаре указан и undefined появляться не должно, но уже и понимать не нужно.
Превратил в массив, поменял буквы по индексу, превратил в строку. Теперь работает норм!function englishStringConverter(string) { string = string.toLowerCase().split('') for (var i = 0; i < string.length; i++) { var englishChar = VAR_GENERATOR_ENGLISHCHARS[string[i]] string[i] = englishChar } string = string.join('') return string }Спасибо.
-
@SecDeveloper дело не в replace, а в том, что если в словаре по указанному ключу не будет соответствия то вернётся undefined
-
@UserTrue Только сейчас понял: я заменял "ь" и "ъ" пустотой "". Потом длина строки уменьшалась, а цикл прежней длины и ищет, к примеру, индекс 9, когда в строке уже 8 индексов из-за стертого мягкого знака. Поэтому ищет по пустому ключу. И соответствия нет.
А если я в массиве по индексам меняю, то порядок и длина массива никак не поменяется и всё успешно заменится.Консоль логом пытался отловить, но у меня либо все буквы показывались и норм генерировалось, либо просто всё зависало и ни один консоль лог не показывался.
Вы мне очень помогли.
-
@SecDeveloper для отладки можно было в цикл добавить break, что при достижение какого-то числа итерациий вырубало