Je ne sais pas trop comment cela s'appelle car il semble que vous utilisiez ASP pour faire ce travail (et je ne connais pas ASP). Mais ce qui ressort de moi est que vous avez var inputControl = document.getElementById(Page_Validators[i].controltovalidate);
à l'intérieur de deux boucles distinctes.
Plusieurs appels à document.getElementById
pour les mêmes éléments ont été la cause de nombreux problèmes de performances JavaScript. Envisager de combiner SetValidatorCallouts
et ClearValidatorCallouts
pour réduire le nombre d'appels à document.getElementById
(que je suis assez sûr est plus lent dans IE, mais ne peut pas trouver de repères pour le moment). Je ne dis pas que cela va garantir une mise à jour massive de la vitesse, mais 1) vaut le coup d'œil, et 2) une bonne pratique pour la programmation JavaScript. Quelque chose comme:
var SetValidatorCallouts = function() {
var pageValid = true,
inputControl = null;
for (var i=0; i<Page_Validators.length; i++) {
inputControl = document.getElementById(Page_Validators[i].controltovalidate);
if (!Page_Validators[i].isvalid) {
if (pageValid) {
inputControl.focus();
}
addClass(inputControl, 'error');
pageValid = false;
} else {
removeClass(inputControl, 'error');
}
}
return pageValid;
}
En note, vos fonctions de modification className sont trop compliquées. Je suggère d'utiliser un framework standard (jQuery, Dojo, ExtJs, etc). Sinon, envisagez de remplacer par les méthodes suivantes, plus simples. Ceux-ci ne vont pas nécessairement accélérer votre code, mais ils le rendront plus facile à maintenir, d'autant plus que j'ai remarqué que vous avez déjà des conditions spéciales pour gérer les bugs dans WebForm_RemoveClassName
.
var removeClass = function(element, className) {
// Simply split on white space and remove the specified class
var classes = element.className.toLowerCase().split(/\s+/);
var result = "";
className = className.toLowerCase();
for (var i in classes) {
if (classes.hasOwnProperty(i) && classes[i] != className) {
// Extra spaces at the end don't matter. I have yet to see a
// browser that cares about superfluous whitespace in classes
result += classes[i] + " ";
}
}
element.className = result;
}
var addClass = function(element, className) {
// Extra spaces affect nothing, don't bother trying to make
// the className attribute perfect.
element.className += " " + className;
}
Un petit exemple de ce:
var fakeElement = {
className: "foo-asdf asdf asdf-foo foo-asdf-asdf fooasdf asdffoo fooasdfasdf asdf fooasdffoo"
};
console.log(fakeElement.className);
removeClass(fakeElement, "asdf");
console.warn(fakeElement.className);
version de IE? –
Je cours la version 7. – Todd
C'est comme ça. IE8 peut être mieux que IE7, par un bon facteur. Voir ceci: http://news.softpedia.com/news/IE8-Performance-vs-from-Google-Chrome-and-Firefox-94342.shtml –