Оптимизация работы javascript

Javascript как один из диалектов ecmascript (как и actionscript) зачастую нуждается в оптимизации.

Если вы пользуетесь Firebug в mozilla, то дело очень облегчается использованием объекта console :

console.debug('This is just debugging text!');
console.info('This is some information.');
console.warn('This is a warning.');
console.error('This is an error!');

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


Например в IE операция str+='abc' два раза подряд занимает в два раза больше времени чем src+='abcabc'; Поэтому не удивляйтесь, если в IE ваши скрипты выполняются 10 секунд, а в Firefox 0,5 сек.

Но по-настоящему ускорение работы скриптов можно сделать лишь нахождением bottleneck - ситуаций. И на помощь приходит моя функция timestep. Использование достаточно простое - в участках кода ставим вызов этой функции с параметром названия этого участка. В конце исполняемого кода вызываем результат timedebug().var arrTime=new Array();
function timestep(description){
    var endTime=new Date();
    var recStep=new Array();

    if (arrTime.length>0){
        recStep['time']=(endTime-arrTime[arrTime.length-1]['rawtime']);
        recStep['desc']=description;
        recStep['rawtime']=endTime;
        if (typeof console != "undefined") console.debug('Timestep '+recStep['desc']+' %s ms', recStep['time']); //for mozilla firebug
        arrTime.push(recStep);//[arrTime.length+1]=recStep;
        }
    else{
        recStep['time']=0;
        recStep['desc']=description;
        recStep['rawtime']=endTime;
        arrTime.push(recStep);
    }
}
timestep('start');

function timedebug(){
    var strOut,totalTime;
    for(var i=0;i++;i<arrTime.length){
        strOut+="\n"+'Timestep '+arrTime[i]['desc']+' '+arrTime[i]['time']+' ms';
        totalTime=totalTime+arrTime[i]['time'];
    }
    strOut+="\n"+'Total:'+totalTime+' ms';
    alert(strOut);
}

RSS

Комментарии

  • Алексей
    В функции
    function timedebug(){
    ошибка. Цикл FOR не закрыт.
  • Артём Курапов
    Спасибо, исправил насколько вспомнил :)