2010-03-13 4 views
3

Nous avons donc ce produit, et il est très lent dans IE. Nous avons déjà appliqué un grand nombre de pratiques recommandées par les gars IE eux-mêmes (like this et this), et essayer de sacrifier le code propre pour la performance dans les parties critiques comme la manipulation DOM.Javascript, IE, cordes, et problèmes de performance

Cependant, comme vous pouvez le voir dans cette capture d'écran IE profileur .. alt text http://i43.tinypic.com/24g57c1.png

Just "String" est le plus grand délinquant. Presque 750ms de temps exclusif. Cela signifie-t-il que l'IE passe 750ms à instancier des chaînes? Je lis aussi ce genre de choses sur le Opera dev blog:

Un script de compilation peut supprimer les espaces, commentaires, remplacer les chaînes avec Array lookups (pour éviter MSIE créer un objet chaîne pour chaque exemple d'une chaîne - même en conditions)

Mais plus d'information à ce sujet. Quelqu'un peut-il clarifier? Il semble que IE doit créer une instance String complète chaque fois que vous avez "" dans votre code, ce qui pourrait expliquer cela, mais je ne sais pas à quoi ressemblerait l'optimisation de recherche de tableau. BTW- nous ne faisons pas vraiment beaucoup de concaténation de chaînes n'importe où dans le code.

La bibliothèque que nous utilisons est MooTools 1.2.4

Toutes les suggestions seront appréciées! Thema

MISE À JOUR - Je suis particulièrement intéressé par la pointe mentionnée ci-dessus à propos de "optimisation de recherche de tableau". Notre bibliothèque est grande (1 Mo) donc elle a beaucoup de chaînes, comme n'importe quel autre code JS. Mais puisque notre bibliothèque est plus grande que la plupart, ces chaînes causent réellement des problèmes de vitesse. En outre, quelqu'un sait-il si l'ajout de choses au String.prototype rend chaque instance plus lente?

+0

Est-il possible d'avoir également une vue de profilage d'arborescence d'appel? –

Répondre

5

Je voudrais saisir un profileur qui vous donnera une vue plus profonde, vous pouvez voir exactement ce que String prend si longtemps. Pour IE spécifiquement, il y a dynaTrace AJAX Edition (oui, c'est gratuit). Je lancerais vos mêmes pages là-bas, ça vous donnera une décomposition de l'arbre pour que vous puissiez voir ce qui se passe ... avec une vue des points chauds de ce que les fonctions de bas niveau prennent le plus longtemps .

+0

Secondé - dynaTrace est tellement génial que c'est presque bizarre – Pointy

+0

dynaTrace a l'air plutôt génial, mais notre produit ne fonctionne pas quand il fonctionne. Pas d'erreurs ou quoi que ce soit, ça ne marche pas. Suce. Mais je sais déjà quelle fonction de bas niveau cause le plus de problèmes de performance, et c'est 'String'. Donc ce que je demande est si quelqu'un sait comment optimiser l'utilisation des chaînes – adamJLev

+0

+1 pour dynaTrace. Je n'en ai jamais entendu parler auparavant. –

0

Les chaînes sont immuables en Javascript. Signification quand vous faites quelque chose comme ceci:

alert("hello" + " world"); 

trois chaînes sont créées:

  1. bonjour
  2. mot
  3. Bonjour tout le monde

Trouver de tels cas et fixer ceux-ci peuvent soit utile. Comme l'a dit Nick, utiliser un profileur pour déterminer exactement quel code spécifique avec Strings cause des problèmes est probablement la meilleure solution.

+0

Il n'y a aucune partie spécifique du code qui fasse quelque chose de fou avec les chaînes, la plupart des bibliothèques ont des milliers de chaînes dans le code source, mais quand vous avez une bibliothèque de 1 Mo, cela devient un problème. J'ai été particulièrement intéressé par le conseil que les développeurs d'Opera ont mentionné dans leur blog – adamJLev