开发者

Is there any way to fix/remodel this jQuery script so that it can consume less memory and go faster? (I'm using 1.6.2)

I'm new to jQuery, I was making a slide carousel with it and I don't know if I miss something here so please take a look at my script:

function gotoItem(main, hidden, con, speed, state) {
con.css('display', 'none');
switch(state) {
    case 'next' :
    main.children(':first').appendTo(hidden).css('left','0px');
    hidden.children(':first').appendTo(main).css('left', '730px');
    lmove = '-=120px';
    middle = 3;
    end = 6;
    break
    case 'prev' :
    main.children(':last').prependTo(hidden).css('left', '0px');
    hidden.children(':last').prependTo(main).css('left', '-230px');
    lmove = '+=120px';
    middle = 3;
    end = 6;
    break;
}

main.children().each(function(i) {
    if(i==end) {
        $(this).stop().animate({
        left: lmove
   开发者_JS百科     }, speed, function() {
        con.css('display', 'block');
        });
    } else {
        if(i==middle) {
            $(this).stop().animate({
            left: lmove,
            opacity : 1
            }, speed);
        } else {
            $(this).stop().animate({
            left: lmove,
            opacity : 0.3
            }, speed);
        }
    }
    });
}

Actually there's nothing wrong with the code but it really bugged me when I found out that the script has eaten up a lot of memory (about 100kb everytime the function runs), and not to mention the cpu's been up and down about 20-30 percent (I'm using single-core laptop and my browser is Chrome 12). I've been testing it with Firefox and the result is basically the same. So, any suggestion? How should I rewrite the script so that it can go faster/less memory leaks? Or maybe there's nothing more I can do with the script? Thank you in advance


animating the left property is always memory consuming. You could rather use an overlying div with overflow:hidden; specified, and then use .scrollLeft() to animate the slides.

Refer to jQuery for Designers - Fun with overflows

This already takes us to another point, where you can save resources. Instead of appending and prepending items the browser has to render afterwards, you initially load the content and just place it out of sight. This is clearly a decision of performance vs. load times and might not be that impressive on your overall performance, but generally speaking, heavy Dom Manipulation is to be avoided if you target lower-end machines.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜