为什么通过Javascript访问DOM文档比使用Java更快?

时间:2011-10-16 22:46:42

标签: java javascript performance dom

最明显的速度差异是Javascript中dom元素的递归遍历,它总是比用Java实现的相同方法快得多。

为什么会这样?为什么我能够比Java更快地遍历dom文档,特别是当它们共享相同的方法(递归)时。

3 个答案:

答案 0 :(得分:2)

这是因为浏览器没有java的解释器。他们解释javascript。 DOM是一个可以在任何地方使用的模型,但它主要用于浏览器环境,并且浏览器多年来优化了DOM解析...对于javascript。

浏览器优化DOM解析的原因是DOM解析是动态Web开发的基石。考虑使页面更具动态性的常规方法:

1.) Listen for some events fired on the page.
2.) When those events are fired, modify some number of DOM objects, 
    e.g., by changing their visibility, geometry, or actually moving
    them to other portions of the DOM.

DOM在这里很重要的原因是它提供了一个规范,用于在浏览器内存中存储文档,这样就不必通过更改标记的一小部分来重新呈现整个页面。存储在浏览器内存中的这些DOM对象的结构就像本机javascript对象一样;因此,针对它们优化javascript更容易。

自动态网页变得至关重要以来,浏览器一直在互相争斗,以便拥有最快的自定义JavaScript解释器,并且在动态网络环境中,您将能够看到的主要地方优化的最大回报是DOM解析。

我无法看到java环境中迫切需要使用DOM,但它在浏览器环境中绝对必不可少。这是您在javascript中进行DOM解析比java更好的优化的最可能原因。更多人对使其在浏览器中工作具有既得利益。但是,为了澄清,我不确定代码级别的确切技术原因为什么它实际上更快。

答案 1 :(得分:1)

我认为答案可以概括为“因为这是浏览器开发人员更加努力的访问权限。”

如果在另一个世界中,每个人都使用Java在网页上提供丰富的交互性而Javascript仅用于烦人的滚动横幅栏,那么你很可能会问相反的问题。在这样的世界中,浏览器供应商会尽可能快地从 Java 进行DOM访问。

答案 2 :(得分:1)

您的Java代码是使用通用XML解析器(如Xerces)的probaby,并且对HTML的非XML兼容部分进行纠错。您的Javascript可能正在使用高度优化的特定于HTML的解析器,其CPU密集型部分几乎可以肯定在本机代码中实现。