2010-10-02 12 views
0

J'ai un problème assez étrange ici - J'utilise jquery pour redimensionner mon image d'arrière-plan (png, largeur: 1793, hauteur: 1200, taille: 872kb).jquery redimensionnement de l'image et la performance

Ma fonction est ici:

bgInit = function(img, clbk) { 
var bgObj = $('#bgImg'); 
var bgHeight = bgWidth = 0; 
    bgObj.attr('src',img).ready(function(){ 
    var bgRatio = bgObj.height()/bgObj.width(); 
     if (bgHeight < screen.height) { 
     bgHeight = screen.height; 
     bgWidth = bgHeight/bgRatio; 
     } 
     if (bgWidth < screen.width) { 
     bgWidth = screen.width; 
     bgHeight = bgWidth*bgRatio; 
     } 
    //resize and center horizontally 
    bgObj.height(bgHeight).width(bgWidth).css('margin-left',(screen.width-bgWidth)/-2); 
    clbk(); 
    }); 
} 

Et voici comment je l'appeler:

bgInit('img/bg.png', function(){ 
alert('done!'); 
}); 

Fonction fonctionne très bien dans tous les navigateurs, mais le problème est quand il vient à l'aide de fondu effets après le redimensionnement. C'est vraiment laggy - Opera n'a pas de problèmes, mais 2fps dans IE je dirais.

Existe-t-il une meilleure façon de faire ce type de redimensionnement (le maintien d'un format d'image est crucial)?

Merci à l'avance,

Mikk

+0

Ce qui est vraiment pas une question jQuery du tout - cela ne fait * aucune * de l'échelle de l'image travail. Tout est fait par le navigateur. Les anciennes versions d'IE vont être lentes. – Pointy

Répondre

1

explorateur Internet moteur JavaScript est séparé du noyau du navigateur et fonctionne très lentement par rapport aux autres navigateurs modernes. Puisque Javascript est le seul moyen de redimensionner dynamiquement, vous n'avez pas de chance avec IE. Mon propre site souffre du même problème. Et mon script n'est pas basé sur jQuery, il est hautement optimisé.

Ce que vous pouvez faire est d'utiliser un plugin Google pour accélérer le moteur IE javascript autour 10X fois, vous pouvez inclure un script simple dans votre site qui va aider les clients à installer s'ils veulent - http://code.google.com/chrome/chromeframe/

Vérifier des ressources dev web ici - http://www.chromium.org/developers/how-tos/chrome-frame-getting-started

Voir quelques résultats récents des tests de performance pour savoir ce dont je parle: http://www.legitreviews.com/article/1347/1/

+0

Je ne pense pas que ce soit vraiment correct. Oui, le moteur de rendu et Javascript sont séparés, comme c'est le cas dans tous les navigateurs **. Toutefois, lorsque le code Javascript réinitialise les attributs de style pour modifier la taille d'un élément, ce n'est pas le moteur Javascript qui effectue l'ajustement de mise en page résultant - c'est le moteur de rendu. – Pointy

+0

Vous pouvez jeter un oeil à cette image http://ieblog.members.winisp.net/images/Dean_PPB4_5.png partie de cet article - http://blogs.msdn.com/b/ie/archive/2010/08 /04/html5-modernized-fourth-ie9-platform-preview-available-for-developers.aspx pour voir ce que je veux dire. En outre, vous ne savez pas si le ralentissement est lorsque les attributs de style sont modifiés lorsque la mise en page est ajustée. Finalement, cela n'a pas d'importance, car la solution que j'ai indiquée remplace aussi le moteur de rendu. –