有很多的资C、资本S计算机科学进入Javascript通过Tracemonkey,金鳞,并V8项目。做任何这些项目的(或他)地址的性能DOM操作,或者它们是纯粹的Javascript计算有关系吗?

有帮助吗?

解决方案

表现的纯DOM行动(getElementById/Tagname/选择,nextChild,等等)都不会受到影响,因为他们已经在纯C++。

如何JS发动机的改进将生效性不取决于一定程度上特定技术的使用性能的改进,以及性能DOM->JS的桥梁。

有关前者的例子是TraceMonkey的依赖所有的电话被JS功能。因为跟踪有效的内联道路的执行的任何点JS命的代码不能将内联(机代码,真正的多态递归,例外处理程序)追踪被中止,并执行落后的解释。TM的开发正在做的相当多的工作,以提高量的代码,可追踪(包括处理多态递归)然而现实地追踪跨越呼吁以任意地功能(例如。DOM)不可行的。出于这一原因,我相信他们正在寻找执行更多的DOM在JS(或至少在一个JS友好的方式)。这就是说,时代码是可追溯TM可以做一个非常好的工作,因为它可以较低的最大"对象",以更有效率和/或当地当量(例如。使用计算机整数而不是JS数量实现)。

JavaScriptCore(其是在金鳞极端的生活),并V8有一个更类似的做法,它们都JIT所有JS码立即产生的代码的更多的投机(如。如果你正在做的 a*b 它们产生的代码,假定 ab 数字和回落到非常缓慢的代码如果他们不是).这有一些好处,在追踪、即,你可以jit所有代码,无论是否它呼吁本机代码/引发的例外情况,等等,这意味着一个单一DOM电话不会破坏性能。不利的一面是,所有代码是投机性的TM-- 联调用数学。地板等,但最好的股份公司/V8能做的就是相当于 a=Math.floor(0.5) -> a=(Math.floor == realFloor) ? inline : Math.floor(0.5) 这成本在业绩和存储器的使用,它也不是特别可行的。为此原因是前面的汇编,而TM只有他代码之后,它的运行(并因此确切地知道什么是功能是所谓的)司法事务委员会和V8没有真正的基础上使这样的假设,基本上有猜测(目前既不是尝试此)。一件事,V8和股份公司做的尝试和补偿这个问题是对轨道什么他们已经看到在过去和将其纳入道路的执行,两者都使用组合技术要做到这一缓存,特别是热的情况下,他们改写的一小部分流的指令,并且在其他情况下,他们保留的频带暗藏地。广义而言如果你有的代码,去

a.x * a.y

V8和股份公司将检查的'隐型'/'结构'的两倍--每一次访问,然后检查 a.xa.y 都是数字,而TM将产生的代码,用于检查类型 a 只有一次,并且可以(所有的事情都是平等的)只是繁殖 a.xa.y 不检查,他们的数字。

如果你在寻找纯的执行速度目前有东西的混合袋作为每个发动机不会出现以做得更好,在某些任务比其他人--TraceMonkey胜利在许多纯粹的数学测试,V8胜严重的动态情况下,股份公司赢了,如果有一个混合。当然,虽然这是真的今天,它可能不是明天为我们所有的努力以改善性能。

其他问题,我提及的是DOM<->JS结合成本--这实际上可以发挥非常重要的一部分,在网络性能,最好的例子是Safari3.1/2对铬在Dromaeo的基准。铬是根据关的野生动物3.1/2分的,因此它是合理的安全承担类似DOM性能(compiler差异可能会引起某种程度的差异).在这一基准Safari3.1/2实际上节拍铬尽管有一个JS引擎,这显然是很慢得多,这基本上是由于效率更高的绑定之间的JSC/WebCore(dom/渲染/等的)和V8/WebCore

目前正在TM的DOM绑定似乎不公平的,因为他们还没有完成所有工作要做(唉),所以他们只是落在后面解释:-(

..

Errmmm,去有点长于预期,因此短的答复到原来的问题是"它取决于":D

其他提示

他们是纯粹的JavaScript。除非在 JS中实现的特定DOM方法调用,否则它们几乎没有效果(并不是说还没有完成减少此类调用的开销的工作)。

DOM优化是一个整体'其他水壶的松鼠 猴子 蜘蛛 fish ...布局甚至渲染引擎发挥作用,每个浏览器都有自己的实现和优化策略。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top