Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Сложный скрипт который тормозит систему HELP


Автор: MalerGSG 16.12.2009, 17:34
Работу этого скрипта Вы может просмотреть на сайте: www.tscenter.globalsitegroup.ru
Он отвечает за "прокрутку" блоков посреди страницы, я не знаю что сделать чтобы облегчить учесть процессора. При работе одного только браузера загрузка цп скачит от 70 до 90 процентов. Пытался поставить задержку загрузки не помогает! В распараллеливании серверов смысла нет он тормозит систему даже с одним юзером на сайте. Вобщем HELP ME!  smile 


Вот собственно сам скрипт.

<script language="javascript">
var run=0;
var xx=0;
var wid;
var w;
var timeout_id;
var timeout_id1;
var MouseX;
    window.onload = function(){
        
        
        wid=window.screen.width;
        w = (wid-758)/2;
        //var l = document.getElementById("leftt");
        //document.getElementById("rightt").style.width = w + "px";
        //rightt = document.getElementById("rightt");
        //rightt.width = w + "px";
        
        //l.style.width = w + "px";
        //document.getElementById("left_navi").style.marginLeft = w - 32 + "px";
        //left.width = w + "px";
        run=1;
        MouseX = 200;
        setSpeed(MouseX,1);
    }
    
    function setRight(){
        xx = xx - 1 ;
        document.getElementById("cont_m").style.marginLeft = xx + "px";
            if (xx<-1283){
                xx = -84;    
            }
        if(run==1){
        }
    }
    function getResim(ev){
        navname = navigator.appName;
        if (navname=="Netscape"){
            getMouseX(ev);    
        }else{
            
            mousePageX();
        }
    }
    //for mozilla
    function getMouseX(ev){
            //clearTimeout(timeout_id);
            //clearTimeout(timeout_id1);
            MouseX = ev.pageX;
            
            //setSpeed(MouseX,1);
            
    }
    //for IE and opera
    function mousePageX()
    {
        //clearTimeout(timeout_id);
        //clearTimeout(timeout_id1);
        MouseX = event.x;
        //setSpeed(MouseX,1);
        
    }
    function setSpeed(mouseX,runn){
        if (runn==1){
            var hcenter = 379;
            
            if (MouseX>hcenter){
                
                var speed = (MouseX - hcenter)/25;
                speed = speed.toFixed(0);
                run=1;
                timeout_id1 = setTimeout(" setRight()",400);
            }
            if (MouseX<hcenter){
                //alert(mouseX);
                var speed = (hcenter - MouseX)/25;
                speed = speed.toFixed(0);
                run=1;
                timeout_id1 = setTimeout(" setLeft()",400);
            }
            clearTimeout(timeout_id);
            timeout_id = setTimeout(" setSpeed(MouseX,1)",10);
        }
    }
    
    function setLeft(){
        xx = xx + 1 ;
        //alert(speed);
        document.getElementById("cont_m").style.marginLeft = xx + "px";
            if (xx>-84){
                xx = xx-1200;    
            }
        if(run==2){
        
        }
    }
    function setrun(){
        run =1;    
    }
    function setstop(){
        run =0;    
    }
</script>
</head>

Что сделать чтобы оставить этот эффект но при этом снять нагрузку с ЦП.
С уважением Александр!


Автор: IDVsbruck 17.12.2009, 12:23
Ссылка не работает.

Понятно, что ты грузишь проц частым обращением:
timeout_id = setTimeout(" setSpeed(MouseX,1)",10);

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

Автор: MalerGSG 21.12.2009, 15:20
А что-нибудь по конкретней? Я новичёк в JS.  smile 

Автор: Nanna 22.12.2009, 07:20
ага smile 
onMouseOver и onMouseOut

а может быть более эффективно было бы написать скриптик на флэше?? или аякс использовать smile

Автор: MalerGSG 22.12.2009, 09:07
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)