Оптимизация с помощью 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, хотя, решения, казалось бы, очевидны. Это моветон что ли? Или есть какие-то подводные камни? |
Потому что:
fu=function(arg1, arg2){ if(condition1) return arg1() if(condition2) return arg2() } fu(long_calculation1, long_calculation2) P.S. eval сам по себе ни для каких оптимизаций не годится, потому что он ломает низкоуровневые механизмы внутренней оптимизации самого движка, что очень сильно сказывается на скорости. |
Aetae,
Я написал там в конце, что можно обернуть функциями, Вы повторяетесь. Цитата:
|
Тфу, на автора поста не посмотрел.
|
Aetae,
Слив засчитан |
Пиши тесты удивляй всех результатами своих оптимизаций )
|
Цитата:
|
Какая то жуткая и извращенная логика отсутствием минимального опыта и здравого смысла.
Ты даже не понимаешь что сравниваешь теплое с мягким в первом случае fu(long_calculation1(), long_calculation2()) т.е. ты вызываешь функции до вызова функции fu во втором случае ты передаешь строки в которых находятся имена функции. и не вызываешь функции до того как передать их в функцию fu это разное поведение Aetae нарисовал тебе как добиться такого же поведения без идиотизма с eval Такого извращения над switch я давно не видел Да и такое бессмысленное жонглирование функциями нужно лечить электрическим током |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 17:53. |