Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вопрос по функциям (https://javascript.ru/forum/events/55392-vopros-po-funkciyam.html)

tiundv 25.04.2015 20:15

Вопрос по функциям
 
Скажите пожалуйста использование функций в js не влияет на быстродействие..(например в php на вызов функций затрачивается больше время чем просто следовать условиям)..В js токого нет ? Например создать функцию с условиями для нескольких обработчиков для сокращения кода или лучше условия писать в самих обработчиках?

laimas 25.04.2015 20:27

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

Имеется ввиду сам вызов или же исполнение? И на сколько больше, что за условия, и что за функции?

Erolast 25.04.2015 20:30

Влияет, но незначительно: современные интерпретаторы JS сами по себе очень быстрые. Лучше выносить.

tiundv 25.04.2015 20:34

Если не ошибаюсь в php вызов и исполнение медленее 1.5 раза чем просто условия.
Вернусь к моей другой теме..вы Laimas должны помнить мою тему про пост из контента..Так вот..там обработчиков несколько и у них похожи проверки и условия..
Если создать функцию и вынисти в нее похожие условия а из обработчиков вызывать эту функцию..

Erolast 25.04.2015 20:42

Вот, пожалуйства, сравнение производительности:
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 примерно равномерно).

tiundv 25.04.2015 20:44

Например
$('.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);
                    }
                });
}

Erolast 25.04.2015 20:50

...ты действительно считаешь, что производительность в обработчике щелчка, еще и отправляющим ajax, действительно имеет хоть какую-то роль?

tiundv 25.04.2015 20:51

Цитата:

Сообщение от Erolast (Сообщение 368254)
...ты действительно считаешь, что производительность в обработчике щелчка, еще и отправляющим ajax, действительно имеет хоть какую-то роль?

Я щепетильный...Каждый по своему сходит с ума....

Erolast 25.04.2015 20:56

Ты действительно считаешь, что единичная задержка в пределах 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");


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

tiundv 25.04.2015 21:04

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


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