Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 31.03.2015, 12:30
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от theKingOfJava
 
Регистрация: 31.03.2015
Сообщений: 113

MallSerg,
Ага, еще забавно, что весь код формируется в рантайме, а это и есть, внезапно, динамика. Никаких статических значений там нет, естественно, функция каждый раз формирует новый объект, по результату вызовов соответствующих ф-ций. Все что там есть -- это избавление от цикла. Еще более забавно то, что при нулевом понимании вопроса, вы вклиниваетесь в разговор взрослых мужиков.
Ответить с цитированием
  #32 (permalink)  
Старый 31.03.2015, 14:23
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

В примере используется рефлексия для разворачивания цикла
Оптимизация достигается заменой динамически вычисляемых значений на статические ( заранее рассчитанные ) значения.

Доведем ситуацию до абсурда =)
var arr = ["a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a"];

var sliceArr001 = function (){
	var returnStr = "";
		for (i = 0; i < 20 ; i++{
			returnStr += arr[i];
		}
	return returnStr;	
}

var sliceArr002 = function (){
	return "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
}
этот пример похож на пример приведенный в примере xD
Надеюсь не стоит объяснять почему второй вариант функции будет работать быстрее?
С помощью рефлексии можно создавать второй вариант функции каждый раз когда изменяется массив.
Суть в том что используя немного динамики мы создаем более статичный(более быстрый вариант) функции.
И нужно четко понимать динамика замедляет программу статика ускоряет. но динамика позволяет делать программу более статичной и быстрой ))))).
Кстати использование конструктора функции вместо eval позволило бы еще более ускорить рантайм.

Последний раз редактировалось MallSerg, 31.03.2015 в 14:55.
Ответить с цитированием
  #33 (permalink)  
Старый 31.03.2015, 17:22
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от theKingOfJava
 
Регистрация: 31.03.2015
Сообщений: 113

Сообщение от MallSerg
Надеюсь не стоит объяснять почему второй вариант функции будет работать быстрее?
Нет объяснять не нужно, но никакого отношения к сабжу он не имет. Вы возвращаете готовую строку, а там каждый раз вычисляется новый объект (но без цикла). Вот более-менее адекватый пример:
random=function(){return Math.round(Math.random())}

makeArr1=function(){var i=3, acc=[]; while(i--) acc.push(random()); return acc}
makeArr2=function(){return [random(), random(), random()]}

console.log(makeArr1(), makeArr2(), makeArr1(), makeArr2())

//>>>> [ 1, 0, 1 ] [ 1, 1, 0 ] [ 0, 0, 1 ] [ 1, 1, 1 ]


Сообщение от MallSerg
используя немного динамики мы создаем более статичный
Это бред. В рантайме нет никакой статики, это у вас, свои, особые определения.
Ответить с цитированием
  #34 (permalink)  
Старый 31.03.2015, 18:29
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Сообщение от theKingOfJava
там каждый раз вычисляется новый объект
снова пытаешься врать. В приведенном тобой примере (ссылка на хабрахабр) при изменении массива каждый раз изменяется функция check на более эффективную.
Ответить с цитированием
  #35 (permalink)  
Старый 31.03.2015, 18:40
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от theKingOfJava
 
Регистрация: 31.03.2015
Сообщений: 113

MallSerg,
С тобой трудно вести диалог. У тебя свои собственные представления о вычислениях, собственная, персональная терминология, при этом, код ты вообще не понимаешь, поэтому, пообщайся с кем нибудь другим, я все что хотел сказать, уже сказал.
Ответить с цитированием
  #36 (permalink)  
Старый 31.03.2015, 18:49
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от theKingOfJava
 
Регистрация: 31.03.2015
Сообщений: 113

Сообщение от MallSerg
там каждый раз вычисляется новый объект
Сообщение от MallSerg
при изменении массива каждый раз изменяется функция check на более эффективную.
При вызове check создается.
Ответить с цитированием
  #37 (permalink)  
Старый 31.03.2015, 20:57
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Сообщение от theKingOfJava
При вызове check создается.
При вызове чего?
Если ты совсем не разбираешься в JS то могу подсказать =)
var SelfModifyObserver = function(){
    var stack = [];
    this.add = function(server){
        stack.push(server);
        var code = 'return {';
        for(var i = 0, ln = stack.length; i < ln; i++){
            code += stack[i].name + ':' + 'stack[' + i + '].ping(),';
        }
        code += '};';
        this.check = eval('(function(){' + code +'});');
        return this;
    };
    this.check = function(){return {};}
};
при вызове метода .add создается новая функция в которой вместо косвенного обращения подставляется реальное значение т.е. вместо stack[i].name в тело функции вставляется значение которое хранится по этому адресу/пути
после этого в цикле просто вызывается функция instance.check();
Функции стала значительно эффективнее за счет статичных значений т.е. из нее просто убирается итерация массива и косвенная адресация.

минихоливарчик начался после твоей попытки опровергнуть утверждение что -"чем код статичнее, тем он быстрее"
и при этом привел пример где оптимизация достигается за счет подставленний статичных значений вместо косвенной адресации.
Ответить с цитированием
  #38 (permalink)  
Старый 31.03.2015, 21:24
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от theKingOfJava
 
Регистрация: 31.03.2015
Сообщений: 113

Сообщение от MallSerg
При вызове чего?
при вызове функции check, что не ясно?
Ответить с цитированием
  #39 (permalink)  
Старый 31.03.2015, 21:31
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от theKingOfJava
 
Регистрация: 31.03.2015
Сообщений: 113

Сообщение от MallSerg
за счет подставленний статичных значений вместо косвенной адресации.
Ты такую ахинею несешь, это п-ц. Тебе не стыдно? Найди мне хоть один пруф, где какой нибудь Ваня дурачек утверждает что кодогенерация в рантайме == статика. Вангую -- не найдешь. Ты в единственном экземпляре такой, самородок. Все пора завязывать, Градус маразма уже давно зашкалил все мыслимые пределы.
Ответить с цитированием
  #40 (permalink)  
Старый 31.03.2015, 21:46
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Сообщение от theKingOfJava
при вызове функции check, что не ясно?
Ты действительно думаешь что при вызове функции check происходит кодогенерация?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните принцип работы скрипта jaxmackey Общие вопросы Javascript 5 06.08.2014 23:19
Квалифицированный JS программист для работы с рекламными форматами allforweb Работа 0 17.03.2013 22:11
Универсальный GrayScale с плавной работой (затухание и проявление), принцип работы? master_alf jQuery 40 26.02.2013 11:54
Принцип работы цикла for stp008 Общие вопросы Javascript 4 29.05.2012 12:22
Принцип работы счетчика liveinternet paveljava5 Общие вопросы Javascript 5 02.08.2010 11:53