Le navigateur web DOM a été autour depuis la fin des années '90, mais cela reste l'une des plus grandes contraintes de performance et de vitesse.
Nous avons certains des plus brillants esprits de Google, Mozilla, Microsoft, Opera, W3C, et de diverses autres organisations qui travaillent sur des technologies web pour nous tous, alors, évidemment, ce n'est pas un simple "Oh, nous n'avons pas l'optimiser" la question.
Ma question est si je devais travailler sur le le cadre d'un navigateur web qui traite spécifiquement de ce sujet, pourquoi aurais-je tant de mal à le faire fonctionner plus vite?
Ma question n'est pas de demander ce qui le rend lent, c'est demander pourquoi n'est-elle pas devenir plus rapide?
Cela semble être à contre-courant de ce qui se passe ailleurs, comme JS moteurs avec une performance proche de celle du code C++.
Exemple de script vite fait:
for (var i=0;i<=10000;i++){
someString = "foo";
}
Exemple de la lente en raison de DOM:
for (var i=0;i<=10000;i++){
element.innerHTML = "foo";
}
Certains détails de la demande:
Après le bench-marking, on dirait qu'il n'est pas insoluble lent problème, mais souvent de la mauvaise utilisation de l'outil et de l'outil utilisé dépend de ce que vous êtes en train de faire de la cross-browser.
Il ressemble à la DOM l'efficacité varie considérablement entre les navigateurs, mais mon origine présomption que le dom est lente et irrémédiable semble être erronée.
J'ai couru des tests par rapport à Chrome, FF4, et IE 5-9, vous pouvez voir les opérations par seconde dans ce graphique:
Chrome est rapide comme l'éclair lorsque vous utilisez l'API DOM, mais bien plus lente en utilisant le .innerHTML de l'opérateur (par un séisme de magnitude 1000 fois plus lent), cependant, FF est pire que le Chrome dans certains domaines (par exemple, l'ajout de test est beaucoup plus lent que Chrome), mais le InnerHTML de test s'exécute beaucoup plus rapidement que le chrome.
IE semble effectivement être pire à l'aide de DOM ajouter et mieux à même de innerHTML comme vous le progrès à travers les versions depuis la version 5.5 (c'est à dire, 73ops/sec dans IE8 maintenant à 51 ops/sec dans IE9).
J'ai la page de test par ici:
http://jsperf.com/browser-dom-speed-tests2
Ce qui est intéressant, c'est qu'il semble que les différents navigateurs semblent tous avoir différents défis lors de la génération du DOM. Pourquoi une telle disparité ici?