Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.04.2015, 20:15
Аспирант
Отправить личное сообщение для tiundv Посмотреть профиль Найти все сообщения от tiundv
 
Регистрация: 22.04.2015
Сообщений: 32

Вопрос по функциям
Скажите пожалуйста использование функций в js не влияет на быстродействие..(например в php на вызов функций затрачивается больше время чем просто следовать условиям)..В js токого нет ? Например создать функцию с условиями для нескольких обработчиков для сокращения кода или лучше условия писать в самих обработчиках?
Ответить с цитированием
  #2 (permalink)  
Старый 25.04.2015, 20:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

например в php на вызов функций затрачивается больше время чем просто следовать условиям

Имеется ввиду сам вызов или же исполнение? И на сколько больше, что за условия, и что за функции?
Ответить с цитированием
  #3 (permalink)  
Старый 25.04.2015, 20:30
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Влияет, но незначительно: современные интерпретаторы JS сами по себе очень быстрые. Лучше выносить.
Ответить с цитированием
  #4 (permalink)  
Старый 25.04.2015, 20:34
Аспирант
Отправить личное сообщение для tiundv Посмотреть профиль Найти все сообщения от tiundv
 
Регистрация: 22.04.2015
Сообщений: 32

Если не ошибаюсь в php вызов и исполнение медленее 1.5 раза чем просто условия.
Вернусь к моей другой теме..вы Laimas должны помнить мою тему про пост из контента..Так вот..там обработчиков несколько и у них похожи проверки и условия..
Если создать функцию и вынисти в нее похожие условия а из обработчиков вызывать эту функцию..
Ответить с цитированием
  #5 (permalink)  
Старый 25.04.2015, 20:42
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Вот, пожалуйства, сравнение производительности:
function test(func) {
    console.time(func.name);
    func();
    console.timeEnd(func.name);
}

function separate() {
    let results = [];
    let isPositive = function(number) {return number > 0};
    
    for (let i = 0; i < 1000000; i++) {
        results.push(isPositive(i));
    }
    
    console.log(results);
}

function inline() {
    let results = [];
    
    for (let i = 0; i < 1000000; i++) {
        results.push(i > 0);
    }
    
    console.log(results);
}

test(separate);
test(inline);

Запускать, конечно, надо несколько раз. У меня в FF 37.0.2 в среднем разница в пределах семи процентов в пользу inline (нет, бывают скачки, но как в separate, так и в inline примерно равномерно).

Последний раз редактировалось Erolast, 25.04.2015 в 20:48.
Ответить с цитированием
  #6 (permalink)  
Старый 25.04.2015, 20:44
Аспирант
Отправить личное сообщение для tiundv Посмотреть профиль Найти все сообщения от tiundv
 
Регистрация: 22.04.2015
Сообщений: 32

Например
$('.mod1').click(function() {
                var url = $(this).attr('href');
                $.ajax({
                    type: 'GET',
                    url:  '?ajax=' + url,
                    success: function(data){
                        $('#content').html(data);
                    }
                });
                if(url != window.location){
                  window.history.pushState(null, null, url);
                }
                return false;
            });
$('#content').on('click','.rem1',function(){
                var url = $(this).attr('href');
                $.ajax({
                    type: 'GET',
                    url:  '?ajax=' + url,
                    success: function(data){
                        $('#content').html(data);
                    }
                });
                return false;
            });

Сделать допустим так
$('.mod1').click(function() {
                goGo();
                if(url != window.location){
                  window.history.pushState(null, null, url);
                }
                return false;
            });
            $('#content').on('click','.rem1',function(){
               goGo();
                return false;
            });
function goGo(){
   var url = $(this).attr('href');
                $.ajax({
                    type: 'GET',
                    url:  '?ajax=' + url,
                    success: function(data){
                        $('#content').html(data);
                    }
                });
}

Последний раз редактировалось tiundv, 25.04.2015 в 20:50.
Ответить с цитированием
  #7 (permalink)  
Старый 25.04.2015, 20:50
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

...ты действительно считаешь, что производительность в обработчике щелчка, еще и отправляющим ajax, действительно имеет хоть какую-то роль?
Ответить с цитированием
  #8 (permalink)  
Старый 25.04.2015, 20:51
Аспирант
Отправить личное сообщение для tiundv Посмотреть профиль Найти все сообщения от tiundv
 
Регистрация: 22.04.2015
Сообщений: 32

Сообщение от Erolast Посмотреть сообщение
...ты действительно считаешь, что производительность в обработчике щелчка, еще и отправляющим ajax, действительно имеет хоть какую-то роль?
Я щепетильный...Каждый по своему сходит с ума....
Ответить с цитированием
  #9 (permalink)  
Старый 25.04.2015, 20:56
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Ты действительно считаешь, что единичная задержка в пределах 1/250000 от скорости человеческой реакции имеет хоть какую-то роль? Да там естественная вариация скорости будет в десятки, если не в сотни, раз больше.
console.time("inline");
console.log(1 > 0);
console.timeEnd("inline");

console.time("separate");
let isPositive = function(number) {return number > 0};
console.log(isPositive(1));
console.timeEnd("separate");


Вообще, в высокоуровневом программировании чистота кода обычно превыше всего.

Последний раз редактировалось Erolast, 25.04.2015 в 21:05.
Ответить с цитированием
  #10 (permalink)  
Старый 25.04.2015, 21:04
Аспирант
Отправить личное сообщение для tiundv Посмотреть профиль Найти все сообщения от tiundv
 
Регистрация: 22.04.2015
Сообщений: 32

Ну если разница так мала тогда у меня вопрос отпал..
Всем спасибо...
Тема закрыта..
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по toDataURL() GodZiLA Общие вопросы Javascript 0 03.06.2014 17:21
Вопрос по функциям eirnvn Общие вопросы Javascript 7 15.04.2013 12:39
Всплытие событий или что то не так... Кирюха =) jQuery 6 30.03.2013 12:56
Вопрос по удалению элемента в массиве и по функциям bot87 Общие вопросы Javascript 5 26.04.2012 14:43
Вопрос по each() и перебору строк таблицы battrack jQuery 1 09.02.2012 14:30