浏览器是否优化了 js 代码

Do browsers optimize js code?

本文关键字:js 代码 优化 是否 浏览器      更新时间:2023-09-26

我遇到了一个奇怪的问题,我写了一个力导向的图形布局脚本,我想看看节点放置是如何近乎实时地发生的,这就是为什么我使用 requestAnimationFrame 在每次屏幕刷新时只计算力和重绘元素一次(尽管我知道使用"while"语句一步计算布局并立即绘制它会更有效(。

所以问题是,当我重新加载页面后第一次发生时,

它以我希望的方式工作:例如,60 节点图计算需要 8879 毫秒,我能够看到所有节点如何移动到它们的最终目的地,但是当我尝试在不重新加载页面的情况下重建相同的图形时,每个后续计算发生得更快:

8879ms
5797ms
4649ms
4330ms
3923ms
....
3046ms
....
etc

因此,节点几乎立即变得稳定。小图表的差异可能高达10-20倍!16 节点图:

3041
1583
1101
818
660
551
524
436
373
360
352
305
167

重新加载页面后,该过程将重复。所以我想知道为什么它首先会发生(浏览器是否以某种方式缓存和优化代码?(以及如果可能的话如何避免它。在IE,FF和Chrome中尝试过,结果相同。

谢谢

永远不要指望计算足够慢,以至于可以看到结果。迟早,你总是被证明是错误的。 requestAnimationFrame适用于需要尽可能流畅地绘制的动画,并且可能会为您提供任意 FPS。如果需要限制某些事情发生的速率,请使用 setInterval ,或使用requestAnimationFrame但根据自上一帧以来经过的时间按比例降低每个节点的移动量。

是的。Chrome有他们的V8引擎,Firefox有spidermonkey,我相信Safari在他们的WebKit框架中有JavaScriptCore。此外,Firefox还支持asm.js,这是javascript的一个子集,可以从C/C++代码编译下来,最近在虚幻引擎的JavaScript移植中使用。

http://www.unrealengine.com/html5/

所以,是的 - 大量资源用于优化JavaScript执行,并且性能因浏览器而异。新的通常工作得很光荣。(优化js实际上是一个棘手的过程,因为它是一种高度动态的语言 - 对象可以随时更改字符,属性可以随时更改。这种困难部分是谷歌"Dart"语言背后的理由:

https://www.dartlang.org/support/faq.html(

话虽如此,如果你写了一个非常低效的while循环,浏览器能做的只有这么多。

是的,他们做到了,这是提高js引擎性能的关键。

我听说谷歌Chrome的V8 js引擎将JavaScript编译为本机机器代码,这就是为什么chrome如此之快的原因。

http://en.wikipedia.org/wiki/V8_(JavaScript_engine(

看来你的问题在于你对javascript的了解,而不是浏览器,javascript有时很乏味,很难完全掌握。有时,您的代码只是执行,而没有按照预期遵循顺序。