Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Оптимизация с помощью eval (https://javascript.ru/forum/misc/48384-optimizaciya-s-pomoshhyu-eval.html)

foo 01.07.2014 23:03

Оптимизация с помощью 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, хотя, решения, казалось бы, очевидны. Это моветон что ли? Или есть какие-то подводные камни?

Aetae 01.07.2014 23:21

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


P.S. eval сам по себе ни для каких оптимизаций не годится, потому что он ломает низкоуровневые механизмы внутренней оптимизации самого движка, что очень сильно сказывается на скорости.

foo 01.07.2014 23:29

Aetae,
Я написал там в конце, что можно обернуть функциями, Вы повторяетесь.
Цитата:

Сообщение от Aetae
eval сам по себе ни для каких оптимизаций не годится, потому что он ломает низкоуровневые механизмы внутренней оптимизации самого движка, что очень сильно сказывается на скорости.

Не знаю, что там сказывается, я проверил у себя в ноде, разницы между вызовом функции и эвалом практически нет. Эвал даже быстрей оказался. Это Вы, похоже, бьете в бубны и произносите заклинания.

Aetae 01.07.2014 23:38

Тфу, на автора поста не посмотрел.

foo 01.07.2014 23:39

Aetae,
Слив засчитан

MallSerg 02.07.2014 00:29

Пиши тесты удивляй всех результатами своих оптимизаций )

foo 02.07.2014 00:39

Цитата:

Сообщение от MallSerg
Пиши тесты удивляй всех результатами своих оптимизаций )

А зачем? Так разве не видно? Это же простая логика

MallSerg 02.07.2014 01:03

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

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

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

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

Да и такое бессмысленное жонглирование функциями нужно лечить электрическим током

foo 02.07.2014 01:29

Цитата:

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

разуй глаза, он повторил как попугай, то что я написал в стартовом посте
Цитата:

Сообщение от MallSerg
это разное поведение

Да??? А мужики то и не знали!
Цитата:

Сообщение от MallSerg
switch

Похоже, ты вообще не понимаешь, о чем речь идет

foo 02.07.2014 01:45

Цитата:

Сообщение от MallSerg
до вызова функции fu

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


Часовой пояс GMT +3, время: 19:42.