Это плохая практика иметь ряд именованных функций в файлах js? - PullRequest
1 голос
/ 06 сентября 2011

Я пишу js-файл, который содержит множество команд jquery в части, готовой к doc, а затем целый ряд функций, которые упоминаются в командах jquery.Вот краткий пример:

//jquery on ready
$(function() {
  //misc jquery commands
  $('#bzm a').click(function(event) {
        event.preventDefault();
    });
  $('.editable').not('video, img, textarea').click(function(event) { 
        event.stopPropagation();
        loadEditor($(this));
        return false;
    });
});

//bunch of named functions referenced by jquery commands
function loadEditor(node, link){
    event.stopPropagation();

    var value = node.text();

    if (editObj){
        commitEditor(editObj);
    }

    if (node.not('video, img, textarea')){    
        $('#textEdit')
            .copyCSS(node)
            .offset(node.offset())
            .css('display', 'block')
            .val(node.text());

        node.css('color', 'transparent');
    }

    if(node.is('a') || node.parent().is('a') ){

        $('#urlEdit').show();
        $('#urlEdit').val(node.attr('href'));
    } else {$('#urlEdit').hide();}

    editObj = node;

    if (link){
        $('#urlEdit').select();
    }else{
        $('#textEdit').select();
    }
}

Мне кажется, я видел, как сказано, что именованные функции будут вызывать низкую производительность в js или что-то в этом роде. Самый близкий пример, который я могу найти, это здесь .Я просто хотел бы знать наверняка.

1 Ответ

5 голосов
/ 06 сентября 2011

Нет.Вызов именованной функции стоит поиск переменной (дешево, если не глобально) и вызов функции.Передача именованной функции в другую функцию требует только поиска переменной.

Ниже приведены некоторые микро-тесты, запускаемые в Chrome в бесплатной квадратной оболочке.Взять все тесты с частичкой соли.

(function () {
  function f() { }
  var a = [1, 2, 3, 4, 5, 6];
  var t0 = Date.now();
  for (var i = 100000; --i >= 0;) { a.map(f); }
  var t1 = Date.now();
  print(t1 - t0);
})() 

24

(function () {
  var a = [1, 2, 3, 4, 5, 6];
  var t0 = Date.now();
  for (var i = 100000; --i >= 0;) { a.map(function f() {}); }
  var t1 = Date.now();
  print(t1 - t0);
})() 

29

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...