2010-07-20 14 views
0

Sur un environnement de développement Ruby on Rails, une page s'affichera après 30 secondes sur Firefox, mais prendra 90 secondes sur IE 8 (avec IE 7 Compatibility Mode). Une recherche plus poussée montre que Javascript devrait ralentir la page, car si Javascript est désactivé, le contenu de la page sera également affiché dans 30 secondes. Comme il y a probablement 7 ou 8 plugins jQuery, scripts Facebook et script Google Analytics, il faudra un certain temps pour déplacer tout le code Javascript à la fin du fichier HTML, ce qui devrait accélérer le contenu de la page. vue de sorte que le contenu soit affiché après 30 secondes, tout comme Firefox), y a-t-il un moyen de forcer IE à afficher le contenu de la page avant de finir d'exécuter tout le code Javascript?Comment forcer IE à afficher le contenu de la page avant de terminer toutes les exécutions Javascript?

Je pense que IE pourrait attendre que tout le code Javascript finisse en premier, parce que s'il y a document.write() instructions, qui devraient être dans le HTML ... Firefox ou Chrome n'attend pas pour cela mais affiche le contenu tout de suite .

(sur le serveur de production, la page sera affichée sur Firefox après 5 à 7 secondes, car beaucoup de "partiels" (sous-composants HTML) sont mis en cache.El 8 prend beaucoup plus de temps aussi, environ 40 secondes ou plus.)

PS Une forte raison pour laquelle le Javascript est incorporé dans tout le HTML peut être que, disons s'il y a un "Image Carousel", le code HTML est dans un "partiel", qui est un fichier HTML généré par un fichier HAML, et tout le HTML ainsi que le code Javascript sont dans ce fichier, pour une meilleure encapsulation, au lieu d'avoir le HTML dans un fichier et le Javascript dans un autre fichier, mais je me demande si tous ces blocs de code Javascript utilisent seulement $(document).ready(function() { ... }) de jQuery, alors bloc de code ralentir l'affichage de la page sur IE?

Répondre

0

Malheureusement, vous pouvez supposer que vos plugins jQuery attendent tous que le dom soit entièrement chargé dans IE. Une solution consiste à essayer d'accélérer le chargement de la page. Voici quelques bonnes façons de le faire:

  1. N'hébergez pas jQuery vous-même. Chargez-le à partir de Google ou du CDN Microsoft. Cela entraînera une connexion de moins liée à votre serveur Web.
  2. Charge dynamiquement le contenu via jQuery. Il est difficile de recâbler des choses après coup, mais cela vous permettra certainement de charger progressivement le contenu et de donner l'impression que la page se charge plus rapidement.
  3. Mettez tout le javascript au bas de la page si possible.
  4. Éliminer les appels à document.ready dans jQuery lorsque cela est possible.
  5. Charger des images par chargement avec ce plug-in jQuery: http://www.appelsiini.net/2007/9/lazy-load-images-jquery-plugin Il en résultera moins de téléchargement de contenu lors de l'affichage initial de la page.
  6. Utilisez un CDN tiers pour les scripts et les images hébergés, ou dans tout le moins un autre domaine. Chargement du même domaine est un goulot d'étranglement
0

Je voudrais également suggérer ce que Nissan Fan a dit au point numéro 3, mais avec un amendement. Déplacer tous les scripts inutiles au bas de la page en laissant la tête avec seulement jquery et peut-être un script de plus. Une autre chose que je suggérerais est de regarder en utilisant LAB.js, cela force les navigateurs à traiter JS ainsi que d'autres éléments de la page en parallèle, ce qui vous permet de couper un peu de temps hors du processus de chargement.

http://labjs.com/