Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2014, 23:03
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Оптимизация с помощью eval
В этом коде
fu=function(arg1, arg2){
    if(condition1) return arg1
    if(condition2) return arg2
}

fu(long_calculation1(), long_calculation2())

несмотря на то, что какой то один, а может и оба аргумента могут не понадобиться, они все равно вычисляются. Если переписать вот так
fu=function(arg1, arg2){
    if(condition1) return eval (arg1)
    if(condition2) return eval (arg2)
}

fu("long_calculation1()", "long_calculation2()")

Все будет намного быстрей. Можно оборачивать не в строки а в функции, а внутри вызывать, только запись будет более громоздкой.

Я, почему-то не видел никогда примеров подобных оптимизаций в js, хотя, решения, казалось бы, очевидны. Это моветон что ли? Или есть какие-то подводные камни?
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2014, 23:21
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Потому что:
fu=function(arg1, arg2){
    if(condition1) return arg1()
    if(condition2) return arg2()
}
 
fu(long_calculation1, long_calculation2)


P.S. eval сам по себе ни для каких оптимизаций не годится, потому что он ломает низкоуровневые механизмы внутренней оптимизации самого движка, что очень сильно сказывается на скорости.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2014, 23:29
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Aetae,
Я написал там в конце, что можно обернуть функциями, Вы повторяетесь.
Сообщение от Aetae
eval сам по себе ни для каких оптимизаций не годится, потому что он ломает низкоуровневые механизмы внутренней оптимизации самого движка, что очень сильно сказывается на скорости.
Не знаю, что там сказывается, я проверил у себя в ноде, разницы между вызовом функции и эвалом практически нет. Эвал даже быстрей оказался. Это Вы, похоже, бьете в бубны и произносите заклинания.
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2014, 23:38
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Тфу, на автора поста не посмотрел.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2014, 23:39
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Aetae,
Слив засчитан
Ответить с цитированием
  #6 (permalink)  
Старый 02.07.2014, 00:29
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Пиши тесты удивляй всех результатами своих оптимизаций )
Ответить с цитированием
  #7 (permalink)  
Старый 02.07.2014, 00:39
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Сообщение от MallSerg
Пиши тесты удивляй всех результатами своих оптимизаций )
А зачем? Так разве не видно? Это же простая логика
Ответить с цитированием
  #8 (permalink)  
Старый 02.07.2014, 01:03
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Какая то жуткая и извращенная логика отсутствием минимального опыта и здравого смысла.

Ты даже не понимаешь что сравниваешь теплое с мягким
в первом случае fu(long_calculation1(), long_calculation2()) т.е. ты вызываешь функции до вызова функции fu
во втором случае ты передаешь строки в которых находятся имена функции. и не вызываешь функции до того как передать их в функцию fu
это разное поведение

Aetae нарисовал тебе как добиться такого же поведения без идиотизма с eval

Такого извращения над switch я давно не видел

Да и такое бессмысленное жонглирование функциями нужно лечить электрическим током
Ответить с цитированием
  #9 (permalink)  
Старый 02.07.2014, 01:29
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Сообщение от MallSerg
Aetae нарисовал тебе как добиться такого же поведения без идиотизма с eval
разуй глаза, он повторил как попугай, то что я написал в стартовом посте
Сообщение от MallSerg
это разное поведение
Да??? А мужики то и не знали!
Сообщение от MallSerg
switch
Похоже, ты вообще не понимаешь, о чем речь идет

Последний раз редактировалось foo, 02.07.2014 в 07:24.
Ответить с цитированием
  #10 (permalink)  
Старый 02.07.2014, 01:45
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Сообщение от MallSerg
до вызова функции fu
Ну да, на этом месте, конечно, надо под столом валяться. Ты не только крутой жабаскриптер, ты и программист, вообще, очень сильный, в целом.

Последний раз редактировалось foo, 02.07.2014 в 01:48.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятное(для меня) поведение eval FanAizu Общие вопросы Javascript 1 06.05.2014 19:43
Обработка json tion Общие вопросы Javascript 15 12.05.2013 18:39
Получить значение ячейки с помощью onclik Space-06 Events/DOM/Window 4 10.01.2012 09:39
Проверка наличия логина в БД при регистрации, с помощью ajax storng Общие вопросы Javascript 4 09.04.2010 20:24
Roll-up menu Tanya Общие вопросы Javascript 5 29.08.2008 17:28