5

J'utilise jQuery .scrollTop pour faire défiler l'image dans une div. Cela fonctionne très bien dans Firefox - le défilement est très lisse et rapide. Dans IE 8, le défilement est très lent et glitchy - l'image défile une fois en une seconde - deux secondes. La taille de l'image est en moyenne comprise entre 2000 * 2000 et 4000 * 4000 pixels.Performances jquery scrollTop dans IE 8

Existe-t-il un moyen d'améliorer cela pour IE 8?

Les performances d'IE 7 sont légèrement meilleures, mais pas encore suffisantes.

Merci

Edit: Je crois qu'un problème est dans la façon dont le défilement est mis en œuvre dans IE 7 et 8. J'ai permis aux deux barres de défilement (trop-plein-x et overflow-y), et je essayé de faire défiler une image en utilisant ces barres de défilement. Le problème est exactement le même. J'ai essayé de le faire fonctionner sur un PC assez peu puissant - pentium dual core quelques années avec 2 Go de RAM ainsi que le bureau Core i7 avec 2.8GHz CPU 1600Mhz RAM et les résultats sont presque identiques. FireFox défile beaucoup plus rapidement, mais son utilisation du processeur est en moyenne 10% plus élevée que celle du processeur IE. Cela me laisse perplexe ... Microsoft aurait sûrement résolu ce problème maintenant?

Une autre chose que j'ai trouvé quelque peu étrange est que le défilement s'est déroulé plus rapidement sur un ordinateur portable Core 2 Duo. Je me demande si cela a quelque chose à voir avec les pilotes de cartes graphiques ... IE 7/8 utilise-t-il même le GPU?

Excusez-moi si tout cela peut paraître idiot, mais je suis vraiment intéressé à résoudre ce problème ... IE ne peut pas être si mal que ça ..

+0

Je ne connais pas de réponse immédiate à votre question mais évidemment la performance va être basée sur les spécifications de la machine client - Dans ce cas, je pense que la mémoire et la pagination seront le goulot d'étranglement. Pour confirmer qu'il s'agit d'un problème lié à la taille de l'image, les images étroites (1-2px) mais de grande taille ont-elles le même problème? – Basic

+0

Salut, cela fonctionne bien sur n'importe quel duo Core 2 moyen avec un RAM de 2 Go et une carte graphique intégrée. Je ne pense pas que la performance d'une machine soit un problème, surtout parce qu'elle fonctionne au moins deux fois plus vite dans FireFox. –

+0

S'il vous plaît voir modifier –

Répondre

6

jQuery est de .scrollTop() notoirement lent à-dire, et si la le balisage est même légèrement complexe ou grand, vous ne l'obtiendrez jamais pour bien fonctionner.

La solution est de ne pas utiliser la fonction jQuery .scrollTop(), mais de créer la vôtre en fonction des propriétés natives .scrollHeight et .scrollTop.

La raison est la façon dont calcule les offsets, qui est la base de .scrollTop() lenteur de jquery - vous devez remonter l'arbre DOM et calculer les offsets pour chaque parent dans ie.

jQuery fait de son mieux, mais vous serez toujours capable de le faire plus rapidement puisque vous connaissez le balisage à l'avance et que vous pouvez l'optimiser - vous pouvez même faire les calculs de décalage à l'avance la plupart du temps et utiliser une constante comme modificateur. Cela dit, ce n'est peut-être pas la faute de jQuery - il peut s'agir simplement d'un problème avec le pipeline de rendu d'ie - selon la façon dont vous avez fait votre marklup et son style, un scroll pourrait forcer de re-rendre/repeindre complètement la page pour chaque pixel que vous faites défiler, et cela va ralentir tout cela jusqu'à un crawl.