Оптимизация с помощью 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 я давно не видел Да и такое бессмысленное жонглирование функциями нужно лечить электрическим током |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
эм... но ведь они правы. в описанном случае проще передать сами функции, и в зависимости от условий вызвать нужную или не вызвать вообще. в вашем же примере вызываются все функции, в не зависимости нужны они или нет.
|
Цитата:
|
Цитата:
|
Dandy, трололо в стиле раннего максимаксимуса(а возможно это он и есть, просто вернулся к корням ткскзть). Просто игнорируйте его.
|
Цитата:
Вам следует в эту сторону посмотреть. |
Цитата:
|
Цитата:
|
Гениальный ответ! Ясно.
Aetae, спасибо. :) |
Dandy,
Ваш сарказм выглядит жалко. Даже этот Ваш Aetae вполне понимает, что Вы в неведении. Но после этой борзоты желание объяснять что-то пропало. |
Цитата:
а если использовать функциональный тулкит, то даже определять ничего не придется, но это в идеале |
melky,
Я не спорю, что можно, в данном случае оба варианта эквивалентны. Кому что нравиться. |
fu=function(arg1, arg2){.......В этой строке ты УЖЕ вычислил обе функции, объясни зачем вычисленному выражению нужна оптимизация?
|
Часовой пояс GMT +3, время: 23:59. |